在书签中使用重音字符

在书签中使用重音字符

我正在尝试制作自己的食谱集。我的灵感来自美观的食谱模板。它确实很相似,但我做了一些调整。到目前为止,它运行良好,但我发现有些东西让我烦恼,我不知道如何解决它。

我想从我的收藏中生成一个 pdf 文件,以便轻松访问配方,所以我使用了hyperref包及其pdfbookmark命令。它一直有效,直到我尝试在该命令中使用重音字符。似乎这些字符破坏了书签渲染。

  • 如果我删除重音字符,它就可以起作用。
  • 如果我é用替换\`e,它不起作用。
  • 我尝试utf8x使用\PrerenderUnicode{é}utf8不是这个答案,但它不起作用。
  • 我尝试使用包unicodehyperref提到的选项这个答案,但它不起作用。

以下是我的收藏的一个最小(类型)工作示例:

\documentclass[twoside, 12pt]{article}
\usepackage[letterpaper, headheight=15pt, left=1cm, right=1cm, top=2cm, bottom=2cm]{geometry}
\usepackage{fancyhdr}
\usepackage[utf8]{inputenc}
\usepackage[hidelinks,bookmarks,unicode]{hyperref}
\usepackage{bookmark}

\newcommand{\group}[1]{
    \pdfbookmark{#1}{#1}
}

\newcommand{\recipe}[1]{%
    \newpage%
    \pagestyle{fancy}%
    \fancyhead[RO,LE]{\footnotesize{\textbf{#1}}}%
    \fancyfoot[RO,LE]{\thepage}%
    \fancyfoot[C]{}%
    \pdfbookmark[1]{#1}{\pdfmdfivesum{#1}}%
    \section*{#1}%
}

\begin{document}
    \group{Boissons}
    \recipe{Dark \& stormy}
    \recipe{Limonana}

    \group{Desserts}
    \recipe{Tiramisu}
    \recipe{X-mas cake}

    \group{Poisson}
    \recipe{Gravlax de saumon au miel et à la moutarde}
    \recipe{Pain de saumon}

    \group{Viande}
    \recipe{Boulets de Liège}
    \recipe{Poulet à l'ananas}
    \recipe{Ragoût à la joue de bœuf et lard paysan}
\end{document}

我应该怎么做才能使书签能够正确地与重音符号配合使用?

答案1

我建议您 (a)fontenc使用选项 加载包T1,(b) 简化加载包的方式hyperref,以及 (c) 不要加载bookmarkinputenc包,除非您的 TeX 发行版已有数年历史并且三年多没有更新过。

在此处输入图片描述

\documentclass[twoside, 12pt]{article}
\usepackage[letterpaper, headheight=15pt, hmargin=1cm, vmargin=2cm]{geometry}
\usepackage{fancyhdr}
\usepackage[T1]{fontenc}         % <-- new
\usepackage[bookmarks]{hyperref} % <-- simplified

\newcommand{\group}[1]{\pdfbookmark{#1}{#1}}
\newcommand{\recipe}[1]{%
    \newpage%
    \pagestyle{fancy}%
    \fancyhead[RO,LE]{\footnotesize\textbf{#1}}%
    \fancyfoot[RO,LE]{\thepage}%
    \fancyfoot[C]{}%
    \pdfbookmark[1]{#1}{\pdfmdfivesum{#1}}%
    \section*{#1}%
}

\begin{document}
\group{Boissons}
    \recipe{Dark \& stormy}
    \recipe{Limonana}

\group{Desserts}
    \recipe{Tiramisu}
    \recipe{X-mas cake}

\group{Poisson}
    \recipe{Gravlax de saumon au miel et à la moutarde}
    \recipe{Pain de saumon}

\group{Viande}
    \recipe{Boulets de Liège}
    \recipe{Poulet à l'ananas}
    \recipe{Ragoût à la joue de bœuf et lard paysan}
\end{document}

答案2

如果您使用当前的 tex 系统进行编译并且 pdf 查看器可以处理 unicode,则示例中的书签渲染应该可以正常工作。

不起作用的是实际的链接:书签包和 hyperref 处理目标名称中的命令的方法和设置略有不同,因此在您的示例中会创建不同的名称。因此您需要使用\detokenize将它们变成简单的字符串:

\documentclass{article}
\usepackage[unicode]{hyperref}
\usepackage{bookmark}
\begin{document}
xxx
\newpage 
aaa
\pdfbookmark[1]{1. Ragoût à la joue de bœuf et lard paysan}
  {\pdfmdfivesum{zzzRagoût à la joue de bœuf et lard paysan}}


\pdfbookmark[1]{2. Ragoût à la joue de bœuf et lard paysan}
  {\pdfmdfivesum{\detokenize{xxxRagoût à la joue de bœuf et lard paysan}}}
\end{document}

在第一个书签中会给出警告

 pdfTeX warning (dest): name{68378F0B27FA693E17106CB4A2941F21.
 1} has been referenced but does not exist, replaced by a fixed one

并跳转到第一页,但第二页仍能正常工作。

答案3

另一种方法是使用分段命令。该hyperref包将为所有章节、子章节等生成书签,直至当前章节bookmarksdepth(默认情况下为\tocdepth)。

它允许您使用所有标准命令进行章节格式化、除了 PDF 书签之外还创建目录页以及引用\label

\documentclass[twoside, 12pt]{article}
\tracinglostchars=2 % Warn if the current font is missing a glyph
\usepackage[letterpaper, headheight=15pt, left=1cm, right=1cm, top=2cm, bottom=2cm]{geometry}
\usepackage{fancyhdr}
\usepackage[hidelinks,bookmarks,bookmarksdepth,unicode]{hyperref}
\usepackage{libertinus} % Or your fonts of choice.
\usepackage{microtype}

\setcounter{tocdepth}{2} % Create bookmarks for subsections (recipes)

\newcommand{\group}[1]{%
  \clearpage%
  \section{#1}%
  \markright{}%
}

\newcommand{\recipe}[1]{%
  \pagebreak%
  \subsection*{#1}%
  \markright{#1}%
}

\pagestyle{fancy}%
\fancyhead[RE,LO]{\textsc{\nouppercase{\leftmark}}}
\fancyhead[RO,LE]{\footnotesize{\textbf{\rightmark}}}%
\fancyfoot[RO,LE]{\thepage}%
\fancyfoot[C]{}%

\begin{document}
    \group{Boissons}\label{gr:boissons}
    \recipe{Dark \& stormy}\label{rx:darknstormy}
    \recipe{Limonana}\label{rx:limonana}

    \group{Desserts}\label{gr:desserts}
    \recipe{Tiramisu}\label{rx:tiramisu}
    \recipe{X-mas cake}\label{rx:xmascake}

    \group{Poisson}\label{gr:poisson}
    \recipe{Gravlax de saumon au miel et à la moutarde}\label{rx:gravlax}
    \recipe{Pain de saumon}\label{rx:painsaumon}

    \group{Viande}\label{gr:viande}
    \recipe{Boulets de Liège}\label{rx:liegs}
    \recipe{Poulet à l'ananas}\label{rx:lananas}
    \recipe{Ragoût à la joue de bœuf et lard paysan}\label{rx:ragoutpaysan}
\end{document}

该代码与 LuaLaTeX 和 PDFTeX 兼容。我个人推荐使用 LuaTeX,除非出版商强迫您使用 PDFTeX,但您可以自行选择。

相关内容