Re: Domande su: Appunti di programmazione in LaTeX e TeX

#24390
Up
0
Down
::

Ciao ragazzi, un saluto particolare a Enrico a cui è ovviamente rivolto il topic.

Vorrei prima fare un’osservazione: a pag. 43 c’è questo pezzo:

Una specificazione come
`
\vspace{2pc plus 3pt minus 6pt}
`
significa che si desidera uno spazio di 24pt (due righe di stampa corpo 10) che però può essere aumentato fino a 21pt o ridotto fino a 18pt.

Ma lo spazio non dovrebbe essere aumentato fino a 27pt?

Errore di stampa, grazie.

a pag. 55 parli del pacchetto ifthen ma sostieni (e mi trovi pienamente d’accordo) che l’annidamento delle condizioni diventa complesso data l’obbligatorietà del codice per l’else. Però tutti i condizionali in stile LaTeX sono della forma del pacchetto ifthen.

Infatti il nucleo di LaTeX usa spessissimo i condizionali primitivi e quelli definiti con \newif.

Io mi sono trovato nella condizione di dover verificare più di una volta se un argomento opzionale era vuoto o meno, quindi ho pensato di costruirmi un comando per non rifare sempre la stessa tiritera. Il comando va definito il stile LaTeX oppure una definizione come la seguente va bene?
`\newcommand{\if@empty}[1]{\def\next{#1}\ifx\next\@empty}`
Questa mi permette (a meno che non ci sia qualche errore che tu vedi e io no) di scrivere:
`\if@empty{#1} qualcosa \else qualcos'altro \fi`
con la clausola \else opzionale.

Puoi farlo, ma \if@empty non può essere annidato dentro altri condizionali:
`\ifdim\mialunghezza<6pt
\if@empty{#1}aaa\else bbb\fi
\else
ccc
\fi`
darebbe un errore nel caso \mialunghezza non fosse minore di 6pt. La via di scampo è definire
`\newcommand\testfor@empty[1]{TT\fi\def\next{#1}\ifx\next\@empty}`
usando, al posto di \if@empty, la combinazione
`\if\testfor@empty{#1}\else\fi`

A pag. 80 parli di \chardef e dici che il comando \@ne non è espandibile in quanto definito con
`\chardef\@ne=1`
La non espandibilità di \@ne è dettata dal fatto che è definita con \chardef? \`E una caratteristica di \chardef quindi? E poi non dovrebbe essere espandibile e la sua espansione dovrebbe essere proprio “1”? C’è qualcosa che non capito probabilmente…

Ogni comando definito con \chardef, \mathchardef, \countdef, \dimendef, \skipdef, \toksdef, \muskipdef, \font (spero di non averne dimenticati) è non espandibile. I comandi definiti con \chardef o \mathchardef possono essere però “espansi” al loro valore numerico con \number, perché le regole sintattiche di TeX permettono di usarli quando viene richiesto un numero.

I comandi definiti con \let ereditano invece l’espandibilità dal token dopo l’uguale:
`\let\NotAnA=A
\let\@xp=\expandafter`
Siccome A non è un token espandibile non lo sarà nemmeno \NotAnA; invece \expandafter è espandibile e quindi lo è anche \@xp.

Ciao
Enrico

Go to top