hyperref 不起作用。转到错误的页面

hyperref 不起作用。转到错误的页面

我不明白为什么hyperref当我在目录上单击它时它没有转到我想要的页面?

\documentclass[12pt, a4paper, oneside]{report}
\usepackage[T1]{fontenc}
\usepackage{mathptmx} %times font
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{enumerate}
\usepackage{hyperref}
\usepackage{setspace}
\usepackage[english]{babel} %roman & arabic label page
\usepackage[top=50mm , bottom=50mm, left=45mm, right=45mm]{geometry}

\addto\captionsenglish{% Replace "english" with the language you use
\renewcommand{\contentsname}%
{Table of Contents}% change "Contents" (default) to "Table of Contents"
}

\hypersetup{
colorlinks=true, %set true if you want colored links
linktoc=all,     %set to all if you want both sections and subsections linked
linkcolor=black,  %choose some color if you want links to stand out
}

\pagenumbering{Roman}

\begin{document}
\input{CoverPage}
\thispagestyle{empty}
\pagebreak

\input{TitlePage}
\thispagestyle{empty}
\pagebreak

\input{CopyrightPage}
\addcontentsline{toc}{chapter}{Copyright}
\setcounter{page}{1}
\pagebreak

\input{DeclarationPage}
\addcontentsline{toc}{chapter}{Declaration}
\pagebreak

\input{AcknowledgementPage}
\addcontentsline{toc}{chapter}{Acknowledgement}
\pagebreak

\tableofcontents
\addcontentsline{toc}{chapter}{Table of Contents}

\pagebreak

\addcontentsline{toc}{chapter}{List of Figures}
\listoffigures
\pagebreak

% % (1) =========================================
\pagenumbering{arabic}
\addcontentsline{toc}{chapter}{1. Introduction}
\input{Introduction}
\setcounter{chapter}{1}
\pagebreak

答案1

OP 代码存在多个问题...

  • \cleardoublepage\phantomsection\addcontentsline{...}如果某些内容必须明确添加到 ToC 中,请使用
  • 为了目录图片列表 \usepackage{tocbibind}是更清洁的解决方案
  • 应该Introduction是真正的章节,而不是带有\section和 的东西subsection。这会搞乱书签等和编号。
  • \input对于我来说这太过分了——这使得编辑(和调试)变得非常困难。

\phantomsection一些关于等等的注释。

如果要将内容添加到.toc等文件,\addcontentsline{toc}{...}{...}大多数情况下都是正确的选择。但是,如果没有\cleardoublepage(或\clearpage) 与 结合使用\phantomsection,则链接将转到上一页。

\phantomsection但是,如果使用诸如 etc. 之类的命令,则可以省略。然后会插入\chapter*与 相关的锚点。有关更多信息,请参阅部分chapter*hyperref

3.2 目的地名称选项

请参阅hyperref手册。


\documentclass[12pt, a4paper, oneside]{report}
\usepackage[T1]{fontenc}
\usepackage{mathptmx} %times font
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{enumerate}
\usepackage{setspace}
\usepackage[english]{babel} %roman & arabic label page
\usepackage[top=50mm , bottom=50mm, left=45mm, right=45mm]{geometry}

\addto\captionsenglish{% Replace "english" with the language you use
\renewcommand{\contentsname}%
{Table of Contents}% change "Contents" (default) to "Table of Contents"
}

\title{Foo}
\author{Foo}

\usepackage{blindtext}
\usepackage{tocbibind}

\usepackage{hyperref}

\hypersetup{
colorlinks=true, %set true if you want colored links
linktoc=all,     %set to all if you want both sections and subsections linked
linkcolor=black,  %choose some color if you want links to stand out
}

\pagenumbering{Roman}

\begin{document}
\input{CoverPage}
\thispagestyle{empty}
\cleardoublepage
\input{TitlePage}
\thispagestyle{empty}
\cleardoublepage

\phantomsection
\addcontentsline{toc}{chapter}{Copyright}
\input{CopyrightPage}
\setcounter{page}{1}
\cleardoublepage

\phantomsection
\addcontentsline{toc}{chapter}{Declaration}
\input{DeclarationPage}
\cleardoublepage

\phantomsection
\addcontentsline{toc}{chapter}{Acknowledgement}
\input{AcknowledgementPage}
\cleardoublepage

\tableofcontents
\addcontentsline{toc}{chapter}{Table of Contents}
\cleardoublepage

\listoffigures
\addcontentsline{toc}{chapter}{List of Figures}
\cleardoublepage

% % (1) =========================================
\pagenumbering{arabic}
\phantomsection
\addcontentsline{toc}{chapter}{1. Introduction}
\input{Introduction}
\setcounter{chapter}{1}  % Why???



\end{document}

对于单个FooPage.tex文件我基本上使用了这段代码

\chapter*{Foo}  % To make the page header outstanding, just for this solution
\blindtext[2]

Foo用相关名称替换(例外:TitlePage.tex仅限\maketitle

如果使用 etc,则单独的\phantomsection命令不是必需的\chapter*,但我保留了它们,因为不清楚真实\input{...}文件里面有什么。

在此处输入图片描述

答案2

我遇到了同样的问题,但只是在罗马部分出现了特别的错误行为。解决方案是将命令 \addcontentsline... 放在罗马部分标题之后,阿拉伯部分标题之前。

答案3

我只在几个部分遇到了这个问题,发现这是由于浮点说明符H!覆盖内部参数。例如

\begin{figure}[h!]
% My graphics
\end{figure}

删除“!”实际上解决了我的问题。

相关内容