![chemnum 中的多个子层级,扩展了之前的答案](https://linux22.com/image/435374/chemnum%20%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%E5%AD%90%E5%B1%82%E7%BA%A7%EF%BC%8C%E6%89%A9%E5%B1%95%E4%BA%86%E4%B9%8B%E5%89%8D%E7%9A%84%E7%AD%94%E6%A1%88.png)
我想要的是能够标记诸如此类的事情:\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}
编辑:我愿意用其他方式来做这件事。我专注于此,以便一切都在一种机制内,并且我有一种标准的做事方式。我可以做类似的事情,\refcmpd{lnwater.eu}\ch{. 6 H2O}
但我担心会意外地在两者之间添加空格,并且第一部分和第二部分之间的格式不同(我已经在 MWE 中遇到了一个问题,即水合物部分没有加粗,而名称是加粗的)。
答案1
我刚刚意识到我把事情搞得太复杂了,而这\newcommand\lnhydr[2]{\refcmpd{lnwater.{#1}}\textbf{\ch{. #2 H2O}}}
实际上能满足我的所有需要,我不需要为此使用chemnum
它。