我正在扩展我的文档类,使其能够处理多个作者。我选择的 API 如下:
\author[1]{Foo}
\author[2]{Bar}
并像这样实现它:
% def part
\def\author[#1]#2{\expandafter\def\csname @author#1 \endcsname{#2}}
% maketitle part
\foreach \n in {1,...,4}
{
\begin{varwidth}[t]{\linewidth}
{
\ifcsname @author\n \endcsname
\sffamily
\Large
\@nameuse{@author\n}
\par
\fi
}
\end{varwidth}
问题在于
\AtBeginDocument{
\hypersetup{
pdftitle=\@title,
pdfauthor=\authors,
pdfsubject=\@abstract,
pdfkeywords=\@keywords
}
}
因为我不知道如何实现连接。当尝试使用与 maketitle 部分相同的方法时,lualatex
崩溃了。
我如何列出作者名单?您有什么改进建议吗(tikz foreach 替代、API/def 更改等)?
答案1
你可以制作两个列表。
\documentclass{article}
\usepackage{varwidth,pgffor}
\usepackage{hyperref}
\makeatletter
\newcounter{authors}
\let\authorlist\@empty
\renewcommand{\author}[1]{%
\stepcounter{authors}%
\expandafter\gdef\csname @author\arabic{authors}\endcsname{#1}%
\xdef\authorlist{%
\ifx\authorlist\@empty
\unexpanded{#1}%
\else
\unexpanded\expandafter{\authorlist}, \unexpanded{#1}%
\fi
}%
}
\renewcommand{\@author}{%
\foreach\n in{1,...,\value{authors}}{%
\begin{varwidth}[t]{\columnwidth}
\sffamily\Large\@nameuse{@author\n}
\end{varwidth}\quad
}%
}
\AtBeginDocument{%
\hypersetup{
pdftitle=\@title,
pdfauthor=\authorlist,
% pdfsubject=\@abstract,
% pdfkeywords=\@keywords
}%
}
\title{Title}
\author{A. Uthor}
\author{W. Riter}
\author{Ç. Édille}
\begin{document}
\maketitle
\end{document}