
Básicamente, me gustaría agregar una "subsubetiqueta" a la numeración de mis compuestos usando chemnnum
.
¿Por qué y cómo exactamente quiero esto?
Estoy describiendo una serie de compuestos quirales, numerándolos.1a,1b, etcétera. A veces también tengo otro diastereómero de un compuesto: digamos1bha epimerizado en 2ª posición - me gustaría ponerle un nombre2-epi-1b(preferencia del supervisor).
como lo estoy haciendo ahora
Actualmente solo estoy reutilizando referencias existentes para1bcon prefijo en negrita, como este: \textbf{2-epi-}\refcmpd{one.b}
, pero encuentro que esto no es conveniente y propenso a errores.
como me gustaria hacerlo
Estaba pensando en disminuir el subcontador apropiado en 1 directamente después del primero \cmpd{one.b}
y declarar inmediatamente un compuesto epimerizado como este: \labelcmpd[pre-label-code=\textbf{2-epi-}]{one.b:epi}
. Desafortunadamente, descubrí que no hay un subcontador, ya que chemnum
almacena el número de identificación actual de la subetiqueta como una expl3
int
s y no tengo idea de cómo interactuar con ellos.
Las preguntas)
¿Es posible disminuir manualmente el contador interno de subetiquetas en 1 pulgada chemnum
? En caso afirmativo, ¿cómo hacerlo? ¿O tal vez haya una forma mejor/alternativa de introducir una "sub-sub-etiqueta" en la numeración de mis compuestos?
Respuesta1
Después de leer el código fuente del chemnum
paquete y aprender algo expl3
de programación, se me ocurrió una forma ingeniosa de hacer esto. Creé un nuevo comando que define una etiqueta (pero no la imprime, como \lebelcmpd
), imitando una etiqueta y una subetiqueta determinadas. El 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
De esta manera puedo proporcionar opciones diferentes/adicionales para lo que parece ser una etiqueta utilizada anteriormente. Este método requiere una nueva etiqueta principal, porque las opciones están asociadas con la etiqueta principal y no se pueden cambiar. La sintaxis es \sublabelcmpd[<options>]{<main ID>}{<sub ID>}{<new main ID>}
, luego se puede hacer referencia al nuevo compuesto simplemente con \cmpd{<new main ID>}{<sub ID>}
. Para dar un ejemplo:
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}.
Producirá: