\chapter{\label{sec: }} 在武汉大学模板的目录中进行双重引用

\chapter{\label{sec: }} 在武汉大学模板的目录中进行双重引用

我使用的是武汉大学的模板。我发现如果我这样做\chapter{\label{sec: }},目录将显示双重引用。例如,在chapter 1.texI 输入

\chapter{1}\label{sec:1}
\section{woemn}\label{sec:women}

并在appendix.texI 输入中\chapter{对应\ref{sec:women}\nameref{sec:women}}。在目录中,有 在此处输入图片描述

红色部分包含重复的引用,黄色部分是多余的。我知道这里需要制作 MWE,但我做不到。所以我将文件更新到 Figshare,所有文件都无法删除,以便其他人将来可以检查这些文件。下载后,解压文件并运行whu-thesis-demo.texxelatex->biber->xelatex->xelatex您将看到此错误。文件在这里:文件

答案1

经过长时间的实验,我发现了这个问题。

您的问题似乎是由于以下情况发生时出现的错误造成的:

  1. 使用自定义类。其中,
  2. hyperref加载AtEndPreamble
  3. \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 中删除该行,则文件将无法编译。然而,事实上它当你加入这行代码时编译会产生非常奇怪的错误。

使固定

要解决此问题,您可以放入或\tableofcontentsAtBeginDocument载入。hyperrefAtEndPreamble

对于 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标题。

也许有人应该提交某种错误报告。

相关内容