!["\numexpr\totvalue{ 函数}”](https://linux22.com/image/414062/%22%5Cnumexpr%5Ctotvalue%7B%20%E5%87%BD%E6%95%B0%7D%E2%80%9D.png)
找到下面的代码这里。它正常工作:如果 \numexpr\totvalue{<counter>}
替换为\the<counter>
结果错误(0)。
\documentclass{article}
\usepackage{totcount}
\newtotcounter{totalpoints}
\setcounter{totalpoints}{0}
\begin{document}
Total points are \the\numexpr\totvalue{totalpoints}
\begin{enumerate}
\item [5 points]\addtocounter{totalpoints}{5} Here is the first question.
\item [6 points]\addtocounter{totalpoints}{6} Here is the second.
\end{enumerate}
\end{document}
我发现如果将通常的\the<counter>
放在最后一次增量之后,它会正确提供结果。
有人能解释一下这两个命令的作用吗?
\totvalue
很可能是允许将写入数字的命令放在源代码中的任何位置,但它可能在此代码中还有其他用途,在这种情况下,我想知道它是什么。
至于\numexpr
,在我尝试的两种使用情况下,这个命令是不需要的,在上面的代码中也不需要。这是 TEX 原语吗?LATEX 命令?它通常做什么?为什么在上面的代码中添加了它?它是为了预见可能出现的问题而添加的?
答案1
一般解释:
在 LaTeX2e 中,
\newcounter{<counter>}
\c@<counter>
创建一个初始值为 0 的计数寄存器。\(ref)stepcounter{<counter>}
并\addtocounter{<conter>}{<num>}
改变存储在的值\c@<counter>
。\the<counter>
打印存储在中的值\c@<counter>
,默认以阿拉伯格式(例如,1、2、3、...)。
该包totcount
通过使用注册两个计数寄存器来扩展计数器概念\newtotcounter{<counter>}
。
- 第一个,
\c@<counter>
由 LaTeX2e 计数器注册\newcounter{<counter>}
并且作用相同。 - 第二种,
\c@<counter>@totc
是由 注册的\regtotalcounter{<counter>}
。 - 中的值
\c@<counter>@totc
与 中的值同步,并在文档末尾\c@<counter>
写入文件,并在文档开头读取。.aux
- 因此从第二次运行开始,保持上次运行结束时
\c@<counter>@totc
的值。\c@<counter>
具体到链接的答案:
在链接中回答质疑总积分,
- 当
.tex
文件第二次运行时,在文档的开头,的值为\c@totalpoints
0(因为\setcounter{totalpoints}{0}
),但的值为\c@totalpoints@totc
11(5 + 6)。 - 当使用
\thetotalpoints
替换时\the\numexpr\totvalue{totalpoints}
, 的值为\c@totalpoints
打印,即0。 - (推荐)当您使用
\total{totalpoints}
替换时\the\numexpr\totvalue{totalpoints}
, 的值\c@totalpoints@totc
是打印,因此您得到 11。 - 当您使用 时
\totvalue{totalpoints}
,您将获得 的值\c@totalpoints@totc
,并且您需要前缀\the
来打印该值。 - ,这是
\numexpr
最初由 eTeX 引入的一个原语(参见eTeX 手册,第 3.5 节)现在所有流行的 TeX 引擎都支持它,用于编写数字表达式。在链接的答案中,不是\numexpr
必需的。
综上所述,要打印一个计数器(由 注册\newtotcounter
或扩展\regtotalcounter
)的总值,使用\total{<counter>}
就足够了。