我想用这个命令定义来简化我的代码附录:
\usepackage{listings}
% ...
\newcommand{\CodeListing}[1]{%
\lstinputlisting[caption=#1]{#1}%
}
也就是说,标题应该是文件名。但是,标题参数和文件名参数似乎对下划线的处理方式不同。对于前者,我需要对其进行转义 ( \_
),但对于后者,非转义下划线就可以正常工作。如果我只想传递一次文件名,该如何解决这个问题?
! Package Listings Error: File `spt2/my\T1\textunderscorefile(.m)' not found.
这是一个简单的例子:
\documentclass[a4paper]{scrreprt}
\usepackage{listings}
\begin{document}
\newcommand{\codelst}[1]{
\lstinputlisting[caption=#1]{#1}
}
\codelst{/home/tim/projekt/matlab/path/save\_plot\_as.m}
\end{document}
这对于无下划线的路径来说效果很好。
答案1
这是一个很常见的问题:如果要排版下划线,则需要传递\_
,这对于文件名来说并不好。解决方案:
\documentclass[a4paper]{scrreprt}
\usepackage{listings}
\newcommand{\codelst}{\begingroup
\catcode`_=12 \docodelst}
\newcommand{\docodelst}[1]{%
\lstinputlisting[caption=\texttt{#1}]{#1}%
\endgroup
}
\begin{document}
\codelst{/home/tim/projekt/matlab/path/save_plot_as.m}
\end{document}
最好也\texttt{#1}
这样说,以便文件名将以打字机字体打印。
这个想法是将 变成_
可打印的字符,使其失去其特殊含义。诀窍在于将其更改为前该论点被抓住了。