如何在 ConTeXt 中使用 TeX 条件比较两个计数器?

如何在 ConTeXt 中使用 TeX 条件比较两个计数器?

我有两个计数器,\definenumber[words]\definenumber[items]。我尝试使用 TeX 条件来比较它们,例如:

\ifnum\getnumber[words]=\getnumber[items]
    This will print some text if the two counters have the same value.
fi

这不起作用。如何使用 TeX 条件来比较 ConTeXt 中的两个计数器?

答案1

\definenumber是 的同义词\definestructurecounter。您可以使用可扩展版本\rawstructurecountervalue获取结构计数器的值,并在 TeX 条件中使用它们。

另一种方法是使用commands.doifelse(...)lua 函数进行比较。我在下面介绍了两个版本(使用命名参数,以便于理解宏。可以将其保存在带有扩展名的文件中,也可以在文件的第一行.mkvi使用)。% macros=mkvi.tex

% macros=mkvi

\unprotect

\unexpanded\def\strc_helper_compare#if#else#operator#counterA#counterB%
    {\ctxcommand{doifelse(\rawstructurecountervalue[#counterA] #operator \rawstructurecountervalue[#counterB])}
        {#if}{#else}}

\unexpanded\def\doifelsecomparestructurecounter 
    {\strc_helper_compare\firstoftwoarguments\secondoftwoarguments}

\unexpanded\def\doifcomparestructurecounter 
    {\strc_helper_compare\firstofoneargument\gobbleoneargument}
\protect

\definestructurecounter[one]
\definestructurecounter[two]

\setstructurecounter[one][1]
\setstructurecounter[two][2]

\starttext
\ifnum\rawstructurecountervalue[one]>\rawstructurecountervalue[two]\relax
  One is bigger
\else
  Two is bigger
\fi

\doifelsecomparestructurecounter{>=}{one}{two}{Counter one is bigger}{Counter two is bigger}
\doifelsecomparestructurecounter{<}{one}{two}{Counter one is smaller}{Counter two is smaller}
\doifcomparestructurecounter{<}{one}{two}{Counter one is smaller}
\doifcomparestructurecounter{>}{one}{two}{Counter two is smaller}
\stoptext

相关内容