如何格式化以 \and 分隔的多个作者?

如何格式化以 \and 分隔的多个作者?

我有一个论文文档类,到目前为止,它只接受一个作者姓名。但现在,由于大学规定的变更,该文档必须接受多个作者姓名。

目前,我正在使用标准\author{}命令来获取作者姓名。我的问题是:如何获取单独的作者姓名以便对其应用正确的格式?每个作者都有不同的变量名吗?我知道多个作者之间用 分隔\and,在获取每个作者姓名后,我想将他们一个放在另一个的下面,并置于中间位置(就像下面的例子一样,但每个额外的作者姓名都位于前一个作者姓名的下方)。

这是我命令的代码\maketitle,它是唯一使用作者姓名的命令。下图中,我展示了生成的标题页。

\renewcommand{\maketitle}{
\clearpage % clears pages just to be sure
\thispagestyle{empty} % this page has no numbering
\begin{center} %text is centered
\textbf{ % and bold
\MakeUppercase{\@institution}\\[\baselineskip] % institution name
\MakeUppercase{\@author} % author name
\vfill
\MakeUppercase{\@title}\ifthenelse{\isundefined{\@subtitle}}{}{:\@subtitle}} % title and optional subtitle
\vfill
\@city\\ % city
\number\year %year
\end{center}
}

这是现在的样子

澄清更新

我认为我之前没有说清楚,但现在我有了关于这个问题的更多信息。根据最近的回答,我决定忘记\and并尝试用 分隔作者姓名,\\以便每个作者姓名都可以放在单独的行中,但似乎\MakeUppercase{}不允许在其中插入换行符。有什么建议吗?

所以你看,我的问题与命令本身无关\and,而是与一种将字符串分成多行同时保持大写的方法有关。

我想举一个我想做但却不起作用的例子,如下所示:

\documentclass{report}
\author{Doug \\ Lou}

\begin{document}
\MakeUppercase{\@author}
\end{document}

最终结果更新

只是为了以后使用,我将在这里添加使用从这篇文章中选择的解决方案后的最终结果。

\def\and{\\} % redefine so it is compatible with other classes

\renewcommand{\maketitle}{
\clearpage % clears pages just to be sure
\thispagestyle{empty} % this page has no numbering
\begin{center} %text is centered
\textbf{ % and bold
\MakeUppercase{\@institution}\\[\baselineskip] % institution name
\uppercase\expandafter{\@author} % uppercase author names!!
\vfill
\MakeUppercase{\@title}\ifthenelse{\isundefined{\@subtitle}}{}{:\@subtitle}} % title and optional subtitle
\vfill
\@city % city
\number\year % year
\end{center}
}

答案1

report.cls将的作者部分定义为表格\maketitle数组,即

{\large   
 \lineskip .75em%
  \begin{tabular}[t]{c}%
    \@author
  \end{tabular}\par}%

\andfrom的默认定义latex.ltx用于结束环境tabular,添加一点水平空间,然后启动一个新tabular环境:

\def\and{%                  % \begin{tabular}
  \end{tabular}%
  \hskip 1em \@plus.17fil%
  \begin{tabular}[t]{c}}%   % \end{tabular}

因此,当您写入 时\author{First \and Second},结果是两个名称在各个环境中并排排版tabular。您也可以轻松地\author{First \\ Second}将两个名称排版在一列中(即,在第一个环境的单个居中列中)。可以通过重新定义为 来tabular实现相同的效果;只是偶然地,简单的写入才会产生相同的效果,因为“额外”的对齐字符会被自动解释为。\and\def\and{\\}\author{First & Second}&\\

但是,只有当您在自己的文件中包括与原作者部分类似的内容\maketitle(定义数组)时,最后一种方法才适合您。tabular\maketitle

OP 编辑​​更新:

您可以使用\uppercase按照以下方式进行大写转换。如前所述,我建议您使用tabular中最初定义的整个结构(带有 )作为report.cls您自己的 中的作者部分\maketitle。这可以使原始格式保持\and有效,以及我上面提到的其他方法。

\documentclass{report}
\author{Doug \\ Lou}

\begin{document}

\makeatletter
\begin{center}

% Suggest using the tabular in your \maketitle definition
{\large   
 \lineskip .75em%
  \begin{tabular}[t]{c}%
    \uppercase\expandafter{\@author}
  \end{tabular}\par}%

\end{center}
\makeatother

\end{document}

答案2

仅解决您帖子的“更新”部分中提到的问题:每当宏(在本例中\@author)包含一个或多个 @(“at”)符号时,就必须将其(宏)包裹在一对\makeatletter\makeatother指令中。

在此处输入图片描述

\documentclass{report}
\author{Doug \\ Lou}
\begin{document}
\makeatletter   % new
\noindent       % new, for more consistent formatting
\MakeUppercase{\@author}
\makeatother    % new
\end{document}

相关内容