
기본적으로 chemnnum
.
왜 그리고 정확히 내가 이것을 원하는지
나는 일련의 키랄 화합물을 설명하고 번호를 매깁니다.1a,1b, 등등. 때로는 화합물의 또 다른 부분입체이성질체도 있습니다.1b2번째 위치에 에피머화되었습니다. 이름을 붙이고 싶습니다.2-에피-1b(감독자의 선호).
내가 지금 어떻게 하고 있는지
현재는 기존 참조를 재사용하고 있습니다.1b다음과 같이 굵은 접두사를 사용 \textbf{2-epi-}\refcmpd{one.b}
하지만 이것이 편리하지 않고 오류가 발생하기 쉬운 것으로 나타났습니다.
내가 어떻게 하고 싶은지
나는 첫 번째 직후에 적절한 하위 카운터를 1씩 줄이고 다음 \cmpd{one.b}
과 같이 에피머화된 화합물을 즉시 선언하는 것에 대해 생각하고 있었습니다 \labelcmpd[pre-label-code=\textbf{2-epi-}]{one.b:epi}
. 불행하게도 chemnum
하위 라벨의 현재 ID 번호를 s로 저장하기 때문에 하위 카운터가 없다는 것을 알게 되었는데 expl3
int
어떻게 상호 작용해야 할지 모르겠습니다.
질문
내부 하위 라벨 카운터를 1씩 수동으로 줄일 수 있습니까 chemnum
? 그렇다면 어떻게 해야 합니까? 아니면 내 화합물의 번호 매기기에 "하위 하위 라벨"을 도입하는 더 나은/대체 방법이 있을까요?
답변1
패키지 의 소스 코드를 읽고 chemnum
일부 프로그래밍을 배운 후 expl3
이를 수행하는 해킹 방법을 생각해 냈습니다. \lebelcmpd
주어진 레이블과 하위 레이블을 모방하여 레이블을 정의하는(그러나 인쇄하지는 않음) 새 명령을 만들었습니다 . 코드:
\ExplSyntaxOn
\int_new:N \l__chemnum_tmpnum_int
% #1: options, #2: main ID, #3: sub ID, #4: new main ID
\NewDocumentCommand {\sublabelcmpd} {O{ }mmm} {
% stash main counter value
\int_set:Nn \l__chemnum_tmpnum_int {\value{cmpdmain}}
% set main counter, that it will produce #2 label again
\setcounter {cmpdmain} {\int_eval:n {\cmpdproperty{#2}{number}-1}}
% define new compound disguised as #2 with dummy sub compound
\chemnum_cmpd:nnnn {\c_true_bool} {\c_false_bool} {#1} {#4.subundefined}
% set sub counter to produce desired sub label #3
\int_set:cn {g__chemnum_compound_#4_subcompound_int} {\subcmpdproperty{#2}{#3}{number}-1}
% define new sub compound disguised as #2.#3
\chemnum_cmpd:nnnn {\c_true_bool} {\c_false_bool} {#1} {#4.#3}
% revert previous main counter state
\setcounter {cmpdmain} {\l__chemnum_tmpnum_int}
}
\ExplSyntaxOff
이렇게 하면 이전에 사용된 라벨에 대해 다른/추가 옵션을 제공할 수 있습니다. 옵션은 기본 레이블과 연결되어 있고 변경할 수 없기 때문에 이 방법에는 새 기본 레이블이 필요합니다. 구문은 이며 \sublabelcmpd[<options>]{<main ID>}{<sub ID>}{<new main ID>}
, 새로운 화합물은 간단히 로 참조할 수 있습니다 \cmpd{<new main ID>}{<sub ID>}
. 예를 들면 다음과 같습니다.
Compounds \cmpd{one.a} and \cmpd{one.b} are defined as usual.
Then a new compound is defined using
\verb#\sublabelcmpd[pre-label-code=\textbf{2-epi-}]{one}{b}{epi:one}#.
\sublabelcmpd[pre-label-code=\textbf{2-epi-}]{one}{b}{epi:one}
This newly defined compound will have the same label as \cmpd{one.b},
but with additional options, and can be referenced normally: \cmpd{epi:one.b}.
생산할 것입니다: