该包的示例forloop
是\newcounter{ct}\forloop{ct}{1}{\value{ct} < 5}{\arabic{ct}}
。我需要比较两个计数器,其中第一个运行到第二个。<=
不起作用, 或 也\leq
不起作用...+1
。我知道我可以用\not
或来解决这个问题\or
,但这些都是变通方法。它到底是如何工作的?
- 我可以吗?如果可以,我该怎么做“真实”
<=
? - 我可以吗?如果可以,我该如何使用公式(如
\value{a}<\value{b}+1
)?
答案1
不可以。它基于 TeX 的
\ifnum
,并且仅支持,<
。=
>
使用 eTeX 原语
\numexpr
:\newcounter{ct} \forloop{ct}{1}{\value{ct} < \numexpr\value{page}+10}{\arabic{ct} }
或者您可以使用
etoolbox
包(对于这个简单的布尔表达式来说看起来很糟糕,我同意):\newcounter{ct} \setcounter{ct}{1} \whileboolexpr{test {\ifnumcomp{\value{ct}}<{\value{page}+10}}} {\arabic{ct} \stepcounter{ct}}
答案2
expl3 编程包允许您使用扩展的比较运算符,包括<=
等;这里有几种方法可以执行您的特定任务(例如,另请参阅\prg_stepwise_inline:nnnn
),但这里有一个明确使用“do while”方法的示例:
\documentclass{article}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\int_new:N \ct
\int_set:Nn \ct {10}
\bool_while_do:nn
{ \int_compare_p:n { \ct <= 17 } }
{
[ \int_use:N \ct ]
\int_incr:N \ct
}
\ExplSyntaxOff
\end{document}