ifthenelse 括号不匹配

ifthenelse 括号不匹配

我正在写一些讲义,我想自动生成两个版本。一个版本包含所有内容(示例、附加说明等),另一个版本仅包含基本信息(定义、定理等)。我目前的方法是/曾经是利用 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已经排除了这一点。


  1. +必要允许多段落内容optional
  2. 如果您对正在定义的环境有其他参数,则b需要将其作为您定义的最后一个参数,当然,参数编号会有所不同。

相关内容