使用 etoolbox 循环多重偶然性

使用 etoolbox 循环多重偶然性

我想使用该etoolbox包来管理计数索引上的一些循环意外事件。特别是,我想在循环的第一次和最后一次执行时执行不同的操作。

现在我可以制定方法来实现这一点,例如在这个 MWE 中。在第一种情况下,我使用嵌套,\ifboolexpr而在第二种示例中,我为 s 设置了一个神秘的切换系统toggle。这两种方法都实现了根本目标……

\documentclass{article}
\usepackage{etoolbox}
\newcounter{index}%
\begin{document}
\def\LAST{10}

\noindent%
\setcounter{index}{0}%
\whileboolexpr{test {\ifnumcomp{\theindex}<{\LAST}}}{%
\stepcounter{index}%
\ifboolexpr{test {\ifnumcomp{\theindex}{=}{1}}}%
  {NOT\\}%
  {\ifboolexpr{test {\ifnumcomp{\theindex}{=}{\LAST}}}%
    {NOT\\}%
    {\theindex\\}%
  }%
}

\newtoggle{flag}
\noindent%
\setcounter{index}{0}%
\togglefalse{flag}%
\whileboolexpr{test {\ifnumcomp{\theindex}<{\LAST}}}{%
  \stepcounter{index}%
  \ifboolexpr{test {\ifnumcomp{\theindex}{=}{\LAST}}}{%
    \togglefalse{flag}}{}%OFF FOR LAST COLUMN
  \iftoggle{flag}{\theindex\\}{NOT\\}%
  \toggletrue{flag}% ON FOR COLUMNS 2 TO \LAST-1
}%
\end{document}

在此处输入图片描述

但是,文档让我相信我应该能够使用布尔值andor用单个 来实现这种偶然性\ifboolexpr。但是,我无法构造这样的语法来做到这一点。有没有办法使用语法etoolbox执行单个“if”检查来确定这是\LAST循环中的“第一次偏移或偏移”,或者换句话说,这是循环中的“不是第一次偏移也不是偏移\LAST”?

答案1

以下是组合条件的一种方法:

在此处输入图片描述

\documentclass{article}
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\newcounter{index}%
\begin{document}
\def\LAST{10}

First: \par
\noindent%
\setcounter{index}{0}%
\whileboolexpr{test {\ifnumcomp{\theindex}<{\LAST}}}{%
\stepcounter{index}%
\ifboolexpr{test {\ifnumcomp{\theindex}{=}{1}}}%
  {NOT\ }%
  {\ifboolexpr{test {\ifnumcomp{\theindex}{=}{\LAST}}}%
    {NOT}%
    {\theindex\ }%
  }%
}

Second: \par
\newtoggle{flag}
\noindent%
\setcounter{index}{0}%
\togglefalse{flag}%
\whileboolexpr{test {\ifnumcomp{\theindex}<{\LAST}}}{%
  \stepcounter{index}%
  \ifboolexpr{test {\ifnumcomp{\theindex}{=}{\LAST}}}{%
    \togglefalse{flag}}{}%OFF FOR LAST COLUMN
  \iftoggle{flag}{\theindex\ }{NOT\ }%
  \toggletrue{flag}% ON FOR COLUMNS 2 TO \LAST-1
}%

Third: \par
\noindent%
\setcounter{index}{0}%
\whileboolexpr{test {\ifnumcomp{\value{index}}<{\LAST}}}{%
  \stepcounter{index}%
  \ifboolexpr{
    test {\ifnumgreater{\value{index}}{1}}%
    and
    test {\ifnumless{\value{index}}{\LAST}}}%
  {\theindex\ }%
  {NOT\ }%
}
\end{document}

“First” 和 “Second” 与您原来的循环相匹配,而“Third” 使用and子句来合并两个tests。

相关内容