在下面的代码中,第二个参数\examplecode
同时是文件的名称和框架的标题。当文件名包含下划线时,它会失败。
\documentclass[a4paper,10pt,openany]{scrbook}
\usepackage{minted}
\usepackage{mdframed}
\newcommand{\examplecode}[2]
{
\mdfsetup{frametitle={\colorbox{white}{\space #2 \space}}}
\begin{mdframed}
\inputminted[linenos,fontsize=\footnotesize,baselinestretch=.7]{#1}{src/#2}
\end{mdframed}
}
\begin{document}
\examplecode{c}{testfile.c} % ok
\examplecode{c}{test_file.c} % error
\end{document}
我该如何处理 #2 以便它可以用于这两个目的?
答案1
您的代码失败,因为您无法_
在文本模式下使用。最简单的解决方案是\_
在命令中本地重新定义:
\newcommand{\examplecode}[2]{
\mdfsetup{frametitle={\colorbox{white}{\space #2 \space}}}
\begin{mdframed}
\def\_{_}
\inputminted[linenos,fontsize=\footnotesize,baselinestretch=.7]{#1}{src/#2}
\end{mdframed}
}
并在调用中使用它:
\examplecode{c}{text\_file.c}
答案2
我这样做的另一种方法是将文件名参数包裹在另一对花括号中,例如:
\inputminted[linenos,fontsize=\footnotesize,baselinestretch=.7]{#1}{{src/#2}}