\def\totalobjects@putlabel{%
\addtocounter{totalpage}{\c@page}
\immediate\write\@auxout{\string
\newlabel{reftotaltables}{{}{\refstepcounter{totalpage}}{\relax }{}{}}}
}
\AtEndDocument{\totalobjects@putlabel}
或者我如何才能完成下一步工作:
\def\totalobjects@putlabel{%
\addtocounter{totalpage}{\c@page}
\refstepcounter{totalpage}\label{reftotalpages}
}
\AtEndDocument{\totalobjects@putlabel}
我正在使用 XeLaTeX。使用第二个代码片段后,标签不起作用(当我引用它时,我看到了“??”)。使用第一个代码片段后,我收到编译错误。
答案1
对文件的写入.aux
发生在页面被发送出去时,除非\write
前面有\immediate
,就像在您的第一个代码中一样。
但是,第一个代码无法工作,因为除非 LaTeX 正在发送一页或刚刚发送了一页,否则页码是不可预测的:页码计数器在发送过程结束时进行步进。因此\immediate\write
不能保证可靠地工作。
对于第二个代码,您使用\label
,这反过来又依赖于写入文件.aux
但没有\immediate
,因此相应的\newlabel
命令只能在下一次发货时写出。但是有不输入代码后即可下次发货\AtEndDocument
。
您可以使用该atveryend
包来解决这个问题;但是如果您所需要的只是在文件中写入一些内容.aux
以获取某些计数器的最终值,那么该totcount
包已经为您完成了。
和
\usepackage{totcount}
\regtotcounter{section}
在文档序言中,您可以\total{section}
在任何需要打印文档中最高章节编号的地方键入内容。
要引用最后一页的页码,请执行以下操作
\usepackage{lastpage}
\pageref{LastPage}
并在需要最后一页页码的地方使用。或者使用zref
具有高度可扩展机制的。