Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

01 Jul '14, 00:12

cgnieder's gravatar image

cgnieder
22.1k253463

Eigentlich steht es im [`chemfig` Handbuch][1] beschrieben, und zwar in Teil III Abschnitt 12.5 *Draw a ploymer element* (Der Tippfehler steht da so, seit ich `chemfig` kenne...) Ich habe den Ansatz von dort ganz leicht abgeändert und definiere nachfolgend folgende Makros: \setpolymerdelim{<öffnende Klammer>}{<schließende Klammer>} Damit werden die Klammertypen festgelegt, die gewünscht werden, zum Beispiel `\setpolymerdelim[]` für eckige Klammern. \makepolymerbraces{<nach oben>}{<nach unten>}{<Anfangsknoten>}{<Endknoten>}{<Tiefstellung>} Damit werden die Klammern erzeugt. Die ersten zwei Argumente `{<nach oben>}{<nach unten>}` verlangen Längen (z.B. in pt), die angeben, wie weit die Klammern nach oben bzw. unten ausgedehnt werden sollen. Die nächsten zwei Argumente `{<Anfangsknoten>}{<Endknoten>}` beziehen sich auf Namen von TikZ-Knoten, darauf gehe ich gleich noch ein. Das letzte Argument `{<Tiefstellung>}` nimmt dann schließlich, was als Tiefstellung an die rechte Klammer soll. `chemfig` ermöglicht es, gezielt TikZ_Knoten TikZ-Knoten im Molekül zu platzieren, damit man darauf später zugreifen kann. Beschrieben ist das in Teil II Abschnitt 11 *Representing electron movements*. Wir verwenden hier die Syntax <Bindung>[@{<Knotenname>,<Platzierung>}] Es wird als also im optionalen Argument einer Bindung *als erstes* `@{}` geschrieben, in die Klammern schreibt man den gewünschten Knotennamen. Wenn man möchte, dann kann man noch ein Komma und eine Zahl eingeben. Die Zahl beschreibt die Platzierung auf der Bindung, `0` heipt am Anfang, heißt *am Anfang der Bindung*, `1` am Ende, *am Ende*, voreingestellt ist `0.5`, also die Mitte. Alles zusammen ergibt das dann das folgende: \documentclass{article} \usepackage{chemfig} % Polymer-Klammern: \makeatletter \newcommand*\setpolymerdelim[2]{\def\polymer@delimleft{#1}\def\polymer@delimright{#2}} \newcommand*\makepolymerbraces[5]{% \edef\polymer@delimhalfdim{\the\dimexpr(#1+#2)/2}% \edef\polymer@delimvshift{\the\dimexpr(#1-#2)/2}% \chemmove{ \node[at=(#4),yshift=(\polymer@delimvshift)] {$ \left\polymer@delimleft \vrule height\polymer@delimhalfdim depth\polymer@delimhalfdim width0pt \right. $}; \node[at=(#5),yshift=(\polymer@delimvshift)] {$ \left. \vrule height\polymer@delimhalfdim depth\polymer@delimhalfdim width0pt \right\polymer@delimright_{\rlap{#3}} $}; }% } \makeatother \begin{document} \setpolymerdelim[] \chemfig{-[@{b1},1.5]C(-[2]H)(-[6]H)-C(-[2]Cl)(-[6]H)-[@{b2},1.5]} \makepolymerbraces{40pt}{40pt}{$n$}{b1}{b2} \end{document} ![alt text][2] [1]: http://mirrors.ctan.org/macros/generic/chemfig/chemfig_doc_en.pdf [2]: http://texwelt.de/wissen/upfiles/pvc.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

30 Jun '14, 23:53

cgnieder's gravatar image

cgnieder
22.1k253463

Eigentlich steht es im [`chemfig` Handbuch][1] beschrieben, und zwar in Teil III Abschnitt 12.5 *Draw a ploymer element* (Der Tippfehler steht da so, seit ich `chemfig` kenne...) Ich habe den Ansatz von dort ganz leicht abgeändert und definiere nachfolgend folgende Makros: \setpolymerdelim{<öffnende Klammer>}{<schließende Klammer>} Damit werden die Klammertypen festgelegt, die gewünscht werden, zum Beispiel `\setpolymerdelim[]` für eckige Klammern. \makepolymerbraces{<nach oben>}{<nach unten>}{<Anfangsknoten>}{<Endknoten>}{<Tiefstellung>} Damit werden die Klammern erzeugt. Die ersten zwei Argumente `{<nach oben>}{<nach unten>}` verlangen Längen (z.B. in pt), die angeben, wie weit die Klammern nach oben bzw. unten ausgedehnt werden sollen. Die nächsten zwei Argumente `{<Anfangsknoten>}{<Endknoten>}` beziehen sich auf Namen von TikZ-Knoten, darauf gehe ich gleich noch ein. Das letzte Argument `{<Tiefstellung>}` nimmt dann schließlich, was als Tiefstellung an die rechte Klammer soll. `chemfig` ermöglicht es, gezielt TikZ_Knoten im Molekül zu platzieren, damit man darauf später zugreifen kann. Beschrieben ist das in Teil II Abschnitt 11 *Representing electron movements*. Wir verwenden hier die Syntax <Bindung>[@{<Knotenname>,<Platzierung>}] Es wird als im optionalen Argument einer Bindung *als erstes* `@{}` geschrieben, in die Klammern schreibt man den gewünschten Knotennamen. Wenn man möchte, dann kann man noch ein Komma und eine Zahl eingeben. Die Zahl beschreibt die Platzierung auf der Bindung, `0` heipt am Anfang, `1` am Ende, voreingestellt ist `0.5`, also die Mitte. Alles zusammen ergibt das dann das folgende: \documentclass{article} \usepackage{chemfig} % Polymer-Klammern: \makeatletter \newcommand*\setpolymerdelim[2]{\def\polymer@delimleft{#1}\def\polymer@delimright{#2}} \newcommand*\makepolymerbraces[5]{% \edef\polymer@delimhalfdim{\the\dimexpr(#1+#2)/2}% \edef\polymer@delimvshift{\the\dimexpr(#1-#2)/2}% \chemmove{ \node[at=(#4),yshift=(\polymer@delimvshift)] {$ \left\polymer@delimleft \vrule height\polymer@delimhalfdim depth\polymer@delimhalfdim width0pt \right. $}; \node[at=(#5),yshift=(\polymer@delimvshift)] {$ \left. \vrule height\polymer@delimhalfdim depth\polymer@delimhalfdim width0pt \right\polymer@delimright_{\rlap{#3}} $}; }% } \makeatother \begin{document} \setpolymerdelim[] \chemfig{-[@{b1},1.5]C(-[2]H)(-[6]H)-C(-[2]Cl)(-[6]H)-[@{b2},1.5]} \makepolymerbraces{40pt}{40pt}{$n$}{b1}{b2} \end{document} ![alt text][2] [1]: http://mirrors.ctan.org/macros/generic/chemfig/chemfig_doc_en.pdf [2]: http://texwelt.de/wissen/upfiles/pvc.png