LaTeX 编程比较运算符

LaTeX 编程比较运算符

该包的示例forloop\newcounter{ct}\forloop{ct}{1}{\value{ct} < 5}{\arabic{ct}}。我需要比较两个计数器,其中第一个运行到第二个。<=不起作用, 或 也\leq不起作用...+1。我知道我可以用\not或来解决这个问题\or,但这些都是变通方法。它到底是如何工作的?

  1. 我可以吗?如果可以,我该怎么做“真实” <=
  2. 我可以吗?如果可以,我该如何使用公式(如\value{a}<\value{b}+1)?

答案1

  1. 不可以。它基于 TeX 的\ifnum,并且仅支持,<=>

  2. 使用 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}

相关内容