Comando para converter uma entrada em numeração sequencial

Comando para converter uma entrada em numeração sequencial

Existe um comando capaz de converter uma entrada em numeração sequencial (e quando essa entrada for usada novamente, o comando recuperará o número atribuído anteriormente)?

Contexto: Tenho vários experimentos científicos discutidos. No arquivo TEX de origem, estou usando o número do experimento referente ao meu caderno de laboratório, mas no PDF final gostaria que eles fossem numerados sequencialmente. Claramente, gostaria que o mesmo número fosse usado para o mesmo experimento. A primeira vez que o experimento for mencionado ele deverá receber um novo número progressivo, caso contrário deverá lembrar o número que lhe foi atribuído.

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

Eu gostaria que este MWE imprimisse:

Fiz 1 antes de 2, mas 3 foi feito antes mesmo de 1.

Tenho certeza de que existe uma solução muito simples que não consigo encontrar. Me desculpe pela minha ignorância, gostaria que você pudesse ajudar.

Responder1

O seguinte faz isso armazenando as chaves em uma lista de propriedades (usando expl3). Para alterar a formatação da saída, você pode alterar a definição de \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}

insira a descrição da imagem aqui

informação relacionada