将 \detokenize 和下划线与 \listoffigures 结合使用

将 \detokenize 和下划线与 \listoffigures 结合使用

X我一直在使用类似这样的宏

\newcommand{\X}[1]{{\ttfamily{\detokenize{#1}}}}

格式化可能包含下划线的某些单词,而无需使用 转义\_。这一直有效,直到我在 中使用它\caption。这导致 pdflatex 和 lualatex ( ) 都出现错误! Missing $ inserted.。考虑这个 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}

我是否必须使用不同的/更复杂的解决方案,X或者我应该通常转义下划线?我对最佳实践更感兴趣,而不是非常聪明的黑客。

答案1

您需要命令足够强大,否则.lof文件中的注释将变成

\contentsline {figure}{\numberline {1}{\ignorespaces One \texttt {a_b} Two}}{1}%

(我将语法从 改为,{\ttfamily...}这样\texttt{...}更好)。如您所见,\detokenize已被应用并消失。

另一方面,如果你这样做

\newcommand{\X}{}% for safety
\DeclareRobustCommand{\X}[1]{\texttt{\detokenize{#1}}}

注释将是

\contentsline {figure}{\numberline {1}{\ignorespaces One \X {a_b} Two}}{1}%

问题就不会显现出来。

或者,\protect\X在移动争论中使用。

相关内容