![如何从宏参数中替换“pdf 字符串中不支持的标记”?](https://linux22.com/image/314608/%E5%A6%82%E4%BD%95%E4%BB%8E%E5%AE%8F%E5%8F%82%E6%95%B0%E4%B8%AD%E6%9B%BF%E6%8D%A2%E2%80%9Cpdf%20%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E4%B8%8D%E6%94%AF%E6%8C%81%E7%9A%84%E6%A0%87%E8%AE%B0%E2%80%9D%EF%BC%9F.png)
我正在尝试编写一个类,其中用于标题页的\title{}
和命令的参数会自动调用以在 PDF 元数据中设置标题和作者。\author{}
\hypersetup{}
到目前为止我使用这段代码(\apptocmd
命令来自etoolbox
)
\apptocmd{\title}{
\hypersetup{
pdftitle={#1}
}
}{}{}
它运行良好,但经常发生的情况是用户希望在标题中插入换行符来调整其外观:
\title{My very long long \\ title}
虽然一切正常,但我收到一条警告,称换行符是 pdf 字符串不受支持的标记。然后用户被迫执行以下操作:
\title{My very long long \texorpdfstring{\\}{} title}
让警告不再响起。
所以问题是:我可以根据自动删除(或者更好的是,替换)PDF 字符串中不允许的标记hyperref
,并将过滤后的字符串传递给以\hypersetup
避免警告吗?
如果通用解决方案不可行或太难,我至少希望删除换行符或用空格替换它们(我试图\\
在调用之前简单地在组中重新定义命令\hypersetup
,但仍然收到警告)。
答案1
可以用 来hyperref
完成\pdfstringdefDisableCommands
:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{hyperref,xpatch}
\xapptocmd{\title}{%
\hypersetup{ pdftitle={#1} }%
}{}{}
\pdfstringdefDisableCommands{%
\def\\{}%
}
\title{My very long long \\ title}
\author{Me}
\date{\today}
\begin{document}
\maketitle
\end{document}
但是,该示例并未删除 pdftitle 中的多余空格……