我使用的是武汉大学的模板。我发现如果我这样做\chapter{\label{sec: }}
,目录将显示双重引用。例如,在chapter 1.tex
I 输入
\chapter{1}\label{sec:1}
\section{woemn}\label{sec:women}
并在appendix.tex
I 输入中\chapter{对应\ref{sec:women}\nameref{sec:women}}
。在目录中,有
红色部分包含重复的引用,黄色部分是多余的。我知道这里需要制作 MWE,但我做不到。所以我将文件更新到 Figshare,所有文件都无法删除,以便其他人将来可以检查这些文件。下载后,解压文件并运行whu-thesis-demo.tex
,xelatex->biber->xelatex->xelatex
您将看到此错误。文件在这里:文件
答案1
经过长时间的实验,我发现了这个问题。
您的问题似乎是由于以下情况发生时出现的错误造成的:
- 使用自定义类。其中,
hyperref
加载AtEndPreamble
于\tableofcontents
已加载AtBeginDocument
。
这是重现该问题的 MWE。
\begin{filecontents}{exampleclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{custom}
\LoadClass{article}
\RequirePackage{etoolbox}
\AtEndPreamble{% APPARENTLY THIS CAUSES THE TROUBLE
\RequirePackage{hyperref}
\hypersetup{hidelinks}
}
\AtBeginDocument{
\tableofcontents
}
\end{filecontents}
\documentclass{exampleclass}
\begin{document}
\section{First Section}\label{firstsec}
\section{Second Sectsion: On \ref{firstsec}}
\end{document}
这个漏洞让人摸不着头脑。它可能与时间安排等有关,但它是如何工作的我却无法理解。我发现有人发布了类似的问题这里和这里顺便说一句,如果你\hypersetup{hidelinks}
从 MWE 中删除该行,则文件将无法编译。然而,事实上它做当你加入这行代码时编译会产生非常奇怪的错误。
使固定
要解决此问题,您可以不放入或\tableofcontents
AtBeginDocument
不载入。hyperref
AtEndPreamble
对于 OP 来说,这很简单:转到whu-thesis.class
:更改\AtBeginDocument
为。line 1024
\AfterEndPreamble
解决这个问题的另一种方法是移动\RequirePackage{hyperref}\hypersetup{hidelinks}
在......之外 \AtEndPreamble
。相关代码位于 附近line 724
。本质上,使代码看起来像这样:
...
...
\RequirePackage { hyperref }
\hypersetup { hidelinks }
\urlstyle { rm }
\AtEndPreamble
{
\hypersetup
{
pdftitle = \g__whu_info_title_tl,
pdfauthor = \g__whu_info_author_tl
}
\tl_set_eq:NN \figureautorefname \figurename
\tl_set_eq:NN \tableautorefname \tablename
}
...
...
不能责怪 OP 没有提供 MWE。文件实在是太大了。另一方面,也许 OP 可以简单地停止使用\ref
标题。
也许有人应该提交某种错误报告。