由于标题带有下划线,\lstlistoflistings 中缺少 $ 插入

由于标题带有下划线,\lstlistoflistings 中缺少 $ 插入

我使用此命令添加代码

\newcommand*{\addcode}[2]{
    \lstinputlisting[caption={#1, (\detokenize{#2}.ml)}]{code/#2.ml}
}

我的一些.ml文件包含下划线,例如Two_Opt.ml

因此,当我调用时,\lstlistoflistings我收到一些错误,因为 Latex 理解我的_索引,并且我得到了这个结果: 在此处输入图片描述 我怎样才能使它工作?

分数维:

\usepackage{listings}

\newcommand*{\addcode}[2]{
    \lstinputlisting[caption={#1, (\detokenize{#2}.ml)}]{code/#2.ml}
}
\begin{document}
\lstlistoflistings
\addcode{2-opt}{Two_Opt}
\end{document}

答案1

您需要\protect在脆弱的命令中使用宏。

\begin{filecontents}{Two_Opt.ml}
some code...
\end{filecontents}
\documentclass{article}
\usepackage{listings}

\newcommand*{\addcode}[2]{
    \lstinputlisting[caption={#1, (\protect\detokenize{#2}.ml)}]{#2.ml}
}
\begin{document}
\lstlistoflistings
\addcode{2-opt}{Two_Opt}
\end{document}

相关内容