Chemnum に化合物の区別の第 3 レベルを追加しますか?

Chemnum に化合物の区別の第 3 レベルを追加しますか?

基本的には、 を使用して化合物の番号に「サブサブラベル」を追加したいと思いますchemnnum

なぜ、そしてどのようにこれを望んでいるのか

私は一連のキラル化合物を番号付けして説明しています1a1bなどなど。時には化合物の別のジアステレオマーも存在することがあります。例えば1b2番目の位置でエピマー化している - 私はそれを名付けたい2-エピ-1b(上司の好み)。

今やっていること

現在は既存の参照を再利用しているだけです1bのように太字の接頭辞を付けます\textbf{2-epi-}\refcmpd{one.b}が、これは便利ではなく、エラーが発生しやすいと思います。

どのようにしたいか

私は、適切なサブカウンターを first の直後に 1 減らし\cmpd{one.b}、次のようにエピマー化された化合物をすぐに宣言することを考えていました。\labelcmpd[pre-label-code=\textbf{2-epi-}]{one.b:epi}残念ながら、サブカウンターは存在しないことがわかりました。 はchemnumサブラベルの現在の ID 番号をexpl3 ints として保存しますが、どのように操作すればよいのかわかりません。

質問)

内部のサブラベル カウンターを手動で 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}.

生成されます:

サブサブラベルを使用して化合物を定義します。

関連情報