在 Aux 文件中导出页码

在 Aux 文件中导出页码

需要使用辅助文件导出单独的文件以获取首页和最后一页的页码以及总页数,请找到如下所示的 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(这是可能的),而是直接存储和写入值更容易。

在开始文档时,存储计数器的可打印阿拉伯语形式(此处为字符101page

在实际的文档输出中,page计数器可能被排版为ci(罗马字母)、101(阿拉伯字母)、१०१(天城文)等。

同样,在结束文档时,存储当时计数器的可打印的、阿拉伯的、形式(字符103) 。page

请注意,(lastpage)-(firstpage)+1 可能无法提供真实的页数,因为计数器page可以在文档内部随时重置。

zref包中的模块定义totpages了一个独立的页计数器,并提供了一个宏,\ztotpages用于存储绝对页数的可打印形式(此处为3)。

同样在文档末尾,输出.xml文件。

需要 2 次或更多次编译运行才能ztotpages从文件中提取一个固定值.aux,因为插入目录等将添加额外的页面。

.xml文件包含以下内容:

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}

相关内容