获取 \author{} 中的作者数量

获取 \author{} 中的作者数量

我想知道是否可以计算\author{}宏中设置的作者数量。我需要这个来修改标题页的输出。我目前正在硬编码以下内容:

\emph{Author:}\\
\begin{tabular}[t]{c}%
    \@author
\end{tabular}\par%

无论是否设置了多个作者,此命令都会打印“Author”。应通过计算传递给宏的作者数量,然后根据结果修改输出来更改此设置。

我想说计算作者的关键在于\and声明中,但不幸的是我不知道如何在这个关键字处拆分字符串。

答案1

在评论中,您确认您以标准方式收集文档的作者。在这种情况下,您可以使用分隔参数来获取实际的作者数量(作为对您的问题的直接回答):

\newcounter{authors}
\stepcounter{authors}
\def\count@and#1\and#2{%
  \ifx#2\@nil\else
    \stepcounter{authors}\expandafter\count@and\fi
}

现在,如果你使用\count@and...\and...\and...\and\@nil\theauthors将保存由 分隔的元素数。你可以使用以下补丁\and将其包括在内,以计算由 定义的作者。\author

\let\latex@author\author
\def\author#1{%
  \count@and#1\and\@nil
  \latex@author{#1}
}

以类似于@egreg的回答你可以说:

\xpatchcmd{\@maketitle}
  {\begin{tabular}}
  {\author@or@authors\begin{tabular}}
  {}{}
\def\author@or@authors{\textit{Author\ifnum\theauthors>1s\fi:}\\}

完整代码如下:

\documentclass{article}
\usepackage{xpatch}

\makeatletter
\newcounter{authors}
\stepcounter{authors}
\def\count@and#1\and#2{%
  \ifx#2\@nil\else
    \stepcounter{authors}\expandafter\count@and\fi
}
\let\latex@author\author
\def\author#1{%
  \count@and#1\and\@nil
  \latex@author{#1}
}
\xpatchcmd{\@maketitle}
  {\begin{tabular}}
  {\author@or@authors\begin{tabular}}
  {}{}
\def\author@or@authors{\textit{Author\ifnum\theauthors>1s\fi:}\\}
\makeatother

\title{title}
\author{John Doe}%\and Jane Doe}

\begin{document}
\maketitle\theauthors
\end{document}

答案2

我不知道您如何修改\@maketitle,因此我只做了您所说的更改;想法是添加\author@or@authors而不是\emph{Author:}\\,并对辅助宏进行以下定义:

\documentclass{article}
\usepackage{xpatch,xstring}

\makeatletter
\xpatchcmd{\@maketitle}
 {\begin{tabular}}
 {\author@or@authors\begin{tabular}}
 {}{}

\newcommand\author@or@authors{%
  \emph{Author%
    \expandafter\IfSubStr\expandafter{\@author}{\and}{s}{}%
  :}\\%
}
\noexpandarg
\makeatother

\begin{document}

\title{A title}
\author{John Doe \and Jane Doe}

\maketitle

\end{document}

在此处输入图片描述

相关内容