考虑下面的代码。该文档排版风格的一个关键元素是标题\section
采用全小写字母排版(= 中间没有大写字母)。因此,为了正确排版,TeX 需要将相应的文本全部小写。作为优秀的 TeX 用户,我们坚持严格区分形式和内容。我们不想让书籍作者为此烦恼。
相反,我们使用一段将参数 a 转换\section{...}
为小写的代码来自动完成此任务。请参阅示例中的第三段代码(说实话,我不记得我从哪里得到它或我是如何想出它的)。
一切都很好,除非我们也决定不这样做数字使用通常的secnumdepth
方法。
然后发生的事情是,事情hyperref
偏离了轨道。
pdfTeX warning (dest): name{section*.3} has been referenced but does not exist,
replaced by a fixed one
并且,在 PDF 中,各部分的书签和目录链接停止工作。
所以问题似乎出在这三者之间的相互作用上:小写模式、设置secnumdepth
和超链接。
解决此问题的合适方法是什么?我假设有人可能想先解决小写 mod,但该怎么做呢?
\documentclass[paper=a5,DIV=9]{scrreprt}
\usepackage{blindtext}
\usepackage[bookmarksopen=true]{hyperref}
% headings
\setkomafont{chapter}{\normalfont\large\itshape}
\setkomafont{section}{\normalfont\scshape}
\setkomafont{subsection}{\normalfont}
% lowercase conversion
\makeatletter
\renewcommand{\sectionlinesformat}[4]{%
\@hangfrom{\hskip #2#3}{\MakeLowercase{#4}}}%
\renewcommand{\sectioncatchphraseformat}[4]{%
\hskip #2#3\MakeLowercase{#4}}%
\makeatother
% no section numbers
\setcounter{secnumdepth}{0}
\setcounter{tocdepth}{1}
\begin{document}
\tableofcontents
\chapter{Test I}
\Blindtext
\section{Test 1}
\Blindtext
\chapter{Test II}
\Blindtext
\section{Test 2}
\Blindtext
\chapter{Test III}
\Blindtext
\section{Test 3}
\Blindtext
\end{document}
答案1
在恢复正确的超锚点 \phantomsection
之前添加,但显然它们没有被保留。\@hangfrom
\documentclass[paper=a5,DIV=9]{scrreprt}
\usepackage{blindtext}
\usepackage[bookmarksopen=true]{hyperref}
% headings
\setkomafont{chapter}{\normalfont\large\itshape}
\setkomafont{section}{\normalfont\scshape}
\setkomafont{subsection}{\normalfont}
% lowercase conversion
\makeatletter
\renewcommand{\sectionlinesformat}[4]{%
\phantomsection%
\@hangfrom{\hskip #2#3}{\MakeLowercase{#4}}}%
\renewcommand{\sectioncatchphraseformat}[4]{%
\hskip #2#3\MakeLowercase{#4}}%
\makeatother
% no section numbers
\setcounter{secnumdepth}{0}
\setcounter{tocdepth}{1}
\begin{document}
\tableofcontents
\chapter{Test I}
\Blindtext
\section{Test 1}
\Blindtext
\chapter{Test II}
\Blindtext
\section{Test 2}
\Blindtext
\chapter{Test III}
\Blindtext
\section{Test 3}
\Blindtext
\end{document}