
In der Wirtschaftswissenschaft erfolgt die Autorenreihenfolge traditionell alphabetisch. Aufgrund der bekannten Verzerrung, die durch diese Reihenfolge entsteht, gibt es wenig Bewegung, die Autoren eines Artikels zufällig zu ordnen (Beispiel).
Ich kann die Autoren von Dokumenten zur Kompilierungszeit mit sortieren pgfmathrandom
, aber das ist nicht zufällig genug. Ich möchte die Autoren zur Anzeigezeit dynamisch sortieren. Die Beispiele, die ich für die Implementierung von Javascript-Funktionen in LaTeX/PDF finde, sind nicht anwendbar, da sie sich nicht direkt mit der Anpassung von Dokumentinhalten befassen (Beispiel).
Gewünschter MWE ( \maketitle
muss nicht überschrieben werden, dieser Teil ist einfach):
\documentclass{article}
\usepackage{[magic-package]}
\addauthor{Aaron}
\addauthor{Zhang}
\begin{document}
\maketitle
\end{document}
Sollte ergeben:
+--------------+ +--------------+
| Aaron, Zhang | | Zhang, Aaron |
| | | |
| Lorem ipsum | w.p. 1/2, | Lorem ipsum | w.p. 1/2.
Antwort1
Hier ist eine Option mit demeforms
Paket.
Es wählt die Autoren beim Öffnen des Dokuments mithilfe von JavaScript nach dem Zufallsprinzip aus und fügt das Ergebnis in ein Formularfeld ein, in dem der Autor normalerweise auf der Titelseite eingefügt wird.
Es gibt jedoch einige Einschränkungen:
- Es ist nicht wirklich einfach, in den Textfeldern eines PDF-Formulars eine nicht standardmäßige Schriftart zu verwenden, daher verwende ich überall Times.
- Sie müssen die Höhe des Textfelds angeben. Wenn die Anzahl Ihrer Autoren eine Zeile überschreitet, müssen Sie sie manuell anpassen. Dies könnte wahrscheinlich automatisiert werden, wenn Sie wirklich daran interessiert wären.
- Und natürlich ist Adobe Reader erforderlich.
MWE
\documentclass{article}
\usepackage{newtxtext,newtxmath}
\usepackage[useui]{eforms}
\newcommand{\randauthorformat}{%
border={invisible},
textsize={11.5},
textfont={Times-Roman},
align={centered},
fieldflags={readonly,multiline,noscrolling},
% Default value for readers that don't support JavaScript
value={Author One, Author Two, Author Three, and Author Four},
pageopen={%
% Add authors to array
var array = ["Author One", "Author Two", "Author Three", "Author Four"];
% Shuffling algorithm from https://stackoverflow.com/a/2450976/12652399
var currentIndex = array.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
var i = array.length;
currentIndex = 0;
var authors = "";
while (currentIndex < array.length) {
authors += array[currentIndex];
if (currentIndex < array.length - 1) {
authors += ", ";
}
if (currentIndex == array.length - 2) {
authors += "and ";
}
currentIndex += 1;
}
var f = this.getField("author");
f.value = authors;
}
}
\newcommand{\randauthor}{%
\textField[\ui{presets=\randauthorformat}]{author}{\linewidth}{11.5pt}}
\title{Randomised Authors}
\author{\randauthor}
\begin{document}
\maketitle
\end{document}