我正在使用带有 hyperref 的 KOMA-script 并使用 设置了我的目录 tocbasic
。
我希望按照所示方式格式化目录这里,也就是说,要有页码和将条目编号制作成超链接,仅此而已。
这是所需的结果([]
表示超链接):
[I] Foo ......... [3]
[1] Bar ......... [5]
[1.1] Baz ....... [5]
然而,Ulrike Fischer 的回答article
对于类和来说,它运行得很好book
,但是一旦更改为scrartcl
或 ,它就会失败scrbook
。可能是因为在 KOMA 脚本中,与标准类中不同的命令负责条目编号。
我也尝试过复制这些 二
相关答案——即\contentsline
使用补丁,在条目号周围etoolbox
添加\hyper@linkstart{link}{<some #>}
和。\hyper@linkend
但我遇到了同样的问题:这些答案适用于标准类,但(似乎)不能翻译成 KOMA-Script/tocbasic。
有人可以帮忙吗?
以下是 MWE:
\documentclass{scrbook}
\usepackage[linktoc=page, % plus, if possible, the entry number
colorlinks]{hyperref}
\begin{document}
\tableofcontents
\part{Foo}
\chapter{Bar}
\section{Baz}
\end{document}
编辑
@esdd 提供了两种很好的解决方案。
值得指出的是用法上有差异。
第二种方法使用tocbasic
尚未记录的钩子。无论通过 选择哪种类型的分段级别,此解决方案都是开箱即用的\DeclareTOCStyleEntries[]{}
。
第一个创建一个可以输入到选项的命令entrynumberformat
。但是,有些样式无法识别此选项 fi dottedtocline
。因此
\DeclareTOCStyleEntries[indent=0.5em,
entrynumberformat=\linkedentrynumber]
{dottedtocline}{chapter}
将无法编译。
在这种情况下,切换到高度灵活的样式会有所帮助tocline
,可以轻松定制以模仿以下行为dottedtocline
:
\DeclareTOCStyleEntry[beforeskip=0pt,
indent=0.5em,
linefill=\TOCLineLeaderFill,
entrynumberformat=\linkedentrynumber]
{tocline}{chapter}
看起来相当相似并且运行起来非常好。
答案1
基于 Ulrikes回答你可以使用
\documentclass{scrbook}
\usepackage[linktoc=page,colorlinks]{hyperref}
\makeatletter
\newcommand*\linkedentrynumber[1]{%
\ifx\Hy@tocdestname\ltx@empty
#1
\else
\hyper@linkstart{link}{\Hy@tocdestname}#1\hyper@linkend
\fi
}
\makeatother
\DeclareTOCStyleEntries[
entrynumberformat=\linkedentrynumber
]{tocline}{part,chapter,section,subsection,subsubsection,paragraph,subparagraph,figure,table}
\begin{document}
\tableofcontents
\part{Foo}
\chapter{Bar}
\section{Baz}
\end{document}
或者你可以使用未记录的(即它们将来可能会改变)钩子\numberline@numberprefix
并\numberline@numberpostfix
提供tocbasic
:
\documentclass{scrbook}
\usepackage[linktoc=page,colorlinks]{hyperref}
\makeatletter
\g@addto@macro{\numberline@numberprefix}{%
\ifx\Hy@tocdestname\ltx@empty\else\hyper@linkstart{link}{\Hy@tocdestname}\fi
}
\g@addto@macro{\numberline@numberpostfix}{%
\ifx\Hy@tocdestname\ltx@empty\else\hyper@linkend\fi
}
\makeatother
\begin{document}
\tableofcontents
\part{Foo}
\chapter{Bar}
\section{Baz}
\end{document}