Wie verwende ich eine Zeichenfolge sowohl als Dateinamen als auch als gedruckte Zeichenfolge, wenn sie einen Unterstrich enthält?

Wie verwende ich eine Zeichenfolge sowohl als Dateinamen als auch als gedruckte Zeichenfolge, wenn sie einen Unterstrich enthält?

Im folgenden Code \examplecodeist das zweite Argument gleichzeitig der Name einer Datei und der Titel eines Frames. Es schlägt fehl, wenn der Dateiname einen Unterstrich enthält.

\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}

Wie gehe ich mit Nr. 2 um, damit es für beide Zwecke verwendet werden kann?

Antwort1

Ihr Code schlägt fehl, weil Sie ihn nicht _im Textmodus verwenden können. Die einfachste Lösung wäre, ihn \_lokal in Ihrem Befehl neu zu definieren:

\newcommand{\examplecode}[2]{
    \mdfsetup{frametitle={\colorbox{white}{\space #2 \space}}}
    \begin{mdframed}
        \def\_{_}
        \inputminted[linenos,fontsize=\footnotesize,baselinestretch=.7]{#1}{src/#2}
    \end{mdframed}
}

und verwenden Sie es im Anruf:

\examplecode{c}{text\_file.c}

Antwort2

Eine andere Möglichkeit, die ich hierfür genutzt habe, besteht darin, das Dateinamenargument in ein weiteres Paar geschweifter Klammern einzuschließen, wie:

\inputminted[linenos,fontsize=\footnotesize,baselinestretch=.7]{#1}{{src/#2}}

verwandte Informationen