如何在 LaTeX 中实现认证随机

如何在 LaTeX 中实现认证随机

实施的最佳方式是什么认证随机LaTeX 中的合著者。有一个潜在的执行来自comp.text.texusenet 组,可以使用perltex并进行如下修改:

\usepackage{perltex}

\perlnewcommand{\shuffleauthors}[1]{
@authlist = split /\\.*?\{c\}/, $_[0];
foreach (1 .. 3) {
foreach $i (0 .. $#authlist) {
$r = int(rand(@authlist));
($authlist[$i], $authlist[$r]) = ($authlist[$r], $authlist[$i]);
}
}
return join(" \\textcircled{r} ", @authlist);
}

\title{Test of Random Authors}
\author{\shuffleauthors{Arthur Won \and Ardur Tu \and Auzer Trea}}

\begin{document}
\maketitle

\end{document}

不幸的是,\thanks脚注在此实现中不起作用,而且我的latex编码能力不足以使其工作。此外,理想的实现不需要perltex

答案1

您可以使用expl3

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\shuffleauthors}{m}
 {
  \seq_set_split:Nnn \l_tedto_shuffle_authors_seq { \and } { #1 }
  \seq_shuffle:N \l_tedto_shuffle_authors_seq
  \seq_use:Nn \l_tedto_shuffle_authors_seq { \and }
 }
\seq_new:N \l_tedto_shuffle_authors_seq
\ExplSyntaxOff

\begin{document}

\title{Test of Random Authors}
\author{\shuffleauthors{%
  Arthur Won\thanks{Supported by somebody} \and Ardur Tu \and Auzer Trea%
}}

\maketitle

\end{document}

在此处输入图片描述

如果您想\textcirled{r}在每个作者之后添加,则必须修改\thanks在零宽度框中排版标记的行为。

\documentclass{article}
\usepackage{xparse,etoolbox}

\patchcmd{\maketitle}{\rlap}{\mbox}{}{} % we want \thanks not to occupy zero width

\ExplSyntaxOn

\NewDocumentCommand{\shuffleauthors}{m}
 {
  \seq_set_split:Nnn \l_tedto_shuffle_authors_seq { \and } { #1 }
  \seq_shuffle:N \l_tedto_shuffle_authors_seq
  \seq_use:Nn \l_tedto_shuffle_authors_seq { \,\textcircled{r}\and }
  \,\textcircled{r}
 }
\seq_new:N \l_tedto_shuffle_authors_seq

% fix the seed
\sys_gset_rand_seed:n { 42 }

\ExplSyntaxOff

\begin{document}

\title{Test of Random Authors}
\author{\shuffleauthors{%
  Arthur Won\thanks{Supported by somebody} \and Ardur Tu \and Auzer Trea%
}}

\maketitle

\end{document}

我还添加了如何通过设置种子来确保持续排版。

在此处输入图片描述

相关内容