添加后瓦里雷夫包(从 TeX 输入生成类似“第 YY 页上的图 XX”之类的文本\vref{fig:example}
),我开始看到类似这样的警告
LaTeX Warning: Label `1@xvr' multiply defined.
LaTeX Warning: Label `1@vr' multiply defined.
我的文档的章节存储在单独的文件中:chapter1.tex
、chapter2.tex
等,这些章节从主文档中引用,使用
\include{Chapter1/chapter1}
\include{Chapter2/chapter2}
...
我把问题追溯到通过将计数器与和与连接起来来varioref
生成自己的xvr
和标签。似乎这个计数器会为每个文件重置。例如,在我的文档中,包含vr
@xvr
@vr
chapter5.aux
\newlabel{1@xvr}{{}{181}{Review of ...}{subsection.5.3.2}{}}
\newlabel{1@vr}{{}{181}{Review of ...}{subsection.5.3.2}{}}
并chapter6.aux
包含
\newlabel{1@xvr}{{}{198}{Introduction to ...}{section.6.1}{}}
\newlabel{1@vr}{{}{198}{Introduction to ...}{section.6.1}{}}
显然,生成的标签varioref
在各个章节之间是重复的,尽管它们在章节内是唯一的。我希望修复这个问题,因为我不确定在引用不同章节中的标签时(例如,\vref{sec:Introduction to ...}
来自chapter5.tex
上例中的标签),页码引用在所有情况下都是正确的。
提前感谢您提供的任何帮助!
更新:似乎varioref
对于CUED 论文模板。因人而异!
答案1
varioref
使用命令的保存版本\label
在文件中生成这样的标签.aux
:
\def\vref@label#1{\@bsphack
\protected@write\@auxout{}%
{\string\newlabel{#1}{{}{\thepage}}}%
\@esphack}
\label
这与in的定义大致相同,latex.ltx
只是它不传递\@currentlabel
给\newlabel
。
保存此版本的真正原因是以一种不适合 varioref 目的的方式babel
重新amsmath
定义。\label
但是,这些模板中所做的修改似乎会导致 LaTeX 计数器vrcnt
按包含内容重置(或者可能一般按章节重置?),因此您会得到双重标签。
在 varioref 中,它的定义很简单
\newcounter{vrcnt}
所以永远不应该重置。也许 mod 会改变\newcounter
?
我的建议是
尝试尽早加载varioref,甚至在
\RequirePackage
课程开始前加载,或者如果不起作用每个章节文件明确设置,例如,
\setcounter{vrcnt}{1000}
每章增加 1000 - 这是一个手动的解决方法,但我想它会起作用。
或者您可以尝试更改
\vref@label
为包含\thechapter
在标签名称中,或者使标签再次唯一所需的任何内容,例如\makeatletter \def\vref@label#1{\@bsphack \protected@write\@auxout{}% {\string\newlabel{\thechapter:#1}{{}{\thepage}}}% \@esphack} \makeatother
在序言中。
最终,完成类文件的人员需要查看那里,因为计数器无缘无故地重置有点奇怪。