¿Agregar un tercer nivel de distinción de compuestos en chemnum?

¿Agregar un tercer nivel de distinción de compuestos en chemnum?

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 chemnumalmacena el número de identificación actual de la subetiqueta como una expl3 ints 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 chemnumpaquete y aprender algo expl3de 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á:

Definición de compuesto con subsubetiqueta.

información relacionada