
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}