我有一个论文文档类,到目前为止,它只接受一个作者姓名。但现在,由于大学规定的变更,该文档必须接受多个作者姓名。
目前,我正在使用标准\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}%
\and
from的默认定义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}