Ordine di caricamento dei pacchetti

  • Creatore
    Topic
  • #85190
    Up
    0
    Down
    ::


    Un preambolo corretto, si sa, facilita notevolmente il lavoro. Ma non sempre basta. Tanto l’utente esperto quanto quello alle prime armi prima o poi si vedono restituire errori apparentemente incomprensibili, risolvibili semplicemente modificando l’ordine con cui i pacchetti sono chiamati oppure addirittura eliminando uno o più pacchetti perché vengono già caricati da altri pacchetti.

    Mi è capitato proprio ieri: il pacchetto tcolorbox carica listings, e ottenevo l’errore che avete visto nell’ultimo mio messaggio. Soluzione: caricare tcolorbox prima delle impostazioni di listings e addirittura commentare la chiamata di quest’ultimo pacchetto. Tutto fila liscio.

    Non tutti pensano che l’ordine di chiamata dei pacchetti nel preambolo sia importante, e ci cascano. Visto che ultimamente arrivano segnalazioni sulla guida di Lorenzo e mia, e visto che è nostra intenzione darle un taglio ancora più operativo, pensavo di ampliare leggermente la sezione 3.12.2, sempre che sia necessario farlo.

    Potete (ri)leggerla e vedere se secondo voi può essere meglio formulata o ampliata o ridotta? Ci sono regole particolari a parte quella di leggere l’inizio della documentazione dei pacchetti che servono? L’esperienza dei GV (Grandi Vecchi) del forum è preziosa.

    Ciao
    Tommaso

Visualizzazione 3 filoni di risposte
  • Autore
    Risposte
    • #85191
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Ti prometto che lo esamino con cura, ma non subito.
        Ciao
        Claudio

      • #85192
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Tommaso, sì, il testo è scarno per l’intero §3.12, compresi i suoi sotto paragrafi.

          Il 3.12.3 è forse superfluo, perché dubito che uno che cerca di documentarsi vada a cercare i file .ins e .dtx; se lo fa vuol dire che è già abbastanza esperto per scaricare direttamente da CTAN e sa come fare. se non lo spaesse, quell poche righe del §3.12.3 non sarebbero certamente sufficienti.

          Invece un paragrafo sull’ordine di caricamento peso che sia utile; direi quanto segue, nella bella forma italiana che tu sai costruire:

          1) il pacchetto hyperref va caricato sempre per ultimo, o almeno dopo qualsiasi pacchetto che definisca o ridefinisca i comandi di sezionamento i comandi per le didascalie e i comandi per i riferimenti incrociati; Siccome “almeno” è una espressione vaga, è opportuno caricarlo sempre per ultimo.

          2) Per ogni altro pacchetto di solito conviene caricare inputenc, fontenc e babel nella sequenza seguente:
          1º fontenc; 2º babel; 3º ogni eventuale altro pacchetto che carichi font diversi da quelli di default; 4º inputenc; quest’ordine è particolarmente importante se l’opzione a inputenc è utf8; questo perché non ha senso definire le decine di migliaia di comandi necessari per trattare tutti i segni che sono definiti con la codifichi unicode, ma che i vari pacchetti dei font non caricano tutti anche quelli dei glifi non contenuti in quei font.

          3) per ogni altro pacchetto per essere sicuri è meglio controllarne la documentazione leggendo quelli altri pacchetti esso carichi; sono le sue indispensabili dipendenze, senza le quali il pacchetto non potrebbe funzionare. si scelga allora un ordine tale per cui non si cerchi di caricare due volte lo stesso pacchetto. Non scegliere un ordine compatibile con le dipendenze, vuol dire probabilmente che si possano verificare errori di “option clash” oppure di comandi che non corrispondono alla loro definizione. Il primo errore indica il fatto che due pacchetti A e B caricano il pacchetto C con opzioni diverse; se un pacchetto viene chiamato due volte senza opzioni o con le stesse opzioni, la seconda volta che lo si cerca di chiamare i meccanismi interni di LaTeX evitano che la seconda chiamata venga eseguita; ma se durante questa verifica si trovano chinate con opzioni diverse si ha l’errore di inconsistenza di opzioni, in inglese option clash.

          4) alcuni pacchetti ridefiniscono comnadi già esistenti; non sempre lo scrittore di pacchetti usa i comandi giusti per controllare la necessità della ridefinizione. In questi casi è possibile che un pacchetto non venga caricato perché sarebbe una seconda definizione, ma il pacchetto chiamante potrebbe assumere che il pacchetto sia stato chiamato e cerca di definire ciò che non c’è; \renewcommand, quindi emette un messaggio d’errore. Al contrario la ridefinizione viene fatta senza ricorrere a \renewcommand, ma mediante comandi dell’interprete (comandi primitivi). In seguito altri pacchetti o l’utente stesso usano quel comando ma la sua definizione non è più consistente con quello che l’utente suppone che sia. Viene allora emesso che il comando tal dei tali è usato in modo non conforme alla sua definizione.

          Il lettore non si scoraggi; questi eventi sono abbastanza rari; tuttavia quando incontra messaggi d’errore del tipo di quelli indicati, o trova che i collegamenti ipertestuali non funzionano correttamente, allora controlli l’ordine di caricamento dei pacchetti di cui ritiene di avere bisogno; segua le indicazioni date sopra e curi con attenzione l’elenco delle dipendenze.

          Corollario di questa situazione è che meno pacchetti si caricano, meno pericoli di conflitti fra pacchetti si manifestano; e come ulteriore corollario si eviti di caricare pacchetti di cui di fatto non si usano le funzionalità, con la giustificazione che “non si sa mai, potrei averne bisogno”.

        • #85193
          franen
          Partecipante
            Up
            0
            Down
            ::

            OldClaudio” post=845771) il pacchetto hyperref va caricato sempre per ultimo, o almeno dopo qualsiasi pacchetto che definisca o ridefinisca i comandi di sezionamento i comandi per le didascalie e i comandi per i riferimenti incrociati; Siccome “almeno” è una espressione vaga, è opportuno caricarlo sempre per ultimo.

            Magari farei accenno all’importante eccezione di glossaries, che deve essere caricato dopo hyperref.
            Fran

          • #85194
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Non è l’unica eccezione, per la verità; e questo si evince studiando le dipendenze di ogni pacchetto. Ma sono pochissime le eccezioni; oltre a glossaries c’è anche bidi, per esempio.

          Visualizzazione 3 filoni di risposte
          • Devi essere connesso per rispondere a questo topic.

          Go to top