需要使用辅助文件导出单独的文件以获取首页和最后一页的页码以及总页数,请找到如下所示的 MWE 文件:
\documentclass{article}
\usepackage{lipsum}
\usepackage[totpages,user]{zref}
\usepackage{lastpage}
\AtEndDocument{LastPage}
\AtBeginDocument{FirstPage}
\newcommand{\totpages}{\ifnum\ztotpages=1 1 page \else \ztotpages\ pages \fi}
\makeatletter
\newwrite\file
\immediate\openout\file=filename_pgcount.xml\relax
\immediate\write\file{
<ArticleMetaData><PageCount Type="PageExtent"><fpage>\pageref{FirstPage}</fpage><lpage>\pageref{LastPage}</lpage><tpage>\totpages</tpage></PageCount>
</ArticleMetaData>
}
\closeout\file
\makeatother
\setcounter{page}{101}
\begin{document}
\totpages
\vskip50pt
\lipsum[1-12]
\end{document}
答案1
如果我理解正确的话,这是一个 XY 问题。
不需要解析文件和宏中的排版指令.aux
(这是可能的),而是直接存储和写入值更容易。
在开始文档时,存储计数器的可打印阿拉伯语形式(此处为字符101
)page
。
在实际的文档输出中,page
计数器可能被排版为ci
(罗马字母)、101
(阿拉伯字母)、१०१
(天城文)等。
同样,在结束文档时,存储当时计数器的可打印的、阿拉伯的、形式(字符103
) 。page
请注意,(lastpage)-(firstpage)+1 可能无法提供真实的页数,因为计数器page
可以在文档内部随时重置。
zref
包中的模块定义totpages
了一个独立的页计数器,并提供了一个宏,\ztotpages
用于存储绝对页数的可打印形式(此处为3
)。
同样在文档末尾,输出.xml
文件。
需要 2 次或更多次编译运行才能ztotpages
从文件中提取一个固定值.aux
,因为插入目录等将添加额外的页面。
该.xml
文件包含以下内容:
平均能量损失
\documentclass{article}
\usepackage{lipsum}
\usepackage{zref-totpages}
\newcounter{xmyFP}
\newcounter{xmyLP}
\newcommand\valxmyFP{\setcounter{xmyFP}{\thepage}}
\newcommand\valxmyLP{\setcounter{xmyLP}{\thepage}}
\newcommand\outputmetainfo{%
\newwrite\file
\immediate\openout\file=filename_pgcount.xml\relax
\immediate\write\file{
<ArticleMetaData>
<PageCount Type="PageExtent">
<fpage>\arabic{xmyFP}</fpage>
<lpage>\arabic{xmyLP}</lpage>
<tpage>\ztotpages</tpage>
</PageCount>
</ArticleMetaData>
}
\closeout\file
}
\setcounter{page}{101}
\AtBeginDocument{\valxmyFP}
\AtEndDocument{\valxmyLP\outputmetainfo}
\begin{document}
\lipsum[1-12]
\end{document}