第一作者使用分隔符和扩展

第一作者使用分隔符和扩展

下面有一行在取消注释后不起作用,因为我猜想宏的输出不会被解析为字符串。有办法解决这个问题吗?我仍然希望有一个可以通用地作用于 变量\AB@authlist的方法authblk

\documentclass{article}
\usepackage{authblk}

\makeatletter
\def\getfirst#1,#2\relax{{#1}}

\def\ABfirstauthor{    
    %\getfirst \expandafter{\AB@authlist}\relax  % this line doesn't work if it is uncommented
    \getfirst First Author, Second Author, Third Author\relax
}
\makeatother        

\author{First Author}
\author{Second Author}
\author{Third Author}

\begin{document}

\ABfirstauthor

\end{document}

答案1

我认为最好\author以干净的形式获取作者姓名,以便可以随时检索。

\documentclass{article}
\usepackage{authblk}

\NewCommandCopy{\authblkauthor}{\author}

\ExplSyntaxOn

\seq_new:N \g_bamberg_authors_seq
\RenewDocumentCommand{\author}{om}
 {
  \seq_gput_right:Nn \g_bamberg_authors_seq { #2 }
  \IfNoValueTF { #1 } { \authblkauthor{#2} } { \authblkauthor[#1]{#2} }
 }
\NewExpandableDocumentCommand{\ABgetauthor}{m}
 {
  \seq_item:Nn \g_bamberg_authors_seq { #1 }
 }

\ExplSyntaxOff

\author{First Author}
\author{Second Author}
\author{Third Author}

\begin{document}

\ABgetauthor{1}

\ABgetauthor{3}

\end{document}

在此处输入图片描述

答案2

如果你使用

 \makeatletter \show\AB@authlist \makeatother

您会发现该命令的内容相当复杂,不符合“第一作者,第二作者”的想法。

看起来作者总是在 a\Authfont和 a之间\protect,因此您可以尝试使用正则表达式来提取作者:

\documentclass{article}
\usepackage{authblk}

\ExplSyntaxOn\makeatletter
\seq_new:N\l__john_tmpa_seq
\cs_new_protected:Nn \john_getfirst_authblk:n
 {
   \regex_extract_once:nnN 
    { \c{Authfont}([^\c{protect}]+)}
    {#1}\l__john_tmpa_seq
   \seq_item:Nn \l__john_tmpa_seq {2}  
 }
 
\newcommand\ABfirstauthor{%
    \exp_args:No \john_getfirst_authblk:n{\AB@authlist}
    }

\ExplSyntaxOff
\makeatother

\author{First Author}
\author{Second Author}
\author{Third Author}

\makeatletter \show\AB@authlist \makeatother

\begin{document}

\ABfirstauthor

\end{document}

相关内容