在 for 循环中连接字符串

在 for 循环中连接字符串

我正在扩展我的文档类,使其能够处理多个作者。我选择的 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}

在此处输入图片描述

相关内容