使用 \xpretocmd 命令时目录中的链接错误

使用 \xpretocmd 命令时目录中的链接错误

我注意到,当我使用命令重置报告文档中某一部分内的节计数器时,目录中会出现错误链接(我还没有尝试过其他文档)。链接转到文档的第一个“部分”,而忽略其余部分。显然,\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}

相关内容