robitex” post=87129Tornando al problema TeXnico, il comando “trucco” è definito nel kernel di LaTeX così:
`\catcode`\%=12
\def\@percentchar{%}
\catcode`\%=14`Quello che mi incuriosisce è questo:
Come fa a lavorare il comando \catcode sul token \% che mi pare al momento dell’esecuzione non è ancora stato definito?
R.
Roberto, \catcode non lavora sula token \% ma sul “token” `\%; per TeX a livello di Knuth, ma suppongo ancora conservato in tutti i suoi figli, compreso luatex, \catcode lavora su un numero che rappresente l’indirizzo di un carattere; nel caso specifico il carattere è %, ma `% vuol dire “indirizzo di %”; per vari motivi di definizioni di macro è meglio non usare nelle assegnazioni di un codice di categoria il carattere come tale, ma è meglio farlo precedere da un backslash; anche se la contorl sequence non è definita, `\% continua a voler dire “indirizzo di %”.
Mi sono trovato a dovere assegnare un codice di categoria al carattere corripondente a un parametro di una macro, ma in quel caso non ho potuto usare il backslash, ma ho dovuto scrivere `#1 per riferirmi all’indirizzo del carattere passato come primo argomento alla macro; se avessi scritto `\#1, avrebbe segnalato un errore, perché avrebbe preso l’indirizzo di # a cui avrebbe aggiunto in coda la cifra 1, in sostanza come se avesse moltiplicato epr 10 l’indirizzo di # e vi avesse aggiunto 1.
Il tutto è spiegato nel TeXbook.
Il codice di categoria 14 è quello del carattere di commento; quindi quel piccolo brano di codice dice: “cambia il codice di categoria del segno % per trattarlo come codice di un carattere analfabetico (lo stesso dei segni di inteprunzione e simili); definisci \@percentchar come un segno % di categoria “analfabetica”; riporta il codice di categoria di % al suo valore originale di carattere di commento. Senza questo trucchetto \@percentchar sarebbe praticamente l’equivalente di un carattere di commento.