
Im Wesentlichen möchte ich der Nummerierung meiner Verbindungen eine „Unter-Unterbezeichnung“ hinzufügen chemnnum
.
Warum und wie genau ich das will
Ich beschreibe eine Reihe chiraler Verbindungen und nummeriere sie1a,1b, und so weiter. Manchmal habe ich auch ein anderes Diastereomer einer Verbindung: sagen wir1bhat in der 2. Position epimerisiert - ich würde es gerne nennen2-epi-1b(Präferenz des Vorgesetzten).
Wie ich es jetzt mache
Derzeit verwende ich nur vorhandene Referenzen für1bmit fettgedrucktem Präfix, wie folgt: \textbf{2-epi-}\refcmpd{one.b}
, aber ich finde, dass dies nicht praktisch und fehleranfällig ist.
Wie ich es gerne machen würde
Ich dachte daran, den entsprechenden Unterzähler direkt nach dem ersten um 1 zu verringern \cmpd{one.b}
und sofort eine epimerisierte Verbindung wie folgt zu deklarieren: \labelcmpd[pre-label-code=\textbf{2-epi-}]{one.b:epi}
. Leider habe ich erfahren, dass es keinen Unterzähler gibt, da chemnum
die aktuelle ID-Nummer des Unterlabels als expl3
int
s gespeichert wird und ich keine Ahnung habe, wie ich mit ihnen interagieren soll.
Die Fragen)
Ist es möglich, den internen Unterbezeichnungszähler manuell um 1 zu verringern chemnum
? Wenn ja, wie geht das? Oder gibt es vielleicht eine bessere/alternative Möglichkeit, eine „Unter-Unterbezeichnung“ in die Nummerierung meiner Verbindungen einzuführen?
Antwort1
Nachdem ich den Quellcode des chemnum
Pakets gelesen und etwas expl3
Programmieren gelernt hatte, kam ich auf eine Hack-Methode, um das zu tun. Ich habe einen neuen Befehl erstellt, der ein Label definiert (es aber nicht druckt, wie \lebelcmpd
), und ein gegebenes Label und Unterlabel nachahmt. Der Code:
\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
Auf diese Weise kann ich verschiedene/zusätzliche Optionen für ein scheinbar bereits verwendetes Label bereitstellen. Diese Methode erfordert ein neues Hauptlabel, da Optionen mit dem Hauptlabel verknüpft sind und nicht geändert werden können. Die Syntax lautet \sublabelcmpd[<options>]{<main ID>}{<sub ID>}{<new main ID>}
, die neue Verbindung kann dann einfach mit referenziert werden \cmpd{<new main ID>}{<sub ID>}
. Ein Beispiel:
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}.
wird herstellen: