Ich würde gerne die Antwort auf meine Frage um 90° gedreht mit der Antwort von runiq , die den Pfeil als -X> bezeichnet, so kombinieren, dass der untere Bogenpfeil vertikal gespiegelt wird und statt eines einfachen Reaktionspfeil hätte ich gerne ein Gleichgewichtspfeil. Um folgendes Ergebnis zu erhalten:

alt text

Das Ganze um 90° zu drehen, ist nicht mein Problem. Auch habe ich bereits die rechte Seite dank @Clemens Codes durch einfaches leer-lassen des entsprechenden Labels schon so, wie ich mir das annähernd wünsche. Allerdings fehlt mir noch die linke Seite.

Code

Open in writeLaTeX
\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{7}{<y>}{%
    % eventuelle Verschiebung:
    \CF@arrow@shift@nodes{#5}%
    % Bestimme Koordinaten für Gleichgewichtspfeile:
    \ifx\@empty#4\@empty
    \else
      \pgfmathsetmacro\CF@tmp@stra{(1-#4)/2}%
      \pgfmathsetmacro\CF@tmp@strb{(1-#4)/2+#4}%
    \fi
    \edef\CF@tmp@str{%
      \noexpand\path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)
        node[pos=0,sloped,yshift=1pt](\CF@arrow@start@node @u0){}
        node[pos=\ifx\@empty#4\@empty0\else\CF@tmp@stra\fi,sloped,yshift=-1pt]
          (\CF@arrow@start@node @d0){}
        node[pos=1,sloped,yshift=1pt](\CF@arrow@start@node @u1){}
        node[pos=\ifx\@empty#4\@empty1\else\CF@tmp@strb\fi,sloped,yshift=-1pt]
        (\CF@arrow@start@node @d1){};%
    }\CF@tmp@str
    % zeichne Hauptpfeile:
    \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@half]
      (\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1)node[midway](yarrow@arctangent){};%
    \expandafter\draw\expandafter[\CF@arrow@current@style,CF@half-]
      (\CF@arrow@start@node @d0)--(\CF@arrow@start@node @d1);%    % 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#6\@empty0.333\else#6\fi,
          start angle=\CF@arrow@current@angle-90,
          delta angle=-\ifx\@empty#7\@empty60\else#7\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#6\@empty0.333\else#6\fi,
          start angle=\CF@arrow@current@angle-90,
          delta angle=\ifx\@empty#7\@empty60\else#7\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{#5.}\@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[-90]
  A \arrow{<y>[% hier würde normalerweise a stehen, in diesem Bsp. wurde es gelöscht. So erhält meine nur eine Hälfte des Bogenpfeils.
  ][*{0}b][*{0}c]} B
\schemestop

\end{document}

gefragt 29 Mär '14, 15:31

Bettina's gravatar image

Bettina
665181923
Akzeptiert-Rate: 25%

bearbeitet 30 Mär '14, 11:06

Kann mir keiner helfen?

(09 Apr '14, 15:19) Bettina

Das ist nicht so trivial... ich hab mal was gebastelt, was aber nur manchmal funktioniert... deswegen hab ichs noch nicht gepostet. Ich kann die halbe Lösung aber mal als Antwort posten, wenn Du möchtest

(09 Apr '14, 18:12) cgnieder

@Clemens Fände ich interessant! Und Du hast ja schon Arbeit reingesteckt, so wäre sie nicht vergebens, wenn das schonmal gepostet ist. Bringt eigentlich die neue arrows.meta-Bibliothek`für chemfig-Pfeile Vorteile?

(09 Apr '14, 18:48) stefan ♦♦

Klar, würde ich mich über deine Antwort freuen, @Clemens. Auch wenn sie vielleicht nicht perfekt sein sollte, für mich ist es auf jeden Fall einen Versuch wert.

(09 Apr '14, 19:28) Bettina

@stefan ich hab mir die neue Bibliothek noch nicht wirklich angesehen... vielleicht.

(10 Apr '14, 17:35) cgnieder

Das folgende ist nur eine Teillösung. Ich definiere einen Pfeiltyp <x>, der vier optionale Argumente für die Beschriftung hat:

Open in writeLaTeX
\schemestart
  A \arrow{<x>[a][b][c][d]} B
\schemestop

\par\bigskip

\schemestart
  A \arrow{<x>[a][b][c][d]}[-90] B
\schemestop

Der Code ergibt folgendes (was die Schwäche sofort demonstriert):

alt text

Mit

Open in writeLaTeX
\schemestart
  A \arrow{<x>[][*{0}b][*{0.0}c]}[-90] B
\schemestop

erhält man aber wenigstens wie gewünscht

alt text

Hier ist der komplette Code:

Open in writeLaTeX
\documentclass{article}
\usepackage{chemfig}

\makeatletter
% Einen Pfeiltyp `<x>' mit 9 optionalen Argumenten definieren:
% \arrow{<x>[<Label Bogen oben Anfang>]%          #1
%           [<Label Bogen oben Ende>]%            #2
%           [<Label Bogen unten Anfang>]%         #3
%           [<Label Bogen oben Ende>]%            #4
%           [<Verhältnis Gleichgewichtspfeile>]%  #5
%           [<Pfeil Offset>]%                     #6
%           [<Quotient Bogenradius/Pfeillänge>]%  #7 % Default: 0.333
%           [<Hälfte Winkel des oberen Bogens>]%  #8 % Default: 60
%           [<Hälfte Winkel des unteren Bogens>]% #9 % Default: 60
% }
\definearrow{9}{<x>}{%
  % eventuelle Verschiebung:
  \CF@arrow@shift@nodes{#6}%
  % Bestimme Koordinaten für Gleichgewichtspfeile:
  \ifx\@empty#5\@empty
  \else
    \pgfmathsetmacro\CF@tmp@stra{(1-#5)/2}%
    \pgfmathsetmacro\CF@tmp@strb{(1-#5)/2+#5}%
  \fi
  \edef\CF@tmp@str{%
    \noexpand\path[allow upside down](\CF@arrow@start@node)--(\CF@arrow@end@node)
      coordinate[pos=0,sloped,yshift=1pt](\CF@arrow@start@node @u0)
      coordinate[pos=\ifx\@empty#5\@empty0\else\CF@tmp@stra\fi,sloped,yshift=-1pt]
        (\CF@arrow@start@node @d0)
      coordinate[pos=1,sloped,yshift=1pt](\CF@arrow@start@node @u1)
      coordinate[pos=\ifx\@empty#5\@empty1\else\CF@tmp@strb\fi,sloped,yshift=-1pt]
      (\CF@arrow@start@node @d1);%
  }\CF@tmp@str
  % zeichne Hauptpfeile:
  \expandafter\draw\expandafter[\CF@arrow@current@style,-CF@half]
    (\CF@arrow@start@node @u0)--(\CF@arrow@start@node @u1)
    coordinate[midway] (xuarrow@arctangent);%
  \expandafter\draw\expandafter[\CF@arrow@current@style,CF@half-]
    (\CF@arrow@start@node @d0)--(\CF@arrow@start@node @d1)
    coordinate[midway](xdarrow@arctangent);%
  % gibt es Label #1?
  \edef\CF@tmp@str{\ifx\@empty#1\@empty[draw=none]\fi}%
  % wenn ja, zeichne erste obere Bogenhälfte:
  \expandafter\draw\CF@tmp@str (xuarrow@arctangent)%
    arc[
      radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#7\@empty0.333\else#7\fi,
      start angle=\CF@arrow@current@angle-90,
      delta angle=-\ifx\@empty#8\@empty60\else#8\fi
    ]
    coordinate (xuarrow@start) ;
  % gibt es Label #2?
  \edef\CF@tmp@str{[\ifx\@empty#2\@empty draw=none,\fi-CF@full]}%
  % wenn ja, zeichne zweite obere Bogenhälfte:
  \expandafter\draw\CF@tmp@str (xuarrow@arctangent)%
    arc[
      radius=\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#7\@empty0.333\else#7\fi,
      start angle=\CF@arrow@current@angle-90,
      delta angle=\ifx\@empty#8\@empty60\else#8\fi
    ]
    coordinate (xuarrow@end) ;
  % gibt es Label #3?
  \edef\CF@tmp@str{\ifx\@empty#3\@empty[draw=none]\fi}%
  % wenn ja, zeichne erste untere Bogenhälfte:
  \expandafter\draw\CF@tmp@str (xdarrow@arctangent)%
    arc[
      radius=-\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#7\@empty0.333\else#7\fi,
      start angle=90-\CF@arrow@current@angle,
      delta angle=-\ifx\@empty#9\@empty60\else#9\fi
    ]
    coordinate (xdarrow@start) ;
  % gibt es Label #4?
  \edef\CF@tmp@str{[\ifx\@empty#4\@empty draw=none,\fi-CF@full]}%
  % wenn ja, zeichne zweite untere Bogenhälfte:
  \expandafter\draw\CF@tmp@str (xdarrow@arctangent)%
    arc[
      radius=-\CF@compound@sep*\CF@current@arrow@length*\ifx\@empty#7\@empty0.333\else#7\fi,
      start angle=90-\CF@arrow@current@angle,
      delta angle=\ifx\@empty#9\@empty60\else#9\fi
    ]
    coordinate (xdarrow@end) ;
  % Label platzieren; dafür müssen wir das Vorzeichen der Verschiebung kennen:
  \edef\CF@tmp@str{\if\string-\expandafter\@car\detokenize{#6.}\@nil-\else+\fi}%
  % platziere Label #1 und #2:
  \CF@arrow@display@label
    {#1}{0}{\CF@tmp@str}{xuarrow@start}
    {#2}{1}{\CF@tmp@str}{xuarrow@end}%
  % platziere Label #3 und #4:
  \edef\CF@tmp@str{\if\string-\expandafter\@car\detokenize{#6.}\@nil-\else+\fi}%
  \CF@arrow@display@label
    {#3}{0}{\CF@tmp@str}{xdarrow@start}
    {#4}{1}{\CF@tmp@str}{xdarrow@end}%
}
\makeatother

\begin{document}

\schemestart
  A \arrow{<x>[][*{0}b][*{0.0}c]}[-90] B
\schemestop

\end{document}
Permanenter link

beantwortet 10 Apr '14, 16:25

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

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:

×41

gestellte Frage: 29 Mär '14, 15:31

Frage wurde gesehen: 10,969 Mal

zuletzt geändert: 10 Apr '14, 17:35