Как использовать строку и как имя файла, и как печатную строку, если она содержит подчеркивание?

Как использовать строку и как имя файла, и как печатную строку, если она содержит подчеркивание?

В коде ниже второй аргумент \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}}

Связанный контент