
Существует ли команда, способная преобразовать ввод в последовательную нумерацию (и при повторном использовании этого ввода команда вызовет ранее назначенный номер)?
Контекст: У меня есть обсуждение различных научных экспериментов. В исходном 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}