
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 chemnum
armazena o número de identificação atual do sub-rótulo como um expl3
int
s 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 chemnum
pacote e aprender um pouco expl3
de 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: