scrbook 和 hyperref 附录的书签文本错误

scrbook 和 hyperref 附录的书签文本错误

我在用着Markus Kohm 的修复将前缀“附录”也包含在目录中。不幸的是,这会搞砸bookmarks由 生成的(或索引)hyperref,如 MWE 下方的屏幕截图所示:

\documentclass[appendixprefix]{scrbook}

\usepackage{hyperref}
\usepackage{etoolbox}

%% From http://www.komascript.de/node/1766
\newcommand*{\SavedOriginaladdchaptertocentry}{}
\appto\appendixmore{%
  \let\SavedOriginaladdchaptertocentry\addchaptertocentry
  \renewcommand*{\addchaptertocentry}[2]{%
    \ifstr{#1}{}{% Eintrag ohne Nummer
      \SavedOriginaladdchaptertocentry{#1}{#2}%
    }{% Eintrag mit Nummer
      \SavedOriginaladdchaptertocentry{}{%
        \string\expandafter\string\MakeUppercase\string\appendixname
        ~#1\autodot\string\enskip{}#2}%
    }%
  }%
}


\title{Some title}  
\author{Some author}

\begin{document}
\maketitle 

\frontmatter
\tableofcontents               

\mainmatter
\chapter{Some chapter}

\appendix
\chapter{appendix chapter}
\section{Section in appendix}

\end{document}

苏门答腊的截图(pdfTeX,TeXLive 2015): 在此处输入图片描述

来自 evince 的截图(XeTeX,TeXLive 2013): 在此处输入图片描述

知道这里发生什么事了吗?

答案1

这一\string\expandafter\...行对于 pdf 查看器来说毫无意义,因为它是部分不可扩展的 LaTeX 代码(\MakeUppercase是这里的罪魁祸首!),无法理解为书签条目。你需要\texorpdfstring{texcontent}{pdfcontent}这个。

我已将\texorpdfstring{...}{...}有问题的行括起来,并使用\appendixnamepdfcontent部分 --\appendixname可扩展并替换为Appendix(在英语语言设置中)

\documentclass[appendixprefix]{scrbook}

\usepackage{hyperref}
\usepackage{etoolbox}

%% From http://www.komascript.de/node/1766
\newcommand*{\SavedOriginaladdchaptertocentry}{}
\appto\appendixmore{%
  \let\SavedOriginaladdchaptertocentry\addchaptertocentry
  \renewcommand*{\addchaptertocentry}[2]{%
    \ifstr{#1}{}{% Eintrag ohne Nummer
      \SavedOriginaladdchaptertocentry{#1}{#2}%
    }{% Eintrag mit Nummer
      \SavedOriginaladdchaptertocentry{}{%
        \texorpdfstring{\string\expandafter\string\MakeUppercase\string\appendixname
        ~#1\autodot\string\enskip{}#2}{\appendixname}}%
    }%
  }%
}


\title{Some title}  
\author{Some author}

\begin{document}
\maketitle 

\frontmatter
\tableofcontents               

\mainmatter
\chapter{Some chapter}

\appendix
\chapter{appendix chapter}
\section{Section in appendix}

\end{document}

答案2

以下是另一个建议:

在此处输入图片描述

代码:

\documentclass[appendixprefix]{scrbook}

\usepackage[hypertexnames=false]{hyperref}
\usepackage{etoolbox}

\appto\appendix{%
  \renewcommand{\addchaptertocentry}[2]{
    \ifstr{#1}{}{%
      \addtocentrydefault{chapter}{}{#2}%
    }{%
      \addtocentrydefault{chapter}{}{\chapapp~#1: #2}%
    }%
  }
}

\title{Some title}  
\author{Some author}

\begin{document}
\maketitle 

\frontmatter
\tableofcontents

\mainmatter
\chapter{Some chapter}

\appendix
\chapter{First appendix chapter}
\section{Section in first appendix}
\chapter{Second appendix chapter}
\section{Section in second appendix}
%
\addchap{Chapter without number}

\end{document}

相关内容