
No código abaixo, o segundo argumento \examplecode
é simultaneamente o nome de um arquivo e o título de um quadro. Falha quando o nome do arquivo contém um sublinhado.
\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}
Como faço para lidar com o número 2 para que ele possa ser usado para ambos os fins?
Responder1
Seu código falha porque você não pode usar _
em modo texto. A solução mais fácil seria redefinir \_
localmente no seu comando:
\newcommand{\examplecode}[2]{
\mdfsetup{frametitle={\colorbox{white}{\space #2 \space}}}
\begin{mdframed}
\def\_{_}
\inputminted[linenos,fontsize=\footnotesize,baselinestretch=.7]{#1}{src/#2}
\end{mdframed}
}
e use-o na chamada:
\examplecode{c}{text\_file.c}
Responder2
Outra maneira de fazer isso é agrupar o argumento do nome do arquivo em outro par de chaves, como:
\inputminted[linenos,fontsize=\footnotesize,baselinestretch=.7]{#1}{{src/#2}}