Команда для преобразования ввода в последовательную нумерацию

Команда для преобразования ввода в последовательную нумерацию

Существует ли команда, способная преобразовать ввод в последовательную нумерацию (и при повторном использовании этого ввода команда вызовет ранее назначенный номер)?

Контекст: У меня есть обсуждение различных научных экспериментов. В исходном TEX-файле я использую номер эксперимента, указанный в моей лабораторной тетради, но в итоговом PDF-файле я хотел бы, чтобы они были последовательно пронумерованы. Очевидно, я хотел бы, чтобы тот же номер использовался для того же эксперимента. При первом упоминании эксперимента он должен получить новый прогрессивный номер, в противном случае он должен вспомнить номер, который был ему присвоен.

% the \magicnumbering is a command name that I invented for this purpose!

\documentclass{report}

\begin{document}

I did \magicnumbering{experimentA} before \magicnumbering{experimentB}, but \magicnumbering{experimentC} was done even before \magicnumbering{experimentA}.

\end{document}

Я хотел бы, чтобы MWE распечатал:

Я сделал 1 раньше 2, но 3 был сделан даже раньше 1.

Я уверен, что есть очень простое решение, которое я не могу найти. Извините за мою неосведомленность, я бы хотел, чтобы вы помогли.

решение1

Следующий код делает это, сохраняя ключи в списке свойств (используя expl3). Чтобы изменить форматирование вывода, вы можете изменить определение \magicnumbering_output:n.

\documentclass[]{report}

\ExplSyntaxOn
\prop_new:N \g_magicnumbering_numbers_prop
\int_new:N \g_magicnumbering_current_int
\tl_new:N \l_magicnumbering_output_tl
\cs_new_protected:Npn \magicnumbering_output:n #1
  {
    #1
  }
\cs_generate_variant:Nn \magicnumbering_output:n { V }
\cs_new_protected:Npn \magicnumbering_parse:n #1
  {
    \prop_get:NnNTF
      \g_magicnumbering_numbers_prop {#1} \l_magicnumbering_output_tl
      { \magicnumbering_output:V \l_magicnumbering_output_tl }
      {
        \int_gincr:N \g_magicnumbering_current_int
        \prop_put:NnV
          \g_magicnumbering_numbers_prop {#1} \g_magicnumbering_current_int
        \magicnumbering_output:V \g_magicnumbering_current_int
      }
  }
\NewDocumentCommand \magicnumbering { m } { \magicnumbering_parse:n {#1} }
\ExplSyntaxOff

\begin{document}
I did \magicnumbering{experimentA} before \magicnumbering{experimentB}, but
\magicnumbering{experimentC} was done even before
\magicnumbering{experimentA}.
\end{document}

введите описание изображения здесь

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