我正在写一些讲义,我想自动生成两个版本。一个版本包含所有内容(示例、附加说明等),另一个版本仅包含基本信息(定义、定理等)。我目前的方法是/曾经是利用 ifthenelse 包,如下所示:
\newenvironment{optional}
{
\ifthenelse{\boolean{opt}}{
}
{
}{}
}
这样我就可以利用环境
\begin{optional}
some optional information.
\end{optional}
通过相应地设置布尔值,我将生成每个版本的讲义。
当然,问题在于我的 \newenvironment 语句中的括号不匹配,导致解析出现问题。我该如何解决这个问题?
答案1
看起来评论包可能对你有用:
\usepackage{comment}
\ifthenelse{\boolean{opt}}
{\includecomment{optional}}
{\excludecomment{optional}}
答案2
使用\bgroup
代替不匹配的{
和\egroup
代替不匹配的}
当然,我忘记了\ifthenelse
做一些奇怪的事情来隐藏条件周围的原始语法。
我认为最简单的方法(也是我现在更愿意输入的方法,因为我不用手机了)是使用¹\NewDocumentEnvironment
参数+b
作为主体。然后,您可以将环境声明为:
\NewDocumentEnvironment{optional}{+b}
{\ifthenelse{\boolean{opt}}{#1}{}}
{} % ❶
你会注意到这里的所有内容都在定义中定义\begin
,而\end
❶ 是空的。这是因为b
告诉 LaTeX 将整个环境主体视为参数,因此它将由#1
定义中的 ² 表示,
问题在于您无法在您的环境中逐字逐句,但\ifthenelse
已经排除了这一点。
- 有
+
必要允许多段落内容optional
。 - 如果您对正在定义的环境有其他参数,则
b
需要将其作为您定义的最后一个参数,当然,参数编号会有所不同。