chemnum 中的多个子层级,扩展了之前的答案

chemnum 中的多个子层级,扩展了之前的答案

我想要的是能够标记诸如此类的事情:\cmpd{ln.eu.six}并获得10Eu.6H2O

我已经完成第一部分的工作。,但chemnum开箱即用仅支持一级子标签。

之前有一个答案,但我不明白它的代码。我已经让它部分工作了,但需要帮助才能完成其余的工作(老实说,我不知道这是否是最好的方法)

它提供了一种(自称)向化合物添加第三级子标签的黑客方法,这正是我需要的。但是,我承认我不明白代码在做什么,因此我无法让它与我现有的代码一起工作以允许自定义编号方案:是否可以调整它?

MNEW 示例:

\documentclass{article}
\usepackage{chemformula}
\usepackage{chemnum}

\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

\setchemnum{counter-format=arabic}

\ExplSyntaxOn
\cs_new:Npn \canageek_int_to_lanthanide:n #1
{
    \int_to_symbols:nnn {#1} { 2 }
    {
        { 1 } { La }
        { 2 } { Ce }
    }
}
\newcmpdcounterformat{lanthanide}{\canageek_int_to_lanthanide:n}
\ExplSyntaxOff

\labelcmpd{one}
\labelcmpd[sub-counter-format=lanthanide]{one.la,one.ce}

\begin{document}
\cmpd{one.la} and \cmpd{one.ce}

\sublabelcmpd[post-label-code=\ch{. 6 H2O}]{one}{La}{6:one}

This newly defined compound will have the same label as \cmpd{one.la},
but with additional options, and can be referenced normally: \cmpd{6:one.la}

\cmpd{6:one.ce}
\cmpd{one.ce}

\end{document}

输出: 当使用第二行子标签时,它从 1La 移动到 1a

编辑:我愿意用其他方式来做这件事。我专注于此,以便一切都在一种机制内,并且我有一种标准的做事方式。我可以做类似的事情,\refcmpd{lnwater.eu}\ch{. 6 H2O}但我担心会意外地在两者之间添加空格,并且第一部分和第二部分之间的格式不同(我已经在 MWE 中遇到了一个问题,即水合物部分没有加粗,而名称是加粗的)。

答案1

我刚刚意识到我把事情搞得太复杂了,而这\newcommand\lnhydr[2]{\refcmpd{lnwater.{#1}}\textbf{\ch{. #2 H2O}}}实际上能满足我的所有需要​​,我不需要为此使用chemnum它。

相关内容