我正在尝试制作自己的食谱集。我的灵感来自美观的食谱模板。它确实很相似,但我做了一些调整。到目前为止,它运行良好,但我发现有些东西让我烦恼,我不知道如何解决它。
我想从我的收藏中生成一个 pdf 文件,以便轻松访问配方,所以我使用了hyperref
包及其pdfbookmark
命令。它一直有效,直到我尝试在该命令中使用重音字符。似乎这些字符破坏了书签渲染。
- 如果我删除重音字符,它就可以起作用。
- 如果我
é
用替换\`e
,它不起作用。 - 我尝试
utf8x
使用\PrerenderUnicode{é}
而utf8
不是这个答案,但它不起作用。 - 我尝试使用包
unicode
中hyperref
提到的选项这个答案,但它不起作用。
以下是我的收藏的一个最小(类型)工作示例:
\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) 不要加载bookmark
和inputenc
包,除非您的 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,但您可以自行选择。