
基本的には、 を使用して化合物の番号に「サブサブラベル」を追加したいと思いますchemnnum
。
なぜ、そしてどのようにこれを望んでいるのか
私は一連のキラル化合物を番号付けして説明しています1a、1bなどなど。時には化合物の別のジアステレオマーも存在することがあります。例えば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
int
s として保存しますが、どのように操作すればよいのかわかりません。
質問)
内部のサブラベル カウンターを手動で 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}.
生成されます: