
Ich habe ein Makro verwendet, X
das ähnlich ist wie
\newcommand{\X}[1]{{\ttfamily{\detokenize{#1}}}}
um bestimmte Wörter zu formatieren, die einen Unterstrich enthalten können, ohne mit maskieren zu müssen \_
. Das hat funktioniert, bis ich es in einem verwendet habe \caption
. Dies führt zu einem Fehler sowohl mit pdflatex als auch mit lualatex ( ! Missing $ inserted.
). Betrachten Sie dieses MWE:
\documentclass{article}
\newcommand{\X}[1]{{\ttfamily{\detokenize{#1}}}}
\begin{document}
\listoffigures
\begin{figure}
\centering
\caption{One \X{a_b} Two}
\end{figure}
\end{document}
Muss ich dafür eine andere/aufwändigere Lösung verwenden X
oder sollte ich die Unterstriche einfach generell escapen? Mich interessieren eher die Best Practices als ein sehr cleverer Hack.
Antwort1
Der Befehl muss robust sein, sonst .lof
wird die Annotation in der Datei
\contentsline {figure}{\numberline {1}{\ignorespaces One \texttt {a_b} Two}}{1}%
(Ich habe die Syntax von {\ttfamily...}
in geändert \texttt{...}
, was besser ist.) Wie Sie sehen, \detokenize
wurde angewendet und ist verschwunden.
Wenn Sie andererseits
\newcommand{\X}{}% for safety
\DeclareRobustCommand{\X}[1]{\texttt{\detokenize{#1}}}
Die Anmerkung wäre
\contentsline {figure}{\numberline {1}{\ignorespaces One \X {a_b} Two}}{1}%
und das Problem würde nicht auftreten.
Alternativ können Sie \protect\X
es auch bei einem bewegten Streit verwenden.