在 \and 处拆分 \@author 列表,无需重新定义 \author 或 \@author

在 \and 处拆分 \@author 列表,无需重新定义 \author 或 \@author

在尝试回答另一个问题,我想\author按作者拆分命令(即,在每个\and),然后为每个作者提供作者和所属机构单独的字体---而不使用该authblk包。我试图理解一个回答一个老问题,但似乎不能完全按照我的意愿改变。

旧答案重新定义了\author\@author,我想避免这种情况,因为我怀疑这可能是一个坏主意。我设法\@author通过用替换其角色来避免重新定义\FPA@author,但我似乎无法摆脱重新定义\author。我本以为我可以用 (1) 替换下面的 (2),但无济于事。

另外,我不明白为什么\FPA@FormatAuthor它不能按预期工作。我本以为整个隶属关系都会用斜体显示,而不仅仅是第一个字符……任何关于为什么会这样提示都将不胜感激。

\documentclass{article}
\makeatletter
\usepackage{xpatch}
\renewcommand{\@maketitle}{
  \newpage
  \let \footnote \thanks
  % \let\FPA@tmp\noexpand\split@and\@author\and\@nil  % (1)
  {\flushleft\@title \par}%
  \vskip 1.5em%
  {\flushleft
   \lineskip .5em%
   \FPA@author}
  \vskip 1em%
  {\flushleft \@date}%
  \par
  \vskip 1.5em}
\def\FPA@author{}
\def\split@and#1\and#2{%
  \g@addto@macro\FPA@author{\FPA@FormatAuthor#1\\}%
  \ifx#2\@nil\else
    \expandafter\split@and\expandafter#2\fi
}
\def\author#1{\split@and#1\and\@nil}  % (2)
\def\FPA@FormatAuthor#1\\#2{{\bfseries#1} \\ {\itshape#2}}
\makeatother

\title{On the Origins of the Philosopher's Stone}
\author{Albus Dumbledore\thanks{A footnote} \\ Hogwarts School of Witchcraft and Wizardry, International Confederation of Wizards, and the Wizengamot \and Nicholas Flamel\\Beauxbatons Academy of Magic}
\date{\today}
\begin{document}
  \maketitle
\end{document}

迄今结果

答案1

以下似乎有效:

\documentclass{article}
\makeatletter
% \usepackage{xpatch}  % Not actually needed
\renewcommand{\@maketitle}{
  \newpage
  \let \footnote \thanks
  \expandafter\split@and\@author\and\@nil  % (1)
  {\flushleft\@title \par}%
  \vskip 1.5em%
  {\flushleft
   \lineskip .5em%
   \FPA@author}
  \vskip 1em%
  {\flushleft \@date}%
  \par
  \vskip 1.5em}
\def\FPA@author{}
\def\split@and#1\and#2{%
  \g@addto@macro\FPA@author{\FPA@FormatAuthor#1\\}%
  \ifx#2\@nil\else
    \expandafter\split@and\expandafter#2\fi
}
%\def\author#1{\split@and#1\and\@nil}  % (2)
\def\FPA@FormatAuthor#1\\#2\\{{\bfseries#1} \\ {\itshape#2} \\}
\makeatother

\title{On the Origins of the Philosopher's Stone}
\author{Albus Dumbledore\thanks{A footnote} \\ Hogwarts School of Witchcraft and Wizardry, International Confederation of Wizards, and the Wizengamot \and Nicholas Flamel\\ Beauxbatons Academy of Magic}
\date{\today}
\begin{document}
  \maketitle
\end{document}

不完全的解释:

  1. 方式\split@and是定义的,如果您不先展开\@author,它将永远不会进行递归。您希望它做的是查看ARG1\and ARG2\and ARG3\and @nil并运行递归以首先解析ARG1并保存ARG2\and ARG3\and @nil以传递到下一次运行。使用\@author未展开,它只会将整个视为。因此,您真正需要的只是\@author使用ARG1一个来
    预先展开以使其运行。(我还删除了,因为我没有在其他地方看到它;但您可以在需要时恢复它。)\@author\expandafter\let\FPA@tmp\noexpand

  2. 斜体不起作用的原因与输入时\frac{1}12看到的“1/1”后跟“2”而不是“1/12”的原因相同。您定义 的方式是\FPA@FormatAuthor,当您向其输入第一个作者字符串时,它会将其视为要求其将所有内容处理为\\第一个参数,将之后的第一个标记视为第二个参数。之后的第一个标记是地址的第一个字母。您也可以通过正确分隔第二个参数来强制它进一步读取。我使用 ,\\因为您似乎只使用单行地址,并且在调用 时已经使用了换行符\FPA@FormatAuthor#1\\,但如果您想在地址中使用换行符,您可能应该将第二个分隔符更改为其他内容,并适当地将调用更改为\FPA@FormatAuthor

相关内容