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