\newif enable コマンドを使用して Listings または Verbatim 環境を非表示にする方法

\newif enable コマンドを使用して Listings または Verbatim 環境を非表示にする方法

作業を楽にするために、対応するソリューションを含む講義用の演習シートを作成したいと思います。そのため、\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}が表示されます。

関連情報