如何将 \sectionlinesformat 中的 \MakeUppercase 与 hyperref 一起使用?

如何将 \sectionlinesformat 中的 \MakeUppercase 与 hyperref 一起使用?

是否可以\MakeUppercase在 KOMA-Script 中使用\sectionlineformat以获得大写章节标题而不破坏hyperefPDF 书签?以下示例显示了该问题。\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,但这对于解决方案而言并非必不可少。

相关内容