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