我想使用 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}