Adicionando um terceiro nível de distinção de compostos no chemnum?

Adicionando um terceiro nível de distinção de compostos no chemnum?

Essencialmente, gostaria de adicionar um "sub-sub-rótulo" à numeração dos meus compostos usando chemnnum.

Por que e como exatamente eu quero isso

Estou descrevendo uma série de compostos quirais, numerando-os1a,1b, e assim por diante. Às vezes eu tenho também outro diastereômero de um composto: digamos1bepimerizou na 2ª posição - gostaria de nomeá-lo2-epi-1b(preferência do supervisor).

Como estou fazendo isso agora

Atualmente estou apenas reutilizando referências existentes para1bcom prefixo em negrito, como este: \textbf{2-epi-}\refcmpd{one.b}, mas acho que isso não é conveniente e sujeito a erros.

Como eu gostaria de fazer

Eu estava pensando em diminuir o subcontador apropriado em 1 logo após o primeiro \cmpd{one.b}e declarar imediatamente um composto epimerizado como este \labelcmpd[pre-label-code=\textbf{2-epi-}]{one.b:epi}:. Infelizmente, aprendi que não existe subcontador, pois chemnumarmazena o número de identificação atual do sub-rótulo como um expl3 ints e não tenho ideia de como interagir com eles.

As questões)

É possível diminuir manualmente o contador interno de sub-rótulos em 1 pol chemnum? Se sim, como fazer? Ou talvez exista uma maneira melhor/alternativa de introduzir um "sub-sub-rótulo" na numeração dos meus compostos?

Responder1

Depois de ler o código-fonte do chemnumpacote e aprender um pouco expl3de programação, descobri uma maneira hackeada de fazer isso. Criei um novo comando que define um rótulo (mas não o imprime, como \lebelcmpd), imitando um determinado rótulo e sub-rótulo. O código:

\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

Dessa forma, posso fornecer opções diferentes/adicionais para o que parece ser um rótulo usado anteriormente. Este método requer um novo rótulo principal, pois as opções estão associadas ao rótulo principal e não podem ser alteradas. A sintaxe é \sublabelcmpd[<options>]{<main ID>}{<sub ID>}{<new main ID>}, o novo composto pode ser simplesmente referenciado com \cmpd{<new main ID>}{<sub ID>}. Para dar um exemplo:

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}.

vai produzir:

Definindo composto com sub-rótulo.

informação relacionada