作業を楽にするために、対応するソリューションを含む講義用の演習シートを作成したいと思います。そのため、\newif
ソリューションを含めるかどうかを制御する を定義しました。lstlisting
またはverbatim
環境が必要になるまでは、これは問題なく機能していました。次のコードはエラーの最小限の例であり、でも機能しますverbatim
。
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\newif\ifsolution
\solutionfalse
\ifsolution
\newcommand{\solution}[1]{#1}
\else
\newcommand{\solution}[1]{}
\fi
\begin{document}
This is always shown.
\solution{The listing is only shown if ifsolution is true.
\begin{lstlisting}
Test
\end{lstlisting}
}
\end{document}
true に設定するとsolution
エラーが発生します。この関数を使用してコマンドまたは環境を定義するにはどうすればよいでしょうか?
答え1
私の最初の評価は間違っていましたが、ゴンサロが親切に指摘してくれたように
逐語的な資料は標準コマンドの引数には現れない
実際に機能する解決策は、引数を使用しないことです。
\ifsolution
\def\solution{\relax}
\else
\newcommand{\solution}[1]{}
\fi
ただし、 パッケージを使用することもできますcomment
。 これにより、特定の環境を として簡単に定義できるようになりますcomment
。
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{listings}
\usepackage{comment}
\excludecomment{solution}
%\includecomment{solution}
\begin{document}
This is always shown.
\begin{solution}
The listing is only shown if ifsolution is true.
\begin{lstlisting}
Test
\end{lstlisting}
\end{solution}
\end{document}
解決策は表示されず\excludecomment{solution}
、代わりに書き込むと解決策\includecomment{solution}
が表示されます。