如何从宏参数中替换“pdf 字符串中不支持的标记”?

如何从宏参数中替换“pdf 字符串中不支持的标记”?

我正在尝试编写一个类,其中用于标题页的\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 中的多余空格……

相关内容