Non 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.