OldClaudio” post=69576Non ho verificato nel kernel di LaTeX, ma una volta scrivere il nome di un file che contenesse un underscore provocava errori a causa del suo codice di categoria; ora non sembra succedere più, ma certamente, l’underscore cambia categoria in diversi punti dell’esecuzione di varie macro.
Io allora cercherei di rendere locale il cambio di categoria e scriverei:
`
\AtBeginDocument{\mathcode`_=\string”8000}
{\catcode`_=\active
\gdef_{\@ifnextchar[\ItOrUp@sb@mathrm\sb}}
\def\ItOrUp@sb@mathrm[#1]{\sb\mathrm{#1}}
`
e analogamente per gli apici; eviterei \@makeatother\_ perché il lavoro l’ha già fatto il gruppo; la definizione \gdef è come \def, ma è globale e trascende il gruppo; ovviamente funziona solo quando _ è un carattere attivo, quindi solo in matematica.
Il problema dell’underscore non legale nei nomi dei file si presenta quando è attivo. Con le mie macro non lo è. Il nucleo di LaTeX non cambia mai il codice di categoria di _, che io sappia, eccetto per definirne l’azione nel caso sia “math active”, cioè abbia mathcode “8000, definendolo come [tt]\_[/tt]; ma la mia definizione annulla questa.
Naturalmente il codice di categoria cambia in un ambiente verbatim, ma è un’altra faccenda.
In ogni caso, affinché la faccenda funzioni l’underscore deve avere codice di categoria 12 (oppure 11, ma questo è proprio meglio di no). Se gli lasci codice di categoria 8, il suo significato come “math active” non viene mai usato.
Ciao
Enrico