"\numexpr\totvalue{ 函数}”

"\numexpr\totvalue{ 函数}”

找到下面的代码这里。它正常工作:如果 \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@totalpoints0(因为\setcounter{totalpoints}{0}),但的值为\c@totalpoints@totc11(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>}就足够了。

相关内容