如何使用 \newif enable 指令隱藏清單或逐字環境

如何使用 \newif enable 指令隱藏清單或逐字環境

為了讓生活更輕鬆,我想為講座創建一個練習表,包括相應的解決方案。因此我定義了 a\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

我的第一個評估是錯誤的,但正如貢薩洛善意所指出的那樣

逐字材料不能出現在標準指令的參數中

一個有效的解決方案是不使用任何參數:

\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},它們將會顯示。

相關內容