如何在宏内转义代码列表标题中的下划线?

如何在宏内转义代码列表标题中的下划线?

我使用这个宏将 Matlab 代码包含在我的文档中:

\newrobustcmd{\inputmatlabcode}[1]{\lstinputlisting[basicstyle={\scriptsize \ttfamily}, caption=#1, language = matlab]{#1}}

当我尝试包含名称中带有下划线的代码文件时,它会失败。我看到这个问题但由于我在标题和列表参数中都引用了文件名,因此只需要在标题中转义下划线。

我认为该underscore包会破坏我的其余文档,所以我尽量避免使用它。

答案1

也许你不需要underscore包。你可以使用\detokenize它来正确处理下划线:

如果你hello_world.m在工作目录中创建了一个包含几行内容的文件,那么这里就是一个 MWE(同时我想提醒你在提问时附上一个 MWE):

\documentclass{article}
\usepackage{listings}

\newcommand\inputmatlabcode[1]{
  \lstinputlisting[
    basicstyle={\scriptsize\ttfamily},
    caption=\detokenize{#1},
    language=matlab
  ]{#1}
}

\begin{document}
\inputmatlabcode{hello_world.m}
\end{document}

结果将会像这样: 在此处输入图片描述

相关内容