如何使用 \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}

设置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}才会显示。

相关内容