ArsClassica, Acronyms e problema nelle testatine

  • Creatore
    Topic
  • #80077
    Up
    0
    Down
    ::


    Ciao a tutti,
    se i risultati della ricerca che ho fatto sul forum non mi ingannano, questo argomento non è ancora stato trattato.

    Vi espongo brevemente il problema: sto scrivendo la tesi con [tt]ArsClassica[/tt] e sto usando il pacchetto [tt]acronyms[/tt] (so che molti suggeriscono [tt]glossaries[/tt], ma mi trovo bene con questo).

    Ogni tanto mi capita di usare un acronimo nel titolo di una sezione o di un capitolo: non so se sia una abitudine deprecabile o no ma occorre prendere qualche aggiornamento per evitare problemi… il primo l’ho risolto, il secondo no!

    Vi propongo un esempio pratico: ho l’acronimo [tt]\acro{EC}{Event Calculus}[/tt], tuttavia per poterlo usare all’interno di un titolo di sezione, occorre scrivere:
    `\section{Families of \NoCaseChange{\acs{EC}} variants} % (fold)
    \label{sec:families_of_ec_variants}

    % section families_of_ec_variants (end)
    `in cui il richiamo all’acronimo [tt]\acs{EC}[/tt] è racchiuso all’interno di [tt]\NoCaseChange{…}[/tt].
    Senza quest’ultimo comando, l’acronimo non verrebbe espanso correttamente producendo: 1.1 FAMILIES OF EC! VARIANTS

    Sfortunatamente, però, i titoli di sezione vengono anche usati per comporre le testatine e in quell’ambiente il comando [tt]\ac{…}[/tt] non è debitamente protetto (vedasi immagine allegata).
    A causa della mia conoscenza approssimativa di LaTeX, non so come intervenire per ovviare a questo problema. Qualcuno mi può aiutare?

    Domanda nella domanda: a me piace molto che gli acronimi siano evidenziati perché così il lettore capisce che sono collegamenti che può navigare, tuttavia titoli e testatine stanno meglio se sono formattati in modo omogeneo. So che la cosa più semplice consiste nel non usare acronimi nei titoli, ma per amore della conoscenza di LaTeX mi chiedo: c’è modo di usarli ugualmente e ottenere una formattazione omogenea in titoli e testatine? Se si, quale?

    Grazie a tutti, ciao,
    Stefano

    [attachment=496]Testatina.png[/attachment]

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 6 filoni di risposte
  • Autore
    Risposte
    • #80078
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Hai presente l’argomento facoltativo dei comandi di sezionamento? Per esempio:

        \section[ titolo breve ]{ titolo lungo }

        Questi due titoli, breve e lungo, possono significare tante cose; certo è che oltre a significato letterale di breve e lungo, c’è un altro significato “nascosto”, tanto ben nascosto che è noto solo a coloro che leggono le guide (:grin: ); cioè: il titolo lungo costituisce il titolo della sezione e viene composto così come viene indicato nella stringa che rappresenta il titolo lungo[\i] comprese le macro per cambiare font, per raccogliere gli acronimi, eccetera. Invece il titolo breve va a finire nelle testatine e nell’indice generale; perciò, anche senza scorciare il titolo, basta evitare di indicare nel titolo breve cose che non si vogliono fare apparire nelle testatine e nell’indice generale; per esempio:`\section[Families of EC variants]{Families of \NoCaseChange{\acs{EC}} variants} % (fold)`

      • #80079
        Up
        0
        Down
        ::


        Ciao Claudio,
        grazie per la risposta!

        Conosco l’uso dell’opzione per il titolo breve, ma purtroppo non fa quello che vorrei che facesse!
        Infatti, usando il codice che suggerisci, ottengo una testatina impeccabile dal punto di vista grafico, ma in cui l’acronimo EC non è cliccabile!
        (E sarebbe comunque equivalente a sostituire l’acronimo con il testo equivalente, almeno per quanto riguarda sommario e testatine.)

        Giusto per completezza sull’argomento titolo breve vs. titolo lungo, aggiungo che invece sarebbe possibile scrivere: `\section[Families of \NoCaseChange{\acs{EC}} variants]{Families of \NoCaseChange{\acl{EC}} variants} % (fold)` per avere ‘1.1 FAMILIES OF EVENT CALCULUS VARIANTS‘ come titolo della sezione e ‘1.1 Families of EC variants 6‘ come voce di sommario e di nuovo 1.1 FAMILIES OF EC! VARIANTS | 7 come testatina in cui, però, c’è ancora il problema dell’espansione corretta dell’acronimo e la forma breve EC è colorata sia in sommario che in testatina.

        Ora che ci faccio caso, l’uso di [tt]\NoCaseChange{…}[/tt] introduce un’altra anomalia: la E e la C dell’acronimo (in forma breve o di etichetta) rimangono maiuscole invece di essere correttamente rese in minuscolo come prevede lo stile di [tt]ArsClassica[/tt]. Si potrebbe provare a racchiudere [tt]\NoCaseChange{…}[/tt] dentro a [tt]\MakeLowercase{…}[/tt] ma si renderebbe di nuovo minuscolo ‘EC’. Bisognerebbe quindi proteggere [tt]\NoCaseChange{…}[/tt] con [tt]\protect[/tt] ma non funziona (non sto qui a spiegare perchè, per la maggior parte delle persone sarebbe tedioso).

        Fallimento! Sono appena riuscito a crearmi un problema più grande invece che risolverlo… 😕
        Eppure dev’essere possibile farlo! Non è forse LaTeX un linguaggio Turing-completo?
        Per fortuna che posso sempre espandere a mano l’acronimo…
        Ogni commento da parte degli esperti che hanno la pazienza di spiegarmi le cose è comunque bene accetto! 😀

      • #80080
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Non ho capito bene: vorresti che l’acronimo in testatina sia cliccabile?
          direi che se l’acronimo è nella stessa pagina sarebbe molto meglio che lasciassi stare le testaine; se ti leggi la docunentazione tecnica (non quella d’uso) di hyperref, sapresti che la cosa non potrebbe funzionare. Ma sono sorpreso lo stesso per una cosa che, per usare un understatement, è piuttosto insolita e direi anche poco pratica.

        • #80081
          Up
          0
          Down
          ::


          Come dicevo nel primo messaggio, la cosa più semplice da fare è rinunciare all’uso degli acronimi nei titoli.

          Già autonomamente ho cambiato il codice in `\section[Families of EC variants]{Families of Event Calculus variants} % (fold)
          \label{sec:families_of_ec_variants}

          % section families_of_ec_variants (end)` ma premetto fin d’ora che non sono soddisfatto del risultato.

          Il mio scopo è di imparare “a programmare” LaTeX, magari facendo cose inutili, complicate o inutilmente complicate ma l’unica maniera per padroneggiare uno strumento è conoscere tutto ciò che ti offre per poi scegliere di volta in volta la soluzione ottimale.
          Purtroppo, nelle guide e nei manuali che ho letto finora non viene spiegato come programmare…
          I “trucchi” come ad esempio titolo corto e titolo lungo, invece, ci sono tutti ma è difficile ricordarseli tutti!

          Ad ogni modo grazie lo stesso, la mia priorità è la tesi al momento… 😉

          Ciao a tutti,
          Stefano

        • #80082
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Hai letto la guida di Enrico Gregorio Appunti di programmazione in LaTeX e TeX? La puoi scaricare dalla sezione Documentazione, qui sopra, nella sottosezione dedicata a Enrico Gregorio.

            Non ti basta? C’è il manuale dei manuali: The TeXbook di D.E. Knuth in persona (Editrice: Addison Wesley 1984).

            Poi basta cercare in rete, da Tex for the impatient a TeX by topic.

            Ma una cosa è avere un “catalogo” dei comandi di un linguaggio, un’altra è imparare a programmare. A suo tempo programmavo in Assembly IBM 370; l’elenco dei comandi e la loro sintassi li avevo tutti, ma per fargli fare quello che volevo io ce ne voleva di astuzia per gestire le memorie/registri e le memorie su file o RAM, oltre che astuzie per non fare giri troppo tortuosi. Anche allora il miglior modo per imparare era studiare il linguaggio, e poi vedere come l’avevano usato gli altri.
            Con LaTeX ho imparato di più cercando di decifrare il file sorgente non commentato latex.ltx, che non leggendo manuali; ho imparato a capire il manuale di hyperref dopo averne decifrato il codice, ho imparato a scrivere classi, scrivendone e imparando dai miei stessi errori, senza chiedere a nessuno, perché ai miei tempi non c’erano i forum e di guide non se ne parlava proprio, tranne per il TeXbook e il LaTeX Manual di Leslie Lamport (editrice Addison Wesley, 1994, 2.a edizione).

            Anch’io ho provato a programmare cose inutili e complicate per vedere se ci riuscivo; è utile per imparare. ma bisogna farselo da soli; se si chiede ad altri magari si arriva alla soluzione ma non si impara quasi niente. Quando arriverai a scrivere codice che contiene 7 \expandafter uno dietro l’altro, allora avrai capito la differenza fra un linguaggio interpretato e un linguaggio compilato. (mi sembra di ricordare che Enrico abbia una volta dovuto ricorrere a 15 \expandafter uno dietro l’altro; ma lui è un TeX guru, e dico solo “guru”, per non togliere la qualifica ufficiale di TeX Wizard al Gran Maestro Knuth) 🙂

          • #80083
            lorenzo.pantieri
            Partecipante
              Up
              0
              Down
              ::

              PoianaNana” post=79279Già autonomamente ho cambiato il codice in
              `\section[Families of EC variants]{Families of Event Calculus variants}
              `

              Ottima soluzione. Suggerisco sempre di scrivere i titoli di capitoli e paragrafi in “plain italian”: è la cosa migliore.

            • #80084
              Up
              0
              Down
              ::


              Un consiglio: ogni volta che chiedi qualcosa, dovresti esporre in maniera puntuale il problema magari facendo un esempio minimo compilabile, in modo che chiunque possa riprodurlo facilmente. Per di più parli del pacchetto acronyms, ma non mi risulta che esista, si può solo supporre che tu ti riferisca ad acronym.

              PoianaNana” post=79263Domanda nella domanda: a me piace molto che gli acronimi siano evidenziati perché così il lettore capisce che sono collegamenti che può navigare, tuttavia titoli e testatine stanno meglio se sono formattati in modo omogeneo. So che la cosa più semplice consiste nel non usare acronimi nei titoli, ma per amore della conoscenza di LaTeX mi chiedo: c’è modo di usarli ugualmente e ottenere una formattazione omogenea in titoli e testatine? Se si, quale?

              Ecco: hai già capito che la cosa migliore in questo caso è fare a mano. Peraltro, come ha scritto OldClaudio, se davvero vuoi imparare a programmare in LaTeX, la via maestra è leggere una guida e soprattutto metter mano al codice: leggerne e scriverne, provare e riprovare, cercare le molte vie per risolvere un problema, sbatterci la testa.

              O magari frequentare il forum e trovarvi ogni tanto qualcuno che ha un problema e cercare di risolverglielo 😉 …come ho tentato di fare io con te 😀

              Andiamo al sodo. Oltre alla perfetta inutilità di avere un collegamento blu in ogni testatina, io dubiterei anche dell’utilità di avere tutte le occorrenze degli acronimi colorati e col link. Nella mia tesi triennale la pensavo come te, ma ora sinceramente mi sembra di aver appesantito la pagina con tutti quei link e punti di colore.

              Comunque sia, per quello che so il problema non mi pare facile da risolvere in maniera soddisfacente. Ci sono diversi motivi. Per esempio, [tt]\acs[/tt] vorrebbe il suo argomento sempre in maiuscolo, per poterlo riconoscere, mentre classicthesis/arsclassica lo trasforma in minuscolo o maiuscolo a seconda del contesto (maiuscolo nei capitoli, minuscolo nei paragrafi e nelle testatine). Le cose si complicano ulteriormente a causa di hyperref.

              Provo a esporre più in dettaglio cosa succede. Scrivendo
              `\acro{EC}{…}` viene definito un comando [tt]\fn@EC[/tt], il quale, quando sarà chiamato (per esempio da [tt]\acs{EC}[/tt]), produrrà il testo dell’acronimo con il relativo collegamento. Ma già compare un problema: il link non funziona. Il motivo è che viene creata un’àncora (“hypertarget”) di nome “ec” (minuscolo), a causa del fatto che l’etichetta della description è composta in maiuscoletto spaziato minuscolo. Scrivendo [tt]\acs{EC}[/tt], invece, si richiama [tt]\fn@EC[/tt], che cerca l’àncora “EC” (maiuscolo).

              Infatti, con il maiuscoletto spaziato a un certo punto si fa:
              `\MakeTextLowercase{Families of \acs{EC} variants}` dove l’argomento di [tt]\acs[/tt] non è ciò che verrà stampato sul PDF, bensì serve proprio a richiamare il comando [tt]\fn@EC[/tt].

              Ed ecco un altro problema: se si lascia agire [tt]\MakeTextLowercase[/tt], il comando precedente diventa
              `families of \acs{ec} variants` e perciò [tt]\acs[/tt] cercherà il comando [tt]\fn@ec[/tt], non trovandolo. Per questo compare la segnalazione “ec!“.

              Affinché [tt]\acs[/tt] trovi l’argomento in maiuscolo, si può usare [tt]\NoCaseChange[/tt], come hai fatto, che è una soluzione semplice e manuale. Si potrebbe pure automatizzare, facendo sì che [tt]\acs[/tt] trovi da sé anche l’acronimo minuscolo (dichiarando [tt]\fn@ec[/tt] equivalente a [tt]\fn@EC[/tt]).

              Ma in ogni caso, come hai visto, sorgerebbe un problema ulteriore: per convertire il testo in maiuscolo o minuscolo, i comandi [tt]\MakeTextUpper/Lowercase[/tt] espandono tutto quello che hanno come loro argomento, a meno che non sia preceduto da [tt]\protect[/tt].

              Ora, [tt]\protect[/tt] di solito viene usato per evitare che siano espansi i cosiddetti “comandi fragili” quando vengono scritti nei file ausiliari. E per questo motivo vale [tt]\noexpand[/tt] quando si scrive su file, mentre è [tt]\relax[/tt] quando si sta componendo nel documento. Gli acronimi non devono essere espansi quando si scrive sui file: perciò i comandi come [tt]\acs[/tt] sono tutti protetti con dei [tt]\protect[/tt]. Tuttavia, bisogna evitare l’espansione di determinati comandi anche in altri contesti, per esempio quando si usa [tt]\edef[/tt] con un comando che contiene del codice che va eseguito (anziché espanso; per esempio un assegnamento). Perciò, durante l’espansione del suo argomento, [tt]\MakeTextLowercase[/tt] tratta sempre i [tt]\protect[/tt] che incontra come fossero [tt]\noexpand[/tt], anche se ci si trova nel documento.

              Ergo, [tt]\MakeTextLowercase[/tt] (o [tt]\MakeTextUppercase[/tt]) non espanderà mai [tt]\acs[/tt], quindi non arriverà mai a [tt]\fn@EC[/tt], quindi non opererà mai sul testo con link ipertestuale. Dunque, se pure si può impedire che venga ridotto in minuscolo quell’”EC” (cosa che impedirebbe di chiamare [tt]\fn@EC[/tt]), oppure trovare una soluzione equivalente, non si può però (con la definizione esistente di [tt]\acs[/tt]) adattare in maiuscolo o minuscolo il testo prodotto da [tt]\fn@EC[/tt].

              Peggio: [tt]\fn@EC[/tt] è qualcosa del tipo
              `\hyperlink {EC}{EC}` dove il primo argomento è il nome dell’àncora (“hypertarget”), mentre il secondo è il testo che verrà scritto (in blu) sul PDF. Di nuovo, il primo deve essere uguale a quello dichiarato sopra (minuscolo), il secondo invece varia.

              La morale della favola è che una soluzione alla fine si può trovare, per piegare LaTeX al mio volere (cit.).
              Magari non elegante o di compromesso, o una non-soluzione a un non-problema (cit. :- ), ma il bello ogni volta è ragionarci e capirci qualcosa di più.
              😉

              Ciao,
              Antonio

              .

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

          Go to top