KOMA-script/hyperref:将页码和章节号(仅此而已)转换为超链接

KOMA-script/hyperref:将页码和章节号(仅此而已)转换为超链接

我正在使用带有 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}

相关内容