在列表标题中插入文件名的命令

在列表标题中插入文件名的命令

我希望有一个命令可以插入标题中包含文件名的列表。只要文件名中没有“_”等,这个命令就可以正常工作。

我也尝试了上一个主题中的建议(输入文件名作为列表中的标题):

\usepackage{listings}
\newcommand{\mylisting}[2][]{%
\lstinputlisting[caption={\texttt{\detokenize{#2}}},#1]{#2}%}

这很有效,但是如果我想插入listoflistings并包含包含下划线的文件,就会失败。

\lstlistoflistings

查看该.lol文件表明该listoflistings命令包含以下行:

\contentsline {lstlisting}{\numberline {5.1}\texttt {test_file.cpp}}{36}{lstlisting.5.1}

我认为问题在于它不包含命令\detokenize

有什么建议么?

答案1

您想\protect在前面添加\detokenize

\newcommand{\mylisting}[2][]{%
  \lstinputlisting[caption={\texttt{\protect\detokenize{#2}}},#1]{#2}}

\protect当标题在文本中排版时,该命令不会执行任何操作,但会让 LaTeX 将其不加更改地写入.lol文件中。

相关内容