在 chemnum 中添加第三级化合物区别?

在 chemnum 中添加第三级化合物区别?

本质上我想使用 为我的化合物编号添加“子子标签” chemnnum

我为什么以及如何想要这个

我正在描述一系列手性化合物,并给它们编号1a1b等等。有时我还会得到化合物的另一种非对映异构体:比如说1b已在第 2 位发生差向异构化 - 我想将其命名为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 号存储为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}.

将产生:

用子子标签定义复合体。

相关内容