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, 14:30

Bettina's gravatar image

Bettina
665181923
Akzeptiert-Rate: 25%

bearbeitet 28 Jul '13, 15:02

cgnieder's gravatar image

cgnieder
22.1k253463


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, 14:44

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 25 Jul '13, 08: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, 15: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, 17:19) cgnieder

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

(24 Jul '13, 19: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, 21:41) cgnieder

Ok, das mache ich heute Abend.

(25 Jul '13, 08:57) Bettina

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

(29 Aug '13, 16:47) cgnieder

@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, 17:49) Bettina
Ergebnis 5 von 7 show 2 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

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ügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×50
×41
×35

gestellte Frage: 24 Jul '13, 14:30

Frage wurde gesehen: 20,777 Mal

zuletzt geändert: 29 Aug '13, 17:49