我的文档中有一个部分,其中的每一部分\subsection{}
都是关于某篇论文的,并且应该以参考书目中对该论文的(文本)引用为标题。
然而,随着 hyperref 的加入\subsection{\citeauthor{some-bib-ref}}
,
- 出现“不允许使用令牌”警告。这是因为的输出
\citeauthor{}
不仅仅是文本,而是一个 PDF 链接。 - 到名为 some-bib-ref 的目录条目;我更喜欢作者的名字。
如果我只有\subsection{\cite{some-bib-ref}}
,我猜我可以使用 的星号版本\cite{}
。但是,对于\citeauthor
,星号版本只会产生不同的(链接)输出。
有人知道如何以纯文本形式获取作者姓名吗?
答案1
如果(或任何其他命令)用或\citeauthor
定义并且具有可选参数,则在生成 PDF 字符串(PDF 书签等)时无法扩展它。如果定义为命令(例如通过包),情况也是如此。在所有这些情况下,包都会输出类似于以下内容的警告消息:\newcommand
\DeclareRobustCommand
\citeauthor
\protected
\newrobustcmd
etoolbox
hyperref
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.