МВЭ

МВЭ

В экономике порядок авторов традиционно алфавитный. Из-за известного смещения, вызванного этим порядком, есть небольшое движение к случайному порядку авторов статьи (пример).

Я могу упорядочить авторов документа во время компиляции с помощью pgfmathrandom, но это недостаточно случайно. Я хотел бы упорядочить авторов динамически во время просмотра. Примеры, которые я могу найти для реализации функциональности Javascript в LaTeX/PDF, неприменимы, так как они не обрабатывают прямую корректировку содержимого документа (пример).

Желаемый MWE ( \maketitleне нужно переопределять, эта часть проста):

 \documentclass{article}

 \usepackage{[magic-package]}

 \addauthor{Aaron}
 \addauthor{Zhang}

 \begin{document}
 \maketitle

 \end{document}

Должно получиться:

 +--------------+               +--------------+
 | Aaron, Zhang |               | Zhang, Aaron |
 |              |               |              |
 | Lorem ipsum  | w.p. 1/2,     | Lorem ipsum  | w.p. 1/2.

решение1

Вот вариант с использованиемeformsупаковка.

Он рандомизирует авторов при открытии документа с помощью JavaScript и помещает результат в поле формы, где автор обычно указывается на титульном листе.

Однако есть некоторые ограничения:

  • Использовать нестандартный шрифт в текстовых полях PDF-формы не так-то просто, поэтому я везде использую Times.
  • Вам нужно указать высоту текстового поля, поэтому если количество авторов превышает одну строку, вам придется настроить ее вручную. Это, вероятно, можно автоматизировать, если вы действительно хотите.
  • И, конечно же, для этого требуется Adobe Reader.

МВЭ

\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}

Выход МВЭ

Связанный контент