我正在为我的上一份实习做报告,并试图将其添加hyperref
到我的 LaTeX pdf 中。我希望在我的目录中有一个用于介绍的链接。
如果没有hyperref
,它也能正常工作:
\chapter*{Introduction}
\addtocontents{toc}{\contentsline{chapter}{\numberline{}Introduction}{}}
但是,当我使用时hyperref
,我有这个:
! Argument of \contentsline has an extra }.
<inserted text>
\par
l.3 ...line{chapter}{\numberline{}Introduction}{}}
I've run across a `}' that doesn't seem to match anything.
For example, `\def\a#1{...}' and `\a}' would produce
this error. If you simply proceed now, the `\par' that
I've just inserted will cause me to report a runaway
argument that might be the root of the problem. But if
your `}' was spurious, just type `2' and it will go away.
Runaway argument?
! Paragraph ended before \contentsline was complete.
<to be read again>
\par
l.3 ...line{chapter}{\numberline{}Introduction}{}}
I suspect you've forgotten a `}', causing me to apply this
control sequence to too much text. How can we recover?
My plan is to forget the whole thing and hope for the best.
)
这里出了什么问题?
谢谢
答案1
hyperref
重新定义\contentsline
为采用四个参数,而不是通常的三个。此外,由于您正在处理与 ToC 相关的内容(写入文件),因此您需要小心扩展。按以下方式使用它:
\documentclass{report}
\usepackage{hyperref}
\begin{document}
\tableofcontents
\chapter*{Introduction}
\addtocontents{toc}{\protect\contentsline{chapter}{\protect\numberline{}Introduction}{}{}}
\end{document}
第四个参数提供hyperref
链接(或锚点)。由于它是空的,因此 ToC 条目不会被超链接。
添加超链接取决于链接的类型。对于您的情况,您可以使用以下内容:
\documentclass{report}
\usepackage{hyperref}
\begin{document}
\tableofcontents
\clearpage\phantomsection
\chapter*{Introduction}
\addtocontents{toc}{\protect\contentsline{chapter}{\protect\numberline{}Introduction}{}{chapter*.\thepage}}
\end{document}
每一个都\chapter*
可以使用 来访问chapter*.<current page>
,它被传递给 的最后一个选项\contentsline
。由于\phantomsection
/mark 是在当前页面上制作的,chapter*.\thepage
因此会导致当前 的适当扩展\chapter*
。
答案2
我找到了使用该包的另一种解决方案tocloft
:
\chapter*{Introduction}
\phantomsection
\addtocontents{toc}{\cftpagenumbersoff{chapter}}
\addcontentsline{toc}{chapter}{Introduction}
\addtocontents{toc}{\cftpagenumberson{chapter}}