当字符串包含下划线时,如何将其用作文件名和打印字符串?

当字符串包含下划线时,如何将其用作文件名和打印字符串?

在下面的代码中,第二个参数\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}}

相关内容