我使用XeLaTeX
、fontspec
和polyglossia
等包将我的文档排版为。 这个包很棒,但是我发现了一个非常烦人的错误biblatex
。hyperref
\documentclass[11pt,a4paper]{article}
hyperref
我希望pdftitle
使用一些静态文本和先前定义的变量的组合\thetitle
。到目前为止一切顺利。当此变量包含换行符(\\
)时,就会出现问题。hyperref
似乎只是自动省略它们,但我希望能够手动控制它。
为了摆脱换行符,我使用这个宏\replacelinebreaks{}{}
:
% A macro to remove line breaks from any text #1 and replace them
% with #2 (can be void). E.g.: \replacelinebreaks{\thetitle}{\ }.
\newcommand{\replacelinebreaks}[2]{%
\begingroup\def\\{#2}#1\endgroup}
(这主要归功于删除格式(例如换行符)的简单方法) 此宏在整个文档的任何地方都能正常工作 - 除了\hypersetup{pdftitle= ...}
。
我在这里错过了什么?这个网站上有很多非常相似的问题,但似乎没有一个能解决我的特定问题:
- 在 hyperref pdfinfo 中的作者姓名和标题中使用非 ASCII 字符,但我已经使用
\hypersetup
- 我也尝试创建一个没有换行符的新变量,但错误似乎一直蔓延。
- 使用特殊字符的代码(例如
\040
空格)不会产生任何差异。
- hyperref:pdftitle 和错误的字符编码,同样的论点。
- pdfinfo 似乎无法正常工作,又是同样的论点。
- hyperref:打破 pdftitle 和其他字段中的长行.
\textLF
和 并\textCR
不能解决我的问题。Foxit Reader 无法识别这些字符,而 Adobe Acrobat 和 Acrobat Reader 仅显示第一行。我的问题在于hyperref
。 - 非 ascii 字符不会显示在 hyperref 的 pdftitle 中:“unicode”选项中存在错误?. 就我而言,
\usepackage[pdfencoding=unicode]{hyperref}
没有改变任何东西。 - 使 hyperref 从 \title 和 \author 获取 pdfinfo。诚然,如果我使用 ,则已
\usepackage[pdfusetitle]{hyperref}
过时\hypersetup
,并且换行符会自动转换为空格(对于 pdftitle)和逗号(对于 pdfauthor)。但是,如前所述,我想要静态文本和 的组合\thetitle
,因此这\hypersetup
是不可避免的。- 这种
\@title
方法没有帮助,因为它\thetitle
首先已经被用来定义。
- 这种
这是我的 MWE:
% !BIB TS-program = biber
% !TeX program = xelatex
% !TeX encoding = UTF-8
% !TeX spellcheck = en_GB
\documentclass[11pt,a4paper]{article}
\usepackage{polyglossia}
\usepackage{hyperref}
\newcommand{\replacelinebreaks}[2]{\begingroup\def\\{#2}#1\endgroup}
\def\thetitle{Type the\\Minimum Working Example\\Title Here\\}
\def\firstauthor{Abra} % Only the first author
\def\theauthor{\firstauthor % Add all other authors (no spaces! Use "\\" and "%")
\\Ca%
\\Dabra%
}
\begin{document}
\hypersetup{
pdftitle = MWE No.1 \space -- \replacelinebreaks{\thetitle}{\ },
pdfauthor = \replacelinebreaks{\theauthor}{; },
}
\begin{center}
{\Huge\thetitle}
\end{center}
\end{document}
其结果是:
请帮助我理解并纠正此行为,以便我可以使用\replacelinebreaks
宏或以其他方式实现我的目标。非常感谢您的帮助。
答案1
您始终可以重新定义 hyperref 处理此类标记的方式:
\documentclass{article}
\usepackage{hyperref}
\newcommand\myvar{abc\\cde}
\pdfstringdefDisableCommands{\def\\{XXX}}
\hypersetup{pdftitle= abc\\ cde\myvar}
\begin{document}
blub
\end{document}
或者您可以定义变量,以便它在合理的位置使用\texorpdfstring
:
\documentclass{article}
\usepackage{hyperref}
\newcommand\myvar{abc\texorpdfstring{\\}{XXX}cde}
\hypersetup{pdftitle= abcXXXcde\myvar}
\begin{document}
\myvar
\end{document}