Seite 1 von 2

Problem mit mhchem in nummerierungs-macro

Verfasst: Do 8. Okt 2009, 19:04
von Lukasnikan
hallo zusammen,

ich nummeriere nach folgendem macro meine chemische Verbindungen. Diese habe ich mit Erlaubnis aus den Forenbeiträgen kopiert. Es erleichtert enorm, weil ich in einem externen File die komplete chemische Bezeichnung, einen Nickname und die Strukturformel einem laufenden nummer zuweisen und überall die aufrufen kann.
\usepackage[user]{zref}
\pdfadjustspacing=1
\makeatletter
\newcounter{verbnr}
\zref@newprop*{vname}{}
\zref@newprop*{vnr}{}
\zref@newprop*{vform}{}
\zref@addprop{main}{vname}
\zref@addprop{main}{vnr}
\zref@addprop{main}{vform}
\def\Verbindung#1#2#3{%
   \stepcounter{verbnr}%
   \zref@setcurrent{vname}{#2}%   
   \zref@setcurrent{vnr}{\textbf{\arabic{verbnr}}}%
    \zref@setcurrent{vform}{#3}%   
   \zref@wrapper@immediate{\zref@label{verb:#1}}%
}
\def\getname#1{%
   \zref@extract{verb:#1}{vname}%
}
\def\getnr#1{%
   \zref@extract{verb:#1}{vnr}%
}
\def\getform#1{%
   \zref@extract{verb:#1}{vform}%
}
\makeatother
ich benutze in dem Feld vform die mhchem packet. alles geht gut.
ich muss noch aber Dreifachbindungen noch schreiben.
Die Kommando von mhchem \cf{#} liefert das Gewünschte.
ich bekomme aber folgende Fehlern:
1. Illegal parameter number in definition of \Z@C@vform.
2. Illegal parameter number in definition of \reserved@a

kann mir jemand helfen bitte?

Illegal parameter number

Verfasst: Do 8. Okt 2009, 20:29
von Stefan Kottwitz
Hallo,

der Fehler bedeutet, dass Aufrufparameter nicht zur Definition passen, etwa wenn man auf Parameter #3 zugreift, jedoch nur 2 Parameter definiert sind. Er kann auch bei inkorrekter Schachtelung von Definitionen entstehen, wenn man innere Makros mit nicht mehreren #-Symbolen angibt wie vorgesehen.

Stefan

danke aber..

Verfasst: Do 8. Okt 2009, 22:35
von Lukasnikan
Danke für die schnelle Reaktion, und Hilfestellung.

habe ich es richtig verstanden, für meinen Macro:

dass ich bei den parameter #3 die mhchem benutze ist o.k.
aber die angabe für dreifachbindung kollidiert mit der Verschachtelung?

ich gebe immer drei parameter ein, der vierte (hier #1) ist die durch den counter vergebene.
ich bekomme auch eigenlich das richtige raus. nur werden nach 40 verbindungen die fehler so viel, dass es nicht weiter geht.

ich glaube, ich versteh es immer noch nicht richtig. dabei ist dieses macro das traum für jeden chemiearbeit. und wenn es richtig läuft, das absolute argument nicht mit word zu schreiben.

danke erstmal

Minimalbeispiel

Verfasst: Do 8. Okt 2009, 22:45
von Stefan Kottwitz
Ohne Minimalbeispiel, das den Fehler produziert, lässt sich das kaum nachvollziehen. Der obige Code-Ausschnitt produziert für sich genommen keinen Fehler.

Stefan

mini beispiel

Verfasst: Fr 9. Okt 2009, 18:06
von Lukasnikan
vielen vielen Dank für den Support.
ich tue den Beispieldatei in anhang.

ich wäre so froh, wenn ich weiter schreiben könnte.

Verfasst: Fr 9. Okt 2009, 20:06
von phi
Ich bekomme bereits beim gemeinsamen Laden einer KOMA-Script-Klasse, siunitx und chemstyle eine Fehlermeldung:
\documentclass{scrartcl}
\usepackage{siunitx}
\usepackage{chemstyle}
\begin{document}
\null
\end{document}
Offenbar sind diese drei Komponenten nicht miteinander kompatibel. Ich werde den Bug melden.

Illegal parameter number in definition

Verfasst: Fr 9. Okt 2009, 20:45
von Stefan Kottwitz
Die beiden weiter oben zitierten Fehler liegen an dem hier verwendeten #-Symbol:
\Verbindung{Sn}{IUPAC-Name}{SnC#C(N\iPr2)2}
... \textbf{\ce{SnC#C(N\iPr2)2}} ...
Stefan

genau, aber ich brauche den #

Verfasst: Sa 10. Okt 2009, 00:00
von Lukasnikan
hi,

nur mit \cf{#} kann ich die benötigte dreifach Bindung erzeugen.
Bei mhchem stehen noch andere Befehle, aber die haben alle nicht funktioniert.
Warum geht es auf dem Ausdruck aber trotzdem?
Ich habe noch keine Alternative für den mhchem packet.

einen Vorschlag was ich machen soll?

Re: genau, aber ich brauche den #

Verfasst: Sa 10. Okt 2009, 00:18
von Stefan Kottwitz
Lukasnikan hat geschrieben: nur mit \cf{#} kann ich die benötigte dreifach Bindung erzeugen.
Ich sehe kein \cf{#} sondern \cf{#3}.
Und was hat das mit dem Problem des # in SnC#C(N\iPr2)2 zu tun?

Stefan

Verfasst: Sa 10. Okt 2009, 10:27
von Lukasnikan
durch das Packet mhchem kann man einen Dreifachbindung durch folgende Möglichkeiten erzeugen:

- \ce{#}
- \ce{\bond{#}}
- \ce {\tbond}
statt \ce kann wohl auch \cf benutzt werden.

In dem Macro funktioniert nur die Kombination von \cf{#}, ich habe alle ausprobiert.
Für den Macro gebe ich drei Parameter ein, ist das so richtig ausgedruckt?
diese werden mit #1, #2 und #3 bezeichnet, so weit ich es verstehe. und mit dem laufenden nummer verbunden.
#1 ist der von mir vergebene nickname,
#2 ist die sehr lange unpraktische chemische bezeichnung,
und in dem Feld #3 möchte ich die Strichformel schreiben.
Diese Parameter kommen alle in den geschweiften Klammern.

Bei der Strichformel brauche ich die Ausdrucke von mhchem.
Es wäre vielleicht auch kein Problem, wenn es mit der \tbond ginge, aber das tut es nicht.
Ich habe bei der Macro-Zeile:
\zref@setcurrent{vnr}{\textbf{\arabic{verbnr}}}%
angegeben, dass die Ausgabe arabische Zahl und Fettgedruckt sein soll.

Also dachte ich, es wäre auch möglich für den Parameter #3, also die Strichformel gleich anzugeben, dass es mit dem Packet mhchem umgesetzt werden soll. Somit habe ich \cf schon da rein geschrieben.
\zref@setcurrent{vform}{\cf{#3}}

sonst muss ich diese \cf immer bei Angabe der Parameter mit in den geschweifte Klammern setzten, wie zum Beispiel hier:
\Verbindung{nickname}{lange Name}{\cf{Strich#formel}}
Beides führt zum gleichen Ergebnis.

Ich habe schon verstanden, dass die Raute das Problem ist.
Ich suche jetzt nach anderen Chemie Packete, die eventuell anders die Bindungen darstellen, habe noch nichts gefunden.

Und ich weis auch nicht, wie ich diesen tollen Macro ändern kann. Ich habe es doch schon in Foren gefunden, mit Erlaubnis kopiert und nach logischen Denken einfach um den Variablen #3 erweitert.