我提前道歉,因为我还没有接受我以前问题的一些答案;但我敢问这个问题,因为它有点像一个引人注目的问题——考虑这个例子:
\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}}
以下是使用 Adobe Acrobat 的文档属性视图:
因此,您<TeX string>
定义颜色,而您<PDF string>
使用“纯文本”版本(无效\color
)。
支持hyperref
并且通常与章节标题中的数学内容相关联,这些内容最终会出现在 PDF 书签中(基于文本)。有关此“替换宏”的更多信息,请参阅hyperref
文档(HTML 版本)。