![Cleveref를 사용한 상호 참조 expl3 정수](https://rvso.com/image/476255/Cleveref%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%9C%20%EC%83%81%ED%98%B8%20%EC%B0%B8%EC%A1%B0%20expl3%20%EC%A0%95%EC%88%98.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
.