zlabel 未记录在辅助文件中

zlabel 未记录在辅助文件中

我想使用 zref 来记录页码,但是使用这种代码结构,标签不会记录在 aux 文件中。

我不知道我错过了什么。

梅威瑟:

\documentclass{article}

\usepackage{multicol}
\usepackage{zref-user}

\AtEndDocument{\zlabel{label1}}

\begin{document}

\begin{multicols*}{2}
Some text.
\end{multicols*}

\zlabel{label2}

\end{document}

Aux 文件内容:

$ cat issue.aux
\relax 
\providecommand\zref@newlabel[2]{}

2 个标签未记录。预期的辅助内容应如下:

\relax 
\providecommand\zref@newlabel[2]{}
\zref@newlabel{label2}{\default{}\page{2}}
\zref@newlabel{label1}{\default{}\page{2}}

答案1

该问题也可以通过标准命令重现\label

\documentclass{article}

\usepackage{multicol}

\begin{document}

\begin{multicols*}{2}
Some text.
\end{multicols*}

\label{label}

\end{document}

编译将留下一个.aux仅包含 的文件。如果后面跟着一些文本或者命令在环境内,\relax则标签书写正确。\end{multicols*}multicols*

如果您的目的是为最后一页设置标签,请使用zref-lastpage该标签自动完成。

答案2

感谢@egreg 和@UlrikeFischer 指出文档末尾的标签问题。

当标签未记录在辅助文件中时,标签应位于文档的末尾,并且该标签的页码必须是​​最后一页。

以下是我的解决方案:

\documentclass{article}

\usepackage{multicol}
\usepackage{zref-lastpage}% for LastPage

\makeatletter
\newcommand{\labelthispage}[1]{\zref@label{#1}}
\newcommand{\getl@beledpage}[1]{\zref@extractdefault{#1}{page}{-1}}
\newcommand{\getl@stpage}{\zref@extractdefault{LastPage}{page}{0}}
\newcommand{\getlabeledpage}[1]{\ifnum\getl@beledpage{#1}=-1 \getl@stpage \else \getl@beledpage{#1} \fi}
\makeatother

\begin{document}

\begin{multicols*}{2}
Some text.
\labelthispage{LABEL1}
\end{multicols*}

\edef\tmp{################ LABELED PAGE 1: \getlabeledpage{LABEL1}}
\typeout\tmp

\begin{multicols*}{2}
Other text.
\end{multicols*}

\labelthispage{LABEL2}
\edef\tmp{################ LABELED PAGE 2: \getlabeledpage{LABEL2}}
\typeout\tmp

\end{document}

第二次编译日志的片段:

(./issue_try_2.aux) [1]
################ LABELED PAGE 1: 1 
[2]
################ LABELED PAGE 2: 2
(./issue_try_2.aux) )

辅助文件:

\relax 
\providecommand\zref@newlabel[2]{}
\zref@newlabel{LABEL1}{\default{}\page{1}\abspage{1}}
\zref@newlabel{LastPage}{\default{}\page{2}\abspage{2}}

LABEL2不记录在辅助文件中,并且LastPage值由\getlabeledpage{LABEL2}

相关内容