我想构建一个允许使用多个作者的文档类。为此,我创建了一个命令来添加任意数量的作者,并将他们存储到诸如 、 等命令中。\authornamei
这\authornameii
部分已经完成,但现在我想将此列表放入 PDF 作者字段。我的想法是使用\hypersetup
包的命令\hyperref
,但它表现得很奇怪。这里肯定有一些我不明白的地方,所以我需要你的帮助!
这个最小的工作示例可能会有所帮助:
\documentclass{article}
\newcounter{L}
\newcommand{\aaai}{first}
\newcommand{\aaaii}{second}
\setcounter{L}{2}
\newcounter{C}
\newcommand{\buildlist}{%
\csname aaa\roman{C}\endcsname%
\ifnum\value{C}<\value{L}%
,%
\stepcounter{C}%
\buildlist%
\fi%
}
\usepackage{hyperref}
\begin{document}
\setcounter{C}{1}
\let\ccc\buildlist
ccc: \ccc
\hypersetup{
pdfauthor = {\ccc}
}
\end{document}
使用此代码,我获得了一个内容符合预期的 PDF:。ccc: first,second
但是,在 PDF 数据中,作者字段只是second
。我发现的唯一解释是\ccc
再次计算。然后,作为一种解决方法,我尝试在调用之前将计数器重置为 1 \hypersetup
,但它会引发编译错误:
! Missing \endcsname inserted.
<to be read again>
\csname\endcsname
l.30 }
如果我不先尝试显示,也会遇到同样的错误\ccc
。有什么想法吗?
答案1
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N\g_jeremy_authors_seq
\NewDocumentCommand\newauthor { m }
{
\seq_gput_right:Nn \g_jeremy_authors_seq { #1 }
}
\newcommand\authorlist
{
\seq_use:Nn \g_jeremy_authors_seq{,~}
}
\ExplSyntaxOff
\newauthor{first}
\newauthor{second}
\usepackage{hyperref}
\hypersetup{
pdfauthor = {\authorlist}
}
\begin{document}
\authorlist
\end{document}