Re: codice del comando \LaTeX

#49095
Up
0
Down
::

Apro la documentazione di LaTeX con il comando di console texdoc source2e.

Dall’indice del pdf che texdoc apre, clicco sulla sezione Logos e leggo:

`3 \DeclareRobustCommand{\LaTeX}{L\kern-.36em%
4 {\sbox\z@ T%
5 \vbox to\ht\z@{\hbox{\check@mathfonts
6 \fontsize\sf@size\z@
7 \math@fontsfalse\selectfont
8 A}%
9 \vss}%
10 }%
11 \kern-.15em%
12 \TeX}`

Può interessare anche l’analisi di ciò che succede. Il comando \kern, che richiede di essere seguito da una dimensione, serve per inserire uno spazio non flessibile (può essere negativo); la differenza con \hskip, la cui versione LaTeX è \hspace, è che un \kern non può essere usato per spezzare una riga. Quindi: componi una L, arretra di un po’ (l’unità di misura è em, quindi l’arretramento è “proporzionale al corpo del carattere).

In un gruppo, in modo che le assegnazioni fatte siano locali, si misura l’altezza di una T: con \sbox{0}{T} si costruisce una box nel registro temporaneo 0 per avere a disposizione \ht0; a questo punto si costruisce una \vbox di altezza \ht0 nella quale si mette una \hbox e una spaziatura verticale a riempire: \hbox{…}\vss. In questo contesto \vss si comporta più o meno come \vfill.

Che cosa va nella \hbox? Una A rimpicciolita, nel corpo che LaTeX userebbe per gli esponenti nelle formule. Per sapere quale sia, indipendentemente dal corpo in uso, c’è un bel trucco: si dà \check@mathfonts che appunto calcola i corpi da usare per le formule e definisce correttamente \@sfsize (oltre ad altri comandi); l’espansione di \@sfsize è proprio la misura del corpo per gli esponenti. Quindi \fontsize{\@sfsize}{0} predispone il corpo da usare per il testo che segue; l’avanzamento di riga è nullo, tanto qui è irrilevante. Prima di \selectfont, che sceglie il font, si dà \math@fontsfalse per evitare un certo numero di calcoli inutili.

Chiusa la \vbox si dà un altro \kern negativo e si compone il logo \TeX.

Esercizio: perché i % alla fine delle righe numerate 3 e 11 sono inutili?

Nota: dove nella spiegazione ho scritto 0, il codice ha \z@; il nucleo di LaTeX è più efficiente con \z@.

Ciao
Enrico

Go to top