PDF 元数据 - 从命令中提取(排版)“纯文本”的宏?

PDF 元数据 - 从命令中提取(排版)“纯文本”的宏?

我提前道歉,因为我还没有接受我以前问题的一些答案;但我敢问这个问题,因为它有点像一个引人注目的问题——考虑这个例子:

\documentclass{article} 

\usepackage[fixpdftex,cmyk,svgnames]{xcolor}
\usepackage[breaklinks]{hyperref}

\newcommand{\myauthors}{Author 1 \\ Author 2 \\ {\color{lightgray}Author 3}}

\hypersetup{pdftitle=My Title, pdfauthor=\myauthors, pdfsubject=My Subject, pdfkeywords=} 

\begin{document}

\noindent\myauthors

\end{document}

在这里我得到了\myauthors完全符合我需要的排版(“Author 3”是浅灰色) - 但是,在 PDF 属性中,作者元数据显示:“ Author 1 Author 2 lightgrayAuthor 3” - 也就是说,“lightgray”最终\color{lightgray}成为\myauthors属性的文本pdfauthor

我很疑惑 - 是否有某种宏可以“提取”排版的“纯文本”(即,只有那些排版的字符) - 所以我可以写,说:

\hypersetup{... pdfauthor=\getPlainText{\myauthors}, pdfsubject=...}

...并获取“ Author 1 Author 2 Author 3”作为 PDF 作者元数据?


或者,我在想一些方法将“多行”文本转换为“单行”文本的宏(删除换行符?)- 即使用如下宏:

\def\pastauth#1{\color{lightgray}#1}
\def\npastauth#1{#1}
\newcommand{\myauthors}{Author 1 \\ Author 2 \\ \pastauth{Author 3}}

...然后以某种方式定义一个\getPlainText,其中\pastauth将暂时\let\npastauth(从而\color{lightgray}完全避免) - 但是我无法用这个得到任何东西......我也尝试\color用重新定义\@gobbleone,但这也不起作用

答案1

您需要使用

\texorpdfstring{<TeX string>}{<PDF string>}

宏定义单独的 TeX 和/或 PDF 字符串:

\newcommand{\myauthors}{Author 1 \\ Author 2 \\ \texorpdfstring{\color{lightgray}Author 3}{Author 3}}

以下是使用 Adob​​e Acrobat 的文档属性视图:

PDF 元数据

因此,您<TeX string>定义颜色,而您<PDF string>使用“纯文本”版本(无效\color)。

支持hyperref并且通常与章节标题中的数学内容相关联,这些内容最终会出现在 PDF 书签中(基于文本)。有关此“替换宏”的更多信息,请参阅hyperref文档(HTML 版本)

相关内容