是否可以\MakeUppercase
在 KOMA-Script 中使用\sectionlineformat
以获得大写章节标题而不破坏hyperef
PDF 书签?以下示例显示了该问题。\addsec
书签中的标题指向第一页(即hyperref
/TeX 认为是“固定的一页”)。
\documentclass{scrartcl}
\usepackage{hyperref}
\makeatletter
\renewcommand\sectionlinesformat[4]{%
\ifstr{#1}{section}{%
\@hangfrom{\hskip#2\relax #3}{\MakeUppercase{#4}}%
% \@hangfrom{\hskip#2\relax #3}{\texorpdfstring{\MakeUppercase{#4}}{#4}}% doesn't work
}{%
\@hangfrom{\hskip#2\relax #3}{#4}%
}%
}
\renewcommand{\sectionformat}{\MakeUppercase}
\makeatother
\begin{document}
Test
\clearpage
\addsec{Addsec on page 2}
Text
\end{document}
这个\texorpdfstring
技巧不起作用。我已经发现,似乎在发生中断“注入”的论点中hypperref
“注入”了一些东西。#4
\sectionlinesformat
\MakeUppercase
是否可以\MakeUppercase
在这里使用,或者是否有另一种方法来获取大写部分标题?
答案1
你缺少了\phantomsection
:
\documentclass{scrartcl}
\usepackage{hyperref,bookmark}
\makeatletter
\renewcommand\sectionlinesformat[4]{%
\ifstr{#1}{section}{%
\@hangfrom{\hskip#2\relax #3}{\phantomsection\MakeUppercase{#4}}%
}{%
\@hangfrom{\hskip#2\relax #3}{#4}%
}%
}
\makeatother
\begin{document}
Test
\clearpage
\addsec{Addsec on page 2}
Text
\clearpage
\addsec{Addsec on page 3}
Text
\end{document}
通常建议加载bookmark
,但这对于解决方案而言并非必不可少。