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