Verwenden von \detokenize und Unterstrich in Kombination mit \listoffigures

Verwenden von \detokenize und Unterstrich in Kombination mit \listoffigures

Ich habe ein Makro verwendet, Xdas ä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 Xoder 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 .lofwird 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, \detokenizewurde 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\Xes auch bei einem bewegten Streit verwenden.

verwandte Informationen