Querverweise für expl3-Ganzzahlen mit cleveref

Querverweise für expl3-Ganzzahlen mit cleveref

Angenommen, ich implementiere nummerierte Dokumentelemente mit expl3Ganzzahlen. Nehmen wir weiter an, ich möchte diese Elemente mit Querverweisen versehen cleveref. Wie kann ich das am besten tun?

Ich bin auf Folgendes gekommen, was nach relativ wenigen Tests zu funktionieren scheint, aber nicht besonders sicher erscheint.

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

Soweit ich das beurteilen kann, ergibt dies die Zielausgabe in Bezug auf Nummerierung, Verknüpfung usw. Die .auxDatei sieht auch vernünftig aus, obwohl ich nicht sicher bin, wozu jeder Teil der cleverefgeschriebenen Informationen dienen soll:

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

Sicherlich wird der Typ des Querverweises korrekt aufgezeichnet, obwohl ich nicht weiß, ob die Leerzeichen ausgefüllt werden müssen. Aber auch in Standardfällen sind teilweise Leerzeichen vorhanden ...

Allerdings macht es zwar nicht ganz so viel Spaß wie die \crefArbeit mit einem \labelin einem tcolorbox, aber schön ist es trotzdem nicht.

Gibt es eine bessere Möglichkeit, dies zu tun?

Beachten Sie, dass mir bewusst ist, dass ich einen 2e-Zähler und verwenden könnte \refstepcounter!

verwandte Informationen