![Querverweise für expl3-Ganzzahlen mit cleveref](https://rvso.com/image/476255/Querverweise%20f%C3%BCr%20expl3-Ganzzahlen%20mit%20cleveref.png)
Angenommen, ich implementiere nummerierte Dokumentelemente mit expl3
Ganzzahlen. 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 .aux
Datei sieht auch vernünftig aus, obwohl ich nicht sicher bin, wozu jeder Teil der cleveref
geschriebenen 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 \cref
Arbeit mit einem \label
in 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
!