我发现了这个问题:章节的 Authblk?- 每个章节的作者和所属机构它定义了一个非常好的框架,用于在 TeX 文档的章节中包含作者所属关系。我想对其进行一些调整,以允许每个作者可选地包含多个所属关系。
我通过如下定义来做到这\chapterauthormulti
一点:
\makeatletter
\def\chapterauthormulti[#1][#2]#3{\ifnewauthor\sffamily\else, \fi
#3\textsuperscript{\hyperref[authaffil\the\value{chapter}.#1]{#1},}%
\textsuperscript{\hyperref[authaffil\the\value{chapter}.#2]{#2}}%
\ifnewauthor\newauthorfalse\gdef\chapterauthors{#2}\else
\g@addto@macro\chapterauthors{, #2}\fi
\ifnewauthor\newauthorfalse\gdef\chapterauthors{#2}\else
\g@addto@macro\chapterauthors{, #3}\fi
\ignorespaces % to remove end of line spaces from
% \chapterauthor[foo]{bar} input lines
}
\makeatother
这使得我能够添加最多 2 个从属关系,并且可以以一种简单但笨重的方式推广到更多。这可行,但似乎非常不雅致。有没有更简洁的方法来修改该示例,以允许在单个定义中向每个作者添加任意(在合理范围内)数量的从属关系?
答案1
我不确定我是否 100% 确定您要查找的内容。但如果我理解正确的话,您可以使用逗号分隔列表。
第一的
\usepackage{etoolbox}
接下来,从链接答案中获取代码,修改\chapterauthor
\makeatletter
\def\chapterauthor[#1]#2{\ifnewauthor\else, \fi
#2\affilscripts{#1}%<- Change is here
\ifnewauthor\newauthorfalse\gdef\chapterauthors{#2}\else
\g@addto@macro\chapterauthors{, #2}\fi
\ignorespaces
}
\makeatother
然后编写一个单独的宏\affilscripts
来打印上标
\newcommand{\affilscripts}[1]{%
\let\supsep\relax
\ifundef{\do}{\newcommand{\do}[1]{}}{}%
\renewcommand*{\do}[1]{%
\textsuperscript{\supsep%
\hyperref[authaffil\the\value{chapter}.##1]
{##1}}\def\supsep{,~}}%
\docsvlist{#1}%
}
(顺便说一句——这里有点奇怪。它不应该需要\ifundef{}{}{}
,但出于某种我懒得去追查的原因,我收到了关于\do
未定义的“投诉”,我不得不保持沉默。这没什么坏处,但很丑陋。我可能像往常一样把组弄乱了。)
然后说
\chapterauthor[1,2]{Jane Doe}
将生成“Jane Doe”,上标为“1, 2”,并链接到所属列表。您可以拥有任意数量。