PDF 书签中的双引号错误

PDF 书签中的双引号错误

我刚刚注意到一些奇怪的事情。请看以下示例

\documentclass{article}

\usepackage{hyperref}
\hypersetup{hidelinks}

\begin{document}

\tableofcontents

\addcontentsline{toc}{section}{``xxx''}
\addcontentsline{toc}{section}{Here---and \emph{there}}
\addcontentsline{toc}{section}{1--2 vs. 1-{}-2}
\addcontentsline{toc}{section}{\LaTeX}

\end{document}

得到以下 PDF

输出

当然,打印的内容是完美的。PDF 书签(左侧)实际上也几乎是正确的:各种 LaTeX 细节都转换为有意义的内容(格式命令被删除,\LaTeX变为 LaTeX,双连字符和三连字符正确地变为 en- 和 em-破折号等)。当我开发这个示例时,我一开始很惊讶,因为我刚刚注意到开和关双引号被逐字保留为单(反)引号对,因此我认为所有这些示例都是错误的。但不,只有双引号是 LaTeX 输入未转换为印刷正确的 PDF 书签的一个例子——或者,至少,是我想测试的唯一一个……

有什么办法吗?我曾想过克隆 hyperref.sty 的定义,\addcontentsline并在使用时使用\StrSubstitutefromxstring将单引号对替换为双引号,但这看起来是一个相当笨拙和脆弱的解决方案。有更好的主意吗?\Hy@writebookmark

答案1

基于关于此 hyperref 问题的讨论Ulrike Fischer 在评论中提到她的代码在另一篇文章中,以下是我认为最有效的方法:

\documentclass[german,french,english]{article}

\usepackage[autostyle=true]{csquotes}
\usepackage{babel}
\usepackage{hyperref}
\hypersetup{hidelinks}

% you need the following only if you want the quotes in bookmarks to
% reflect the specific style used in the document, otherwise they are
% simple plain quotes
\makeatletter
\DeclarePlainStyle{\csq@thequote@oopen}{\csq@thequote@oclose}{\csq@thequote@iopen}{\csq@thequote@iclose}
\pdfstringdefDisableCommands{\csq@resetstyle}
\makeatletter

\begin{document}

\tableofcontents

\addcontentsline{toc}{section}{``Plain \LaTeX\ does not work because hyperref does not substitute quotes''}
\addcontentsline{toc}{section}{\texorpdfstring{``}{“}texorpdfstring works but is pointlessly verbose\texorpdfstring{''}{”}}
\addcontentsline{toc}{section}{“UTF-8 quotes work fine and are a good straightforward solution”}
\addcontentsline{toc}{section}{\enquote{enquote is the perfect multilingual solution}{}}
\selectlanguage{german}
\addcontentsline{toc}{section}{\enquote{enquote is the perfect multilingual solution}{}}
\selectlanguage{french}
\addcontentsline{toc}{section}{\enquote{enquote is the perfect multilingual solution}{}}

\end{document}

结果是这样的:

在此处输入图片描述

我不明白为什么必须{}在后面添加\enquote,但为了使其工作,这是必要的(并且似乎没有负面影响)。

相关内容