输入文件名作为列表中的标题

输入文件名作为列表中的标题

我正在研究以下一段代码

\newcommand{\mycin}[1]{% new command for icluding piece of code from external files
  \lstinputlisting{#1}
}

我想添加一个标题来反映命令中包含的实际文件名,我尝试了类似

\newcommand{\mycin}[1]{% new command for icluding piece of code from external files
  \lstinputlisting[caption=\caption{#1}]{#1}
}

或者

\newcommand{\mycin}[1]{% new command for icluding piece of code from external files
  \lstinputlisting[caption={#1}]{#1}
}

但这两种解决方案都不起作用,有没有办法在新命令中自动生成标题?

答案1

您的尝试实际上适用于不包含特殊字符(如_^、等&)的文件名$,这些字符在 (La)TeX 中具有特殊含义。

\detokenize您可以使用(这需要 e-TeX,即不到几年的 LaTeX 编译器,而不是 Science Workplace 版本)将它们恢复为正常字符。(还有一种非 e-TeX 方式)

您需要tt字体才能正确显示这些字符:

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

\begin{document}

\mylisting{foo.c}

\mylisting[frame=rlbt,language=C]{foo_bar.c}

\end{document}

结果

答案2

http://en.wikibooks.org/wiki/LaTeX/Source_Code_Listings#Settings

\documentclass{article}
\usepackage{listings}

\lstset{  
    caption=\lstname
}
\begin{document}

    \lstinputlisting{foo.c}

    \lstinputlisting[frame=rlbt,language=C]{foo_bar.c}

\end{document}

相同的输出,但没有宏。

相关内容