Добавляете третий уровень различения соединений в chemnum?

Добавляете третий уровень различения соединений в chemnum?

По сути, я хотел бы добавить «под-подметку» к нумерации моих соединений, используя chemnnum.

Почему и как именно я этого хочу

Я описываю ряд хиральных соединений, нумеруя их,и т. д. Иногда у меня есть еще один диастереомер соединения: скажем,эпимеризировался во 2-й позиции - я хотел бы назвать его2-эпи-1б(по усмотрению руководителя).

Как я это делаю сейчас

В настоящее время я просто повторно использую существующие ссылки нас жирным префиксом, например: \textbf{2-epi-}\refcmpd{one.b}, но я считаю, что это неудобно и подвержено ошибкам.

Как бы я хотел это сделать

Я думал об уменьшении соответствующего подсчетчика на 1 сразу после первого \cmpd{one.b}и немедленном объявлении эпимеризованного соединения следующим образом: \labelcmpd[pre-label-code=\textbf{2-epi-}]{one.b:epi}. К сожалению, я узнал, что подсчетчика нет, поскольку chemnumон хранит текущий идентификационный номер подметки как expl3 ints, и я понятия не имею, как с ними взаимодействовать.

Вопросы)

Можно ли вручную уменьшить внутренний счетчик подметок на 1 в chemnum? Если да, то как это сделать? Или, может быть, есть лучший/альтернативный способ ввести «под-подметку» в нумерацию моих соединений?

решение1

Прочитав исходный код chemnumпакета и немного изучив expl3программирование, я придумал хакерский способ сделать это. Я создал новую команду, которая определяет метку (но не печатает ее, как \lebelcmpd), имитируя заданную метку и подметку. Код:

\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

Таким образом, я могу предоставить различные/дополнительные опции для того, что кажется ранее использованной меткой. Этот метод требует новую основную метку, поскольку опции связаны с основной меткой и не могут быть изменены. Синтаксис такой \sublabelcmpd[<options>]{<main ID>}{<sub ID>}{<new main ID>}, на новое соединение можно просто ссылаться с помощью \cmpd{<new main ID>}{<sub ID>}. Приведем пример:

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

будет производить:

Определение соединения с подподметкой.

Связанный контент