etoolbox:布尔开关中的环境挂钩

etoolbox:布尔开关中的环境挂钩

我做错了什么,导致下面的操作在这里不起作用:

(编辑:我混淆了真假部分,但我不想更改代码,因为答案以一种令人困惑的方式提到了这一点。)

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{xcolor}

\usepackage{fancyvrb}
  \DefineVerbatimEnvironment{ExampleVerbatim}{Verbatim}%
    {fontsize=\small,formatcom=\color{blue},commandchars=\\\{\}}

\usepackage{setspace}
  \doublespacing

\usepackage{etoolbox}
  \newbool{tightspace}
  \setbool{tightspace}{false}
%----------------------------%
\ifbool{tightspace}{% true part empty - should do nothing
}{% false part:
  \BeforeBeginEnvironment{ExampleVerbatim}{\begin{spacing}{0.9}}%
  \AfterEndEnvironment{ExampleVerbatim}{\end{spacing}}%
}

\usepackage{lipsum}

\begin{document}

\lipsum[1]

\begingroup
\setbool{tightspace}{true}
\begin{ExampleVerbatim}
Because of \textcolor{black}{\itshape{\textbackslash}setbool\{tightspace\}\{true\}}
the line spacing should be very narrow ...
Don't wonder at \textcolor{red}{the missing line breaks:}
\lipsum[2]
\end{ExampleVerbatim}
\endgroup

\begin{ExampleVerbatim}
And now, with \textcolor{black}{\itshape{\textbackslash}setbool\{tightspace\}\{false\}},
it should have \textcolor{red}{the document's line stretch ...}
\lipsum[3]
\end{ExampleVerbatim}

\lipsum[4]

\end{document}

看起来,布尔开关不起作用——或者还有其他我没有意识到的事情?

答案1

您在序言中检查一次布尔开关并做出定义,该定义以后不会更改。

如果您稍后进行测试,它将按预期工作,例如:

\BeforeBeginEnvironment{ExampleVerbatim}{\ifbool{tightspace}{}{\begin{spacing}{0.5}}}%
\AfterEndEnvironment{ExampleVerbatim}{\ifbool{tightspace}{}{\end{spacing}}}%

但是,我会将间距值改为变量。我猜你的意思是将紧密间距检查反转过来,就像在原始代码中一样。

答案2

我认为你应该进行一次小小的演练。

我会尝试:

  1. 你定义一个新的 bool——tightspace没问题
  2. 您将新的 bool 设置tightspace为 false - 没问题 此步骤不是必需的,因为newbool将 bool 设置为 false。
  3. 你提一个条件——问题就在这里。条件为假,所以在环境的开始ExampleVerbatim处设置整个文档的间距环境。

相关内容