我正在使用 XeLaTeX 和 Polyglossia。
我有像这样的字符串
Three \emph{blind} Mice, Émile.
保存在宏中,因此:
\gdef\foobar{Three \emph{blind} Mice, Émile.}
并且我想使用 \pdfinfo{} 将 \foobar 中的文本发送到 PDF 的元数据中,因此:
\pdfinfo{/Title (\foobar)}
不起作用,因为 \foobar 中的文本被发送到 PDF 时扩展混乱。而且 Unicode 字符也乱七八糟。
我尝试过使用 \noexpand、\expandafter、\toks 的一些方法,但没有成功。
有任何想法吗?
PS 不要告诉我使用 \hyperref 的“pdfauthor={}”机制,因为这与 pdfx 包冲突,我无法使用它。而且我也不想使用 pdfx 的 xmpdata 方法。我正在寻找提到的具体问题的解决方案,如何将“Three \emph{blind} Mice, Émile。”更改为“Three blind Mice, Emile。”即使是“Three blind Mice, Émile。”也会有所改进。
答案1
如果使用\pdfinfo
包,则不建议使用:hyperref
\pdfinfo
是一个低级驱动程序特定的命令,仅在 pdfTeX 和 LuaTeX 中受支持。标记的提取、正确的编码、不匹配的括号的转义......必须手动完成。
该包hyperref
提供了设置元数据的选项。该字符串由 自动处理\pdfstringdef
。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[pdfencoding=auto]{hyperref}
\hypersetup{
pdftitle={Three \emph{blind} Mice, Émile.},
}
\begin{document}
Lorem ipsum.
\end{document}
Optionpdfencoding=auto
负责书签字符串和信息元数据的编码。PDF 格式支持两种编码:
- PDFDocEncoding(8 位)
- 统一码 (UTF-16BE)
auto
如果适合,则使用PDFDocEncoding 对字符串进行编码,否则使用 Unicode。
答案2
我刚刚发现了 \pdfstringdef,记录在 hyperref 手册中。它完全满足我的需要。
答案3
\pdfstringdef 将重音字符转换为八进制转义序列。
转数:LIPSUM ÉÈÇÀÙÎÏ éèçàùîï 231
进入:LIPSUM \311\310\307\300\331\316\317 \351\350\347\340 231
\documentclass{article}
\usepackage{tikz}
\usepackage[outline]{contour}
\usepackage{hyperref}
\begin{document}
\Huge
Assume pdf\TeX
\def\exText{LIPSUM ÉÈÇÀÙÎÏ éèçàùîï 231}
\makeatletter
Reverse engineer the contour package.
Here is an MWE\\
\leavevmode
\begingroup
\color{green}%
\con@coloroff
\pdfliteral{%
q % enter a scope
1 j % Set line join style
1 J % Set line cap style
1 Tr % Set text rendering mode
2.5 w % Set line width (in PostScript Point)
}%
\rlap{\exText}%
\pdfliteral{%
Q % leave the scope
}%
\endgroup
\mbox{\exText}
Now use TikZ.\\
\pdfstringdef\plainstr{\exText} % Extraction chaine 'nettoyée'
\leavevmode
\pgfsys@beginscope% = pdf literal q
\pgfsetroundjoin% = 1 J
\pgfsetroundcap% = 1 j
\pdfliteral{1 Tr}% no pgf alternative
\foreach\ind in{10,...,1}{%
\pgfmathsetmacro\per{(11-\ind)*5}%
\color{green!\per}%
\pgfsetlinewidth{\ind/2}%
\rlap{\plainstr}%
}%
\pgfsys@endscope % = pdf literal Q
\plainstr
\makeatother
\end{document}