hyperref + 重新定义标题:“目标不存在...”

hyperref + 重新定义标题:“目标不存在...”

考虑下面的代码。该文档排版风格的一个关键元素是标题\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} 

相关内容