修改作者隶属关系代码,以便每个作者包含多个隶属关系

修改作者隶属关系代码,以便每个作者包含多个隶属关系

我发现了这个问题:章节的 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”,并链接到所属列表。您可以拥有任意数量。

相关内容