我正在研究以下一段代码
\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}
相同的输出,但没有宏。