Certamente caricarli prima non fa male; anzi si è assolutamente sicuri che tutto si svolgerà per il meglio, indipendentemente dal fatto che inputenc con l’opzione utf8 dilazioni la definizione dei glifi al momento del [tt]\begin{document}[/tt].
Dopo aver letto completamente al documentazione sia di inputenc sia di utf8ienc ed averne constatato la sciatteria e l’incongruenza di diverse affermazioni, concordo che, nonostante possa essere indifferente (“possa”, congiuntivo presente, frase che implica la possibilità ma non la certezza 🙂 ) quale dei due si carica prima, è certamente meglio caricare prima fontenec. Sarà anche indifferente, ma non si sa mai.:neutral:
Questo thread, me ne rendo conto ed è colpa mia, rischia di essere una discussione di lana caprina; se lo proseguo è solo per schiarirmi le idee, non per polemica sterile e inutile, visto che abbiamo già convenuto che è conveniente e opportuno caricare inputenc dopo che sono stati caricati tutti i pacchetti che in qualche modo usino dei font.
Riassumo quanto sono riuscit a capire:
1) il nucleo di LaTeX carica di default gli encoding dei font OT1, T1, TS1, OML, OMS nell’ordine opportuno affinché il font testuale di default sia OT1 (poi speriamo che in futuro l’encoding di default sia T1, ma per il momento accontentiamoci di quello che c’è)
2) il pacchetto fontenc permette di caricare o di (tentare di) ricaricare altri font enconding; in realtà i font enconding già caricati impediscono di essere ricaricati, ma tra quelli caricati nel nucleo e quelli esplicitamente ricaricati con fontenc deve esserci una diversa interazione, altrimenti non potremmo mai sapere quale sia l’encoding di default e non potremmo mai imporre che questo sia T1; ricordiamo anche che se i file di encoding vengono caricati con \input non esistono limitazioni a quante volte lo stesso encoding possa essere ricaricato. Tutto questo permette anche di definire la macro \LastDefinedEncoding in modo che al momento di \begin{document} LaTeX sappia quale sia l’encoding definito per ultimo da usare come encoding di default.
3) il pacchetto inputenc stabilisce la corrispondenza fra i caratteri immessi con la tastiera o che il programma di tipocomposizione legge quando elabora il file tex da compilare. Con le altre codifiche non dovrebbe succedere niente di particolare, ma con la codifica utf8 la corrispondenza dei caratteri in input con la codifica interna di LaTeX è più complessa. Dice la documentazione di utf8enc.def (contenuta nel file xtf8ienc.dtx) che:
However, we don’t know if there are font encodings still to be loaded (either with fontenc or directly with \input by some some package). Font enconding files are loaded only if the corresponding encoding has not been loaded yet, and they always begin with \DeclareFontEncoding. We now redefine the internal kernel version of the latter to load the Unicode file if available.
Perciò, visto che ogni encoding comincia con il comando \DeclareFontEncoding, definito nel nuclo, quato comando viene ridefinito in modo che ogni nuovo font encoding richiamanto dopo inputenc usi la nuova definzione, la quale contiene quello che occorre per caricare gli appositi file
Di qui si evince (io evinco) che se certi font enconding sono già stati caricati prima di inputenc (in particolare lo sono gli encoding elencati al punto 1) ma credo che la seguente operazione di ridifinizione non riguardi gli encoding matematici) questi sono già stati immessi con la dichiarazien del nucleo di LaTeX e sono già noti a in qualunque momento si chiami inputenc nel preambolo, che sia prima o dopo di fontenc. Invece i font dichiarati con fontenc o con \input dopo aver letto inputenc, vengono caricati con la nuova definizione di \DeclareFontEncoding che provvede ad aggiungere il nome alla lista dei font encoding conosciuti e a caricare gli appositi file dfu.
Tutto ciò premesso mi pare ovvio che sia conveniente caricare qualunque cosa riguardi i font prima di inputenc come raccomanda Enrico ma da quanto si evince (io envinco) dalla lettura della documentazione e del codice, sembrerebbe che la cosa sia davvero indifferente, nel senso che è stato previsto che chi scrive classi o chi usa LaTeX possa anche commettere delle “violazioni” delle raccomandazioni, come si legge all’inizio del paragrafo 2.4 di utf8ienc.pdf:
The original plan was to set up the UTF-8 support at \begin{document}; but then any text characters used in the preamble (as people do even though advised against it) would fail in one way or the other. So the implementation was changed and the Unicode definition files for already defined encodings are loaded here.
seguito dal capoverso che ho citato prima. [“already defined encodings are loaded here” si riferisce alla definizione di \cdp@elt e all’esecuzione di \cdp@list; poi segue la ridefinizione di \DeclareFontEncoding che gestisce i font che venissero caricati dopo inputenc]
A me pare di essermi schiarito le idee; se ho interpretato male, mi piacerebbe essere corretto.
Resta il fatto che la raccomandazione di Enrico di caricare tutto ciò che riguarda i font prima di chiamare inputenc con l’opzione utf8 sia un’ottima raccomandazione.