我有两个计数器,\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