Hallo!

Ich habe die Definition für den Reaktionspfeil im Internet gefunden:

\documentclass{article}
\usepackage{chemfig}
\newcommand*\circleatom[1]{\tikz\node[circle,draw]{\printatom{#1}};}

\makeatletter
\definearrow6{-y>}{%
    \CF@arrow@shift@nodes{#4}%
    \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@full](\CF@arrow@start@node)--(\CF@arrow@end@node)node[midway](yarrow@arctangent){};%
    \edef\CF@tmp@str{\ifx\@empty#1\@empty[draw=none]\fi}%
    \expandafter\draw\CF@tmp@str (yarrow@arctangent)%
        arc[radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#5\@empty0.333\else#5\fi,start angle=\CF@arrow@current@angle-90,%
        delta angle=-\ifx\@empty#6\@empty60\else#6\fi]node(yarrow@start){};
    \edef\CF@tmp@str{[\ifx\@empty#2\@empty draw=none,\fi-CF@full]}%
    \expandafter\draw\CF@tmp@str (yarrow@arctangent)%
        arc[radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#5\@empty0.333\else#5\fi,start angle=\CF@arrow@current@angle-90,%
        delta angle=\ifx\@empty#6\@empty60\else#6\fi]node(yarrow@end){};
    \edef\CF@tmp@str{\if\string-\expandafter\@car\detokenize{#4.}\@nil-\else+\fi}%
    \CF@arrow@display@label{#1}{0}\CF@tmp@str{yarrow@start}{#2}{1}\CF@tmp@str{yarrow@end}%
    \CF@arrow@display@label{#3}{0.5}-\CF@arrow@start@node{}{}{}\CF@arrow@end@node
}
\makeatother

\begin{document}

\schemestart
PEP
\arrow{-y>[*{0.180}\scriptsize{ADP}][*{0.180}\scriptsize{ATP}][*{0.180}{PykF, PykA}]}[-90,,thick]
Pyruvat
\schemestop

\end{document}

Allerdings ist die Definition für einen horizontalen Reaktionspfeil gedacht und nicht für einen vertikalen, so wie ich es verwende.

Wie kann ich die Beschriftung "PykF, PykA" nach links verschieben?

gefragt 24 Jul '13, 08:30

Bettina's gravatar image

Bettina
65541923
Akzeptiert: 83%

bearbeitet 28 Jul '13, 09:02

Clemens's gravatar image

Clemens
19.0k112960


neue Antwort:

es ist im Grunde ganz einfach: lass den 180-Grad-Anker weg:

\schemestart
  PEP
  \arrow{%
    -y>[*{0}\scriptsize{ADP}]%
       [*{0}\scriptsize{ATP}]%
       [*{0}{PykF, PykA}]%
     }[-90,,thick]
  Pyruvat
\schemestop

Damit wird das Label auf die linke Seite des Pfeils gesetzt. (Im Code unten habe ich mal ein paar Kommentare eingefügt, wie die Pfeildefinition funktioniert.)

Ergebnis

\documentclass{article}
\usepackage{chemfig}

\makeatletter
% Einen Pfeiltyp `-y>' mit 6 optionalen Argumenten definieren:
% \arrow{-y>[<Label Bogen Anfang>]%
%           [<Label Bogen Ende>]%
%           [<Label unterhalb>]%
%           [<Pfeil Offset>]%
%           [<Quotient Bogenradius/Pfeillänge>]% Default: 0.333
%           [<Hälfte Winkel des Bogens>]% Default: 60
% }
\definearrow{6}{-y>}{%
    % eventuelle Verschiebung:
    \CF@arrow@shift@nodes{#4}%
    % zeichne Hauptpfeil:
    \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@full]
      (\CF@arrow@start@node)--(\CF@arrow@end@node)node[midway](yarrow@arctangent){};%
    % gibt es Label #1?
    \edef\CF@tmp@str{\ifx\@empty#1\@empty[draw=none]\fi}%
    % wenn ja, zeichne Linke Bogenhälfte:
    \expandafter\draw\CF@tmp@str (yarrow@arctangent)%
        arc[
          radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#5\@empty0.333\else#5\fi,
          start angle=\CF@arrow@current@angle-90,
          delta angle=-\ifx\@empty#6\@empty60\else#6\fi
        ]
        node(yarrow@start){};
    % gibt es Label #2?
    \edef\CF@tmp@str{[\ifx\@empty#2\@empty draw=none,\fi-CF@full]}%
    % wenn ja, zeichne zweite Bogenhälfte:
    \expandafter\draw\CF@tmp@str (yarrow@arctangent)%
        arc[
          radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#5\@empty0.333\else#5\fi,
          start angle=\CF@arrow@current@angle-90,
          delta angle=\ifx\@empty#6\@empty60\else#6\fi
        ]
        node(yarrow@end){};
    % Label platzieren; dafür müssen wir das Vorzeichen der Verschiebung kennen:
    \edef\CF@tmp@str{\if\string-\expandafter\@car\detokenize{#4.}\@nil-\else+\fi}%
    % platziere Label #1 und #2:
    \CF@arrow@display@label{#1}{0}{\CF@tmp@str}{yarrow@start}{#2}{1}{\CF@tmp@str}{yarrow@end}%
    % platziere Label #3:
    \CF@arrow@display@label{#3}{0.5}{-}{\CF@arrow@start@node}{}{}{}{\CF@arrow@end@node}%
}
\makeatother

\begin{document}

\schemestart
  A \arrow{-y>[a][b][c]} B
\schemestop

\bigskip

\schemestart[-90]
  A \arrow{-y>[*{0}a][*{0}b][*{0}c]} B
\schemestop

\bigskip

\schemestart
  PEP
  \arrow{%
    -y>[*{0}\scriptsize{ADP}]%
       [*{0}\scriptsize{ATP}]%
       [*{0}{PykF, PykA}]%
     }[-90,,thick]
  Pyruvat
\schemestop

\end{document}

ursprüngliche Antwort:

Wenn Du die Zeile

\CF@arrow@shift@nodes{#4}%

hinter die Pfeildefinition setzt aber bevor die Label gesetzt werden, kannst Du das vierte Argument verwenden, um das Label zu verschieben. Das hat natürlich den Nachteil, dass man den Pfeil selbst damit nicht mehr verschieben kann.

Um das Label nach links zu schieben, könnte man dann eine negative Länge verwenden, oder man könnte das Label gar nicht verschieben und einen anderen Anker in Kombination mit \rotatebox verwenden: [*{180.180}{\rotatebox{180}{PykF, PykA}}].

Beides wird im folgende Code gezeigt:

\documentclass{article}
\usepackage{chemfig}

\makeatletter
\definearrow6{-y>}{%
    % \CF@arrow@shift@nodes{#4}% <= nicht hier
    \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@full]
      (\CF@arrow@start@node)--(\CF@arrow@end@node)node[midway](yarrow@arctangent){};%
    \edef\CF@tmp@str{\ifx\@empty#1\@empty[draw=none]\fi}%
    \expandafter\draw\CF@tmp@str (yarrow@arctangent)%
        arc[
          radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#5\@empty0.333\else#5\fi,
          start angle=\CF@arrow@current@angle-90,
          delta angle=-\ifx\@empty#6\@empty60\else#6\fi
        ]
        node(yarrow@start){};
    \edef\CF@tmp@str{[\ifx\@empty#2\@empty draw=none,\fi-CF@full]}%
    \expandafter\draw\CF@tmp@str (yarrow@arctangent)%
        arc[
          radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#5\@empty0.333\else#5\fi,
          start angle=\CF@arrow@current@angle-90,
          delta angle=\ifx\@empty#6\@empty60\else#6\fi
        ]
        node(yarrow@end){};
    \CF@arrow@shift@nodes{#4}% <= hier
    \edef\CF@tmp@str{\if\string-\expandafter\@car\detokenize{#4.}\@nil-\else+\fi}%
    \CF@arrow@display@label{#1}{0}\CF@tmp@str{yarrow@start}{#2}{1}\CF@tmp@str{yarrow@end}%
    \CF@arrow@display@label{#3}{0.5}-\CF@arrow@start@node{}{}{}\CF@arrow@end@node
}
\makeatother

\begin{document}

\schemestart
  PEP
  \arrow{%
    -y>[*{0.180}\scriptsize{ADP}]%
       [*{0.180}\scriptsize{ATP}]%
       [*{0.180}{PykF, PykA}]%
       [10pt]%
     }[-90,,thick]
  Pyruvat
\schemestop

\schemestart
  PEP
  \arrow{%
    -y>[*{0.180}\scriptsize{ADP}]%
       [*{0.180}\scriptsize{ATP}]%
       [*{180.180}{\rotatebox{180}{PykF, PykA}}]%
     }[-90,,thick]
  Pyruvat
\schemestop

\end{document}

Ergebnis eins

Ergebnis zwei

Permanenter link

beantwortet 24 Jul '13, 08:44

Clemens's gravatar image

Clemens
19.0k112960

bearbeitet 25 Jul '13, 02:47

Leider funktioniert es nicht mit dem Zeilenumbruch aus meiner anderen Fragen (http://texwelt.de/wissen/fragen/904/zeilenumbruch-in-der-beschriftung-von-reaktionpfeil-in-chemfig)

[*{180.180}{\rotatebox{180}\stack{PykF,\\PykA}}]

Jetzt steht es auf dem Kopf.

(24 Jul '13, 09:30) Bettina
1

@Bettina Da fehlt eine Klammer: [*{180.180}{\rotatebox{180}{\stack{PykF,\\PykA}}}]. Wahrscheinlich solltest Du auch das optionale Argument zu \stack benutzen, um die Breite anzupassen.

(24 Jul '13, 11:19) Clemens

Sorry, ich hab schon wieder eine Frage. Wie mache ich aus dem Reaktionspfeil ein Gleichgewichtspfeil? Also so etwas wie <=y>?

(24 Jul '13, 13:23) Bettina

@Bettina kannst Du das als neue Frage stellen? Der Kommentarbereich eignet sich für eine Antwort auf die Frage nicht...

(24 Jul '13, 15:41) Clemens

Ok, das mache ich heute Abend.

(25 Jul '13, 02:57) Bettina

@Bettina hat sich Deine Frage bezüglich eines <=y> Pfeils eigentlich erledigt?

(29 Aug '13, 10:47) Clemens

@Clemens Danke der Nachfrage! Ich stecke gerade in der Diplomarbeit und deshalb bin ich leider noch nicht dazu gekommen, die Frage zu formulieren. Nichts desto trotz hat sich die Frage noch nicht für mich erledigt. Ich muss sehen, wann ich es schaffe, sie zu stellen.

(29 Aug '13, 11:49) Bettina
Ergebnis 5 von 7 Alle anzeigen
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×44
×27
×27

Frage gestellt: 24 Jul '13, 08:30

Frage wurde angeschaut: 13,330 Mal

Zuletzt aktualisiert: 29 Aug '13, 11:49