我正在使用报告文档类。目录之前有摘要和致谢部分。
这是我对致谢的定义。我从网上某个地方获取了它,因此可能有错误。
\makeatletter
\newcommand\ackname{Acknowledgements}
\if@titlepage
\newenvironment{acknowledgements}{%
\titlepage
\null\vfil
\@beginparpenalty\@lowpenalty
\begin{center}%
\bfseries \ackname
\@endparpenalty\@M
\end{center}}%
{\par\vfil\null\endtitlepage}
\else
\newenvironment{acknowledgements}{%
\if@twocolumn
\section*{\abstractname}%
\else
\small
\begin{center}%
{\bfseries \ackname\vspace{-.5em}\vspace{\z@}}%
\end{center}%
\quotation
\fi}
{\if@twocolumn\else\endquotation\fi}
\fi
\makeatother
每次我编译文件时都会得到以下信息:
(../abstract/abstract.tex)pdfTeX warning (ext4): destination with the same identifier (name{page.a}) has been already used, duplicate ignored
[1]) (../ack/root.texpdfTeX warning (ext4): destination with the same identifier (name{page.a}) has been already used, duplicate ignored
我的猜测是,它试图将这两页排版为与标题页相同的页面。
答案1
hyperref 创建页面锚点。由于您有 2 个具有相同编号的页面,即使可能不会打印,您也会获得两个具有相同名称的锚点。如果不需要页面锚点,pageanchor=false
请删除锚点和警告。
但如果它们是必需的,例如索引,则需要另一个修复。可以将其关闭并打开:
\hypersetup{pageanchor=false}
\begin{document}
\maketitle
\begin{abstract}
...
\end{abstract}
\hypersetup{pageanchor=true}
...
或者检查致谢的定义:您使用 titlepage 环境的原因是什么?这会将页码(再次)设置为 1。您可以用另一种方式执行此操作,例如,\thispagestyle{empty}
如果您的原因是想要一个没有可见页码的页面,则使用 。
此外,还有超链接选项可以避免此类问题:如果页码重复,则pdfpagelabels
和plainpages=false
很有用,但如果重复,它们就无济于事\thepage
。看看Hyperref 和重复页码在 TeX FAQ 中。
答案2
对分支进行小幅修正\else
应该可以解决问题。
\section*{\ackname}%
在您的版本中您仍然有\abstractname
此行。