
以下のコードでは、 の 2 番目の引数は\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}}