xela” post=65617 @antonio.macrì: grazie mille funziona!
@old.antoio: grazie ma non credo di aver intuito come funziona xD@entrambi: potreste gentilmente se potete xD spiegarmi come funzionani i vostri codici (cosa e come fanno in pratica) così almeno magari mi si chiarisce come funziona la programmazione latex? grazie 😀
Senza scender troppo nei dettagli, innanzitutto \makeatletter e \makeatother servono per poter usare la chiocciola nei nomi dei comandi (un po’ come per dire: quel codice non lo devi usare direttamente! :)).
`\newcommand{\declarelist}[3]{%
\listadd{\lists@}{list@#1}%
\forcsvlist{\listcsadd{list@#1}}{#3}%
\csdef{list@#1@font}{#2}}`
Ogni volta che chiami \declarelist, viene aggiunto il nome della lista (disney o animals: in realtà viene aggiunto list@disney o list@animals) ad una lista chiamata \lists@ (che, diciamo, è una lista di primo livello). Quindi si prende ogni elemento che viene passato (pippo, pluto, …) e lo si aggiunge alle liste di secondo livello (list@disney e list@animals). Infine si memorizza per ogni lista di secondo livello il font che hai specificato. Vediamo \formatitem:
`\newcommand\formatitem[1]{%
\def\lists@tofind{#1}%
\forlistloop{\lists@find}{\lists@}}`
Viene messo nella “variabile” \lists@tofind il nome da formattare, quindi lo cerchiamo chiamando, per ogni lista di secondo livello che sta in \lists@, il seguente comando:
`\def\lists@find#1{%
\xifinlistcs{\lists@tofind}{#1}%
{\csname #1@font\endcsname{\lists@tofind}}{}}`
che non fa altro che scorrere la lista finché non trova il comando e, se lo trova, lo stampa con il font che era stato salvato all’inizio.
Comunque ripeto che il codice probabilmente può essere migliorato. Sono comandi presi dal pacchetto etoolbox, puoi leggerne la documentazione scrivendo texdoc etoolbox da shell/prompt dei comandi.
Comunque, se non ti serve stampare una lista per intero, ma ti serve solo un comando tipo \formatitem, il codice si riduce di molto. (In sostanza in questo codice i nomi delle liste, disney, animals, eccetera, potrebbero essere benissimo ignorati e tutto funzionerebbe lo stesso.) Al contrario se devi fare cose più complesse anche il codice può complicarsi un bel po’ 🙂
Ciao