循环至 totcount 计数器的值

循环至 totcount 计数器的值

我正在尝试在 LaTeX 中实现一个受计数器foreach值限制的循环totcount,但这根本不起作用,而且我不明白为什么。

这到底能不能做到?如果能,怎么做?

这是一个最简单的失败例子:

\documentclass{scrartcl}
\usepackage{totcount}
\usepackage{pgffor}

\begin{document}
% dummy totcount counter
\newtotcounter{dummycounter}
\addtocounter{dummycounter}{10}
Total of dummy counter = \total{dummycounter}

% for loop with explicit number
\foreach\index in {1,...,10}{repeat }

% for loop with number taken from totcount counter
\foreach\index in {1,...,\total{dummycounter}}{repeat}

\end{document}

输出结果如下:

Total of dummy counter = 10
repeat repeat repeat repeat repeat repeat repeat repeat repeat repeat
repeat10pt¿1pt10pt

控制台上的错误消息如下:

! Missing number, treated as zero.
<to be read again> 
                   \def 
l.15 ...ex in {1,...,\total{dummycounter}}{repeat}

因此,在 的上下文中\foreach, 的输出似乎\total不被解释为数字。这非常令人费解,因为根据定义,它是一个数字。

包裹澄清:

  • 使用的目的totcount是在第一次运行期间添加一些值,然后将其写入文件.aux并可在第二次运行时使用(我已经在其他地方成功使用它)
  • pgffor是实现循环的一种可能方法,如在本网站其他问题的答案中所发现的;我确实尝试了其他方法,但对于这个特定的问题没有任何成功,但pgffor似乎总体上更容易实现

答案1

\total无法扩展,这可能是这里的问题。然而,

\foreach\index in {1,...,\totvalue{dummycounter}}{repeat}

有效,因为\totvalue是可扩展的,并且扩展为一个可以测试的数字(第一次运行时为 -1)。

\documentclass{scrartcl}
\usepackage{totcount}
\usepackage{pgffor}

\begin{document}
% dummy totcount counter
\newtotcounter{dummycounter}
\addtocounter{dummycounter}{10}
Total of dummy counter = \total{dummycounter}

% for loop with explicit number
\foreach\index in {1,...,10}{repeat }

% for loop with number taken from totcount counter
\foreach\index in {1,...,\totvalue{dummycounter}}{repeat}

\end{document}

在此处输入图片描述

答案2

正如克莱门斯所解释的,\total是不可扩展的,因为它使用了内部的\def,从而阻止了扩展——最后,它不能在数字扩展上下文中使用,而这在条件中是\if检查循环结束所必需的。

我也在这里申请\totvalue,但是以传统的方式TeX \loop

旁注:counters最好在序言中定义,而不是在文档正文的某个地方。

\documentclass{article}
\usepackage{totcount}


\newcounter{loopcntr}


\newtotcounter{dummycounter}
\begin{document}
\addtocounter{dummycounter}{10}
Total of dummy counter = \total{dummycounter}

\loop\unless\ifnum\value{loopcntr}>\numexpr\totvalue{dummycounter}-1%
\stepcounter{loopcntr}
\theloopcntr\ repeat

\repeat


\end{document}

在此处输入图片描述

相关内容