chemnum에 세 번째 수준의 화합물 구별을 추가하시겠습니까?

chemnum에 세 번째 수준의 화합물 구별을 추가하시겠습니까?

기본적으로 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}.

생산할 것입니다:

하위 하위 레이블로 화합물을 정의합니다.

관련 정보