如何去除字符串的所有格式

如何去除字符串的所有格式

我正在使用 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

pdfstringdef 八进制序列

如何制作发光的文字?

\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}

相关内容