![Перекрестная ссылка на целые числа expl3 с помощью cleveref](https://rvso.com/image/476255/%D0%9F%D0%B5%D1%80%D0%B5%D0%BA%D1%80%D0%B5%D1%81%D1%82%D0%BD%D0%B0%D1%8F%20%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B0%20%D0%BD%D0%B0%20%D1%86%D0%B5%D0%BB%D1%8B%D0%B5%20%D1%87%D0%B8%D1%81%D0%BB%D0%B0%20expl3%20%D1%81%20%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E%20cleveref.png)
Предположим, я реализую нумерованные элементы документа с использованием expl3
целых чисел. Предположим далее, что я хотел бы сделать перекрестные ссылки на эти элементы с использованием cleveref
. Каков наилучший способ сделать это?
Я придумал следующее, что, судя по минимальному тестированию, работает, но не кажется особенно безопасным.
\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}
Насколько я могу судить, это дает целевой вывод с точки зрения нумерации, связывания и т. д. Файл также выглядит разумно, хотя я не уверен , для чего предназначена .aux
каждая часть записываемой информации :cleveref
\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}
Конечно, он правильно записывает тип перекрестной ссылки, хотя я не знаю, следует ли заполнять пробелы. Но стандартные случаи также содержат пробелы в некоторых случаях ....
Однако, хотя это и не так весело, как работать \cref
с \label
в tcolorbox
, это все равно совсем не красиво.
Есть лучший способ сделать это?
Обратите внимание, я знаю, что могу использовать счетчик 2e и \refstepcounter
!