\subsection{\citeauthor{some-bib-ref}} => "PDF 字符串中不允许使用标记"

\subsection{\citeauthor{some-bib-ref}} => "PDF 字符串中不允许使用标记"

我的文档中有一个部分,其中的每一部分\subsection{}都是关于某篇论文的,并且应该以参考书目中对该论文的(文本)引用为标题​​。

然而,随着 hyperref 的加入\subsection{\citeauthor{some-bib-ref}}

  1. 出现“不允许使用令牌”警告。这是因为的输出\citeauthor{}不仅仅是文本,而是一个 PDF 链接。
  2. 到名为 some-bib-ref 的目录条目;我更喜欢作者的名字。

如果我只有\subsection{\cite{some-bib-ref}},我猜我可以使用 的星号版本\cite{}。但是,对于\citeauthor,星号版本只会产生不同的(链接)输出。

有人知道如何以纯文本形式获取作者姓名吗?

答案1

如果(或任何其他命令)用或\citeauthor定义并且具有可选参数,则在生成 PDF 字符串(PDF 书签等)时无法扩展它。如果定义为命令(例如通过包),情况也是如此。在所有这些情况下,包都会输出类似于以下内容的警告消息:\newcommand\DeclareRobustCommand\citeauthor\protected\newrobustcmdetoolboxhyperref

Token not allowed in a PDF string (Unicode):
removing `\citeauthor' on input line 378.

您可以在\citeauthor钩子中添加一个可扩展的替代品\pdfstringdefDisableCommands,即仅有的在 PDF 字符串生成的上下文中进行评估,例如:

\pdfstringdefDisableCommands{\def\citeauthor#1{#1}}

\begin{document}
...

结果,警告信息消失了,PDF 书签中只剩下了引文关键字。显然,这不是最佳解决方案,但总比没有好。

是否真的可以获取 PDF 书签中的作者姓名取决于 的实现。\citeauthor.显然,如果\citeauthor是一个复杂的命令,则很难甚至不可能添加一个\pdfstringdefDisableCommands足够简单的可用替换来生成 PDF 字符串。具体来说,后者可能是包\citeauthor中定义的情况biblatex

最后请注意,该xparse包(集合的一部分l3packages)提供了命令\DeclareExpandableDocumentCommand,该命令对于将命令替换添加到\pdfstringdefDisableCommands.

相关内容