😮
grazie mille per questi consigli!
😯
Vediamo un pochino di spiegare tutto per bene. La parte iniziale, da \newif al primo \fi serve per definire una macro che abbia valori diversi se il condizionale che introduciamo è vero o falso. Con
`\newif\ifproofingindex`
si definisce un condizionale che inizialmente è falso; la riga successiva lo rende vero, ma se la commentiamo rimarrà falso. Se il condizionale è vero, definiamo \@emphindex equivalente a \underline, altrimenti a \@firstofone che semplicemente restituisce il suo argomento.
Adesso veniamo alla macro importante, cioè \toindex, che è definita con un argomento opzionale e uno obbligatorio. Il valore normale dell’argomento opzionale è vuoto, ci serve per il primo confronto. Prima di tutto la macro compone nel testo il suo argomento obbligatorio (cioè la parola da indicizzare), dandolo come argomento a \@emphindex, di cui abbiamo già visto l’effetto.
Successivamente definisce una macro temporanea (\@temp) la cui espansione è l’argomento opzionale. Se questo è assente nella chiamata di \toindex, \@temp è equivalente a \@empty e il condizionale segue il ramo vero, con il risultato di eseguire \index{#2} (ricordo che #1 sta per l’argomento opzionale, #2 per quello obbligatorio).
Se invece l’argomento opzionale è presente (e non è vuoto), il condizionale \ifx dà falso e quindi viene eseguito \index{#1!#2}.
In definitiva, \toindex{pippo} compone “\underline{pippo}” o “pippo” a seconda del valore del condizionale \ifproofingindex ed esegue \index{pippo}. Invece \toindex[topolino]{pluto} compone “\underline{pluto}” o “pluto” (come prima) ed esegue \index{topolino!pluto}.
Le macro \@firstofone e \@empty sono definite nel nucleo di LaTeX:
`\def\@firstofone#1{#1}
\def\@empty{}`
Sebbene sembrino inutili, servono eccome! Ah, fra parentesi, un comando con argomento opzionale è automaticamente robusto.
C’è una piccola precisazione da fare: commentare \proofingindextrue può cambiare l’impaginazione, perché il termine indicizzato quando il condizionale è vero l’argomento sottolineato è inserito in una \hbox e quindi non partecipa alla sillabazione. La sottolineatura può anche modificare la distanza fra le righe, in casi particolari. Tuttavia non sembrano problemi molto importanti, visto che questa sottolineatura serve solo in fase di stesura.
Invece di sottolineare si potrebbe usare il colore, definendo
`\def\@emphindex{#1}{\color{red}#1\normalcolor}`
invece che con \let\@emphindex\underline. Ma anche questo non è privo di effetti sulla sillabazione.
Ciao
Enrico