![使用 \xpretocmd 命令时目录中的链接错误](https://linux22.com/image/466262/%E4%BD%BF%E7%94%A8%20%5Cxpretocmd%20%E5%91%BD%E4%BB%A4%E6%97%B6%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E9%93%BE%E6%8E%A5%E9%94%99%E8%AF%AF.png)
我注意到,当我使用命令重置报告文档中某一部分内的节计数器时,目录中会出现错误链接(我还没有尝试过其他文档)。链接转到文档的第一个“部分”,而忽略其余部分。显然,\xpretocmd
正在干扰一些内部计数器。我读了很多关于的内容\phantomsection
,但它适用于未编号的节。
我希望“部分”内的“节”能够编号而不引用部分(太长),并且在输入新“部分”时从头开始。 有想法如何实现该行为吗? 这是一个具有上述奇怪行为的最小示例。
\documentclass[a4paper, 11pt]{report}
%% define usepackage
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern} % "Computer Modern" modern font
\usepackage{graphicx} % Include images
\usepackage[english]{babel} % Handling english.
\usepackage{hyperref}
\usepackage{xpatch}
%% --- end define usepackage ---
%% Changing The naming of the parts, section, subsections and subsubsections
\renewcommand{\thepart}{\Roman{part}} % \part as roman numerals
\renewcommand{\thesection}{\arabic{section}} % Removing part name from section and subsection
\xpretocmd{\part}{\setcounter{section}{0}}{}{} %Setting section counter to zero when entering a part
%% Infos
\title{A good title}
\author{Some Guy}
\begin{document}
\maketitle
\tableofcontents
\newpage
\part{The first part}
\section{The first section}
\subsection{A subsection}
Foo
\subsection{Another one}
Bar
\part{The second part}
\section{A first section}
\subsection{My mind is blown}
FooBar
\subsection{So is mine !}
BarFoo
\end{document}
答案1
你不需要xpatch
这个,但是
\counterwithin*{section}{part}
这也将修复链接问题,因为它会\theHsection
为您进行修改(请参阅手册hyperref
)。感谢 Ulrike 指出这一点。
您可能使用 来实现这一点\xpretocmd
,但是这样做有点过度,而且还需要\renewcommand{\theHsection}{\thepart.\arabic{section}}
才能获得独特的锚点。
我还建议加载bookmark
并修改标题页的页码,否则会出现重复的页面链接。
\documentclass[a4paper, 11pt]{report}
%% define usepackage
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
%\usepackage[utf8]{inputenc}% no longer needed
\usepackage[T1]{fontenc}
\usepackage{lmodern} % "Computer Modern" modern font
\usepackage{graphicx} % Include images
%\usepackage[english]{babel} % Handling english. (not needed)
\usepackage{hyperref}
\usepackage[numbered]{bookmark}
%% --- end define usepackage ---
%% Changing The naming of the parts, section, subsections and subsubsections
%\renewcommand{\thepart}{\Roman{part}} % \part as roman numerals (is default)
\renewcommand{\thesection}{\arabic{section}} % Removing chapter number from section and subsection
\counterwithin*{section}{part}
%% Infos
\title{A good title}
\author{Some Guy}
\begin{document}
\pagenumbering{alph}
\maketitle
\cleardoublepage
\pagenumbering{arabic}
\tableofcontents
\part{The first part}
\section{The first section}
\subsection{A subsection}
Foo
\subsection{Another one}
Bar
\part{The second part}
\section{A first section}
\subsection{My mind is blown}
FooBar
\subsection{So is mine!}
BarFoo
\end{document}
请注意,默认情况下各部分使用罗马数字。请\thesection
改用\thechapter
您想要删除的数字。
如果希望目录为第 2 页,请删除\pagenumbering{alph}
和\pagenumbering{arabic}
,将后者替换为\setcounter{page}{2}
。