Referencia cruzada de enteros expl3 con Cleveref

Referencia cruzada de enteros expl3 con Cleveref

Supongamos que implemento elementos de documento numerados usandoexpl3 números enteros. Supongamos además que me gustaría hacer una referencia cruzada de estos elementos usando cleveref. ¿Cuál es la mejor manera de hacer esto?

Se me ocurrió lo siguiente, que parece funcionar en pruebas mínimas, pero no parece especialmente seguro.

\documentclass{article}
\usepackage{bookmark}
\usepackage{cleveref}
\makeatletter
\ExplSyntaxOn
\int_new:N\g_my_counter_int
\keys_define:nn { my / topic thing }
{%
  label .tl_set:N = \l_my_label_tl,
}
\NewDocumentCommand \topicthing  { O{} m }
{
  \keys_set:nn { my / topic thing } { #1 }
  \phantomsection
  \int_gincr:N \g_my_counter_int
  #2
  \my_label_set:Nn \g_my_counter_int { topic }
  \label {topic:\l_my_label_tl}
}
\cs_new_protected_nopar:Nn \my_label_set:Nn
{
  \edef\@currentlabel{\int_use:N #1}
  \cref@constructprefix {#2} {\cref@result}
  \protected@edef\cref@currentlabel{
    [#2] [\int_use:N #1] [\cref@result]
    \int_to_arabic:n { #1 }
  }
}
\ExplSyntaxOff
\crefname{topic}{topic}{topics}
\makeatother
\begin{document}
\topicthing[label=first]{First Topic}

\topicthing[label=second]{Second Topic}

\ref{topic:first}

\ref{topic:second}

\Cref{topic:first}

\Cref{topic:second}
\end{document}

Hasta donde puedo decir, esto proporciona el resultado objetivo en términos de numeración, vinculación, etc. El .auxarchivo también parece razonable, aunque no estoy seguro de cuál es cada parte de la información.cleveref se supone que sirve cada parte de la información escrita:

\relax
\providecommand\hyper@newdestlabel[2]{}
\providecommand\HyField@AuxAddToFields[1]{}
\providecommand\HyField@AuxAddToCoFields[2]{}
\providecommand\BKM@entry[2]{}
\newlabel{topic:first}{{1}{1}{}{section*.1}{}}
\newlabel{topic:first@cref}{{[topic][1][]1}{[1][1][]1}}
\newlabel{topic:second}{{2}{1}{}{section*.2}{}}
\newlabel{topic:second@cref}{{[topic][2][]2}{[1][1][]1}}
\gdef \@abspage@last{1}

Ciertamente está registrando correctamente el tipo de referencia cruzada, aunque no sé si se deben llenar los espacios en blanco. Pero en algunos casos los estuches estándar también cuentan con espacios en blanco...

Sin embargo, si bien no es tan divertido como trabajar \crefcon un\label in a tcolorbox, tampoco es nada bonito.

¿Hay una mejor manera de hacer esto?

Tenga en cuenta que soy consciente de que podría usar un contador 2e y\refstepcounter !

información relacionada