为了使生活更轻松,我想为讲座创建一份练习表,其中包括相应的解决方案。因此,我定义了一个\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}
设置solution
为 true 会产生错误。如何使用此功能定义命令或环境?
答案1
我的第一个评估是错误的,但正如 Gonzalo 善意指出的那样
逐字材料不能出现在标准命令的参数中
确实有效的解决方案是不使用任何参数:
\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}
才会显示。