我修改了目录中子部分的格式,使它们出现在一行中,而不是单独的行中。为此,我使用了 titletoc 包。以下是 MWE:
\documentclass{scrbook}
\usepackage{titletoc}
\titlecontents*{subsection}%
[3.8em]%
{\small\itshape}%
{\hyperlink{subsection.\thecontentslabel}{\thecontentslabel}\ }%
{}%
{\ \thecontentspage}%
[,\ ]%
[.]%
\usepackage[colorlinks=true,linktoc=all]{hyperref}
\begin{document}
\tableofcontents
\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsection{Another Subsection}
\clearpage
\section{Another Section}
\end{document}
这非常简单,但是存在两个问题:
- 链接中不包含子部分标签。此问题已在 MWE 中通过以下问题的答案进行了修复:全局目录、LOF、LOT 和 titletoc 部分目录的通用样式(带有 hyperref 和标题)
- 修改后的子节后面的节的链接指向错误的位置。在 MWE 中,“1.2 另一节”的链接指向“1.1.1 子节”。
我没有找到第二个问题的解决方案。我尝试过\phantomsection
但没有任何成功。我读过这里titletoc 与 hyperref 存在一些不兼容性,并尝试使用 tocloft 包实现相同的行为。我设法得到了类似的结果,但不太正确。如果链接正常工作,tocloft 方法似乎更方便。
附注:我想要应用此功能的文档相当大,并且使用经典论文风格。
我将非常感激针对此问题的任何提示或解决方案。
答案1
这似乎是一种变通方法(或破解方法;-)),但titletoc
由于某些我至今尚未弄清楚的原因,它搞乱了各个部分的超链接。
我重新定义了\section
命令,以便在部分开始后立即手动设置超链接和虚拟超目标。它适用于\section{}
和\section[]{}
命令,但不适用于\section*{}
,但这不会向写入任何条目TOC
,因此这是您可以忍受的(???)。
我还使用了\usepackage{classicthesis}
,它似乎在之前titletoc
,否则不使用 toc 样式。
\documentclass{scrbook}
\usepackage[colorlinks=true,linktoc=all]{hyperref} % Normally last!!!
\usepackage{classicthesis}
\usepackage{titletoc}
\titlecontents*{subsection}%
[3.8em]%
{\small\itshape}%
{\phantomsection\hyperlink{subsection::\arabic{chapter}.\arabic{section}.\arabic{subsection}}{\thecontentslabel}\ }%
{}%
{\ \thecontentspage}%
[,\ ]%
[.]%
\let\LaTeXStandardSection\section%
\makeatletter
\newcommand{\section@noopt}[1]{%
\LaTeXStandardSection[\protect\hyperlink{section::\thesection}{#1}]{#1}%
\phantomsection%
\hypertarget{section::\thesection}{}% Empty target
}%
\newcommand{\section@opt}[2][]{%
\LaTeXStandardSection[\protect\hyperlink{section::\thesection}{#1}]{#2}%
\phantomsection%
\hypertarget{section::\thesection}{}% Empty target
}%
\renewcommand{\section}{%
\@ifnextchar[{\section@opt}{\section@noopt}%
}%
\makeatother
\begin{document}
\tableofcontents
\chapter{First}
\chapter{Chapter}
\section{Section}
\newpage
\subsection{Subsection}
\subsection{Another Subsection}
\clearpage
\section{Another Section}%
\clearpage
\section[Yet Another Section]{Yet another section with a different short title}
\subsection{Yet another subsection}
\subsection{Yet another another subsection}%
\chapter{Next chapter}
\section[Yet Another Section]{Yet another section with a different short title}
\subsection{Yet another subsection}
\subsection{Yet another another subsection}%
\end{document}
答案2
问题似乎是 titletoc v1.6 与当前版本的 hyperref v6.83m 发生冲突。降级到 hyperref v6.82q 可以解决问题。但是,使用旧版本的 hyperref 可能会产生其他问题。
答案3
此问题已在 titletoc 2.11 版中修复;请参阅更新日志 https://github.com/jbezos/titlesec
当我切换到此版本的titletoc时,它为我解决了这个问题。