Gibt es eine Möglichkeit einen Zeilenumbruch in der Beschriftung für Reaktionspfeile bei dem Paket chemfig einzufügen?

gefragt 24 Jul '13, 14:38

Bettina's gravatar image

Bettina
665181923
Akzeptiert-Rate: 25%

bearbeitet 25 Sep '13, 18:52

saputello's gravatar image

saputello
11.1k174365


Du könntest den Inhalt des Labels in eine \parbox setzen:

Öffne in Overleaf
\documentclass{article}
\usepackage{chemfig}
\begin{document}

\schemestart
 A \arrow{->[\parbox{5cm}{\centering a\\b}][c]} B
\schemestop

\end{document}

Beispiel eins

oder zur Bequemlichkeit einen Befehl definieren, der das für Dich macht:

Öffne in Overleaf
\documentclass{article}
\usepackage{chemfig}

\newcommand\stack[2][5cm]{\parbox{#1}{\centering#2}}

\begin{document}

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

\end{document}

Eine zweite Möglichkeit ohne Argument für die Breite wäre, eine {tabular} Umgebung zu verwenden (Dank an @saputello für den Hinweis):

Öffne in Overleaf
\documentclass{article}
\usepackage{chemfig}

\newcommand\stack[1]{\begin{tabular}{@{}c@{}}#1\end{tabular}}

\begin{document}

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

\end{document}

Die Label sind TikZ-Knoten. Wenn man es also schaffte, ihnen die Option align=center hinzuzufügen, dann bräuchte man die \parbox oder die {tabular}-Umgebung nicht. Leider stellt chemfig keine Schnittstelle bereit, um ihre Eigenschaften direkt zu ändern. Die Knoten werden durch den Befehl \CF@arrow@display@label@a gesetzt, den man umdefinieren könnte. Anstelle der manuellen Neu-Deufinition ist aber ein Patch mit der Hilfe von regexpatch Paket leichter:

Öffne in Overleaf
\documentclass{article}
\usepackage{chemfig}
\usepackage{regexpatch}
\makeatletter
% \xpatchcmd{<cmd>}{<search>}{<replace>}{<success>}{<failure>}
% die Sternvariante ersetzt alle Vorkommnisse von <search>
\xpatchcmd*\CF@arrow@display@label@a{node[}{node[align=center,}{}{}
\makeatother

\begin{document}

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

\end{document}
Permanenter link

beantwortet 24 Jul '13, 14:51

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 15 Apr '17, 11:09

Das ist die Übersetzung meiner Antwort auf TeX.sx zu einer ähnlichen Frage.

(24 Jul '13, 14:52) cgnieder

Super, vielen Dank! Für mich funktioniert folgende Lösung super:

\makeatletter
\newcommand\stack[2][5cm]{\parbox{#1}{\centering#2}}
\makeatother
(24 Jul '13, 15:17) Bettina

@Bettina ich habe Deine Antwort in einen Kommentar zu Clemens Antwort umgewandelt. Zur Info, diese Seite funktioniert etwas spezieller als Foren, wo man hintereinander wegschreibt: oben steht eine Frage, unten stehen Antworten - auf diese Frage. Bemerkungen gehen noch als Kommentare zu schreiben. Das stellt Lösungen besser dar für spätere Leser.

(24 Jul '13, 15:31) stefan ♦♦

@Clemens: \makeatletter und \makeatother sind bei der Definition von \stack überflüssig. Das optionale Argument für die Breite kann man sich sparen, wenn man die \parbox durch eine tabular ersetzt:

\newcommand\stack[1]{\begin{tabular}{@{}c@{}}#1\end{tabular}}

alternativ kann man auch eine varwidth-Umgebung mit dem varwidth-Paket verwenden, braucht dann aber wieder ein Argument für die maximale Breite.

(24 Jul '13, 18:03) saputello

@saputello komisch, \makeatletter ist mir gar nicht aufgefallen... muss ein Überbleibsel eines anderen Versuchs sein... werde ich rauslöschen. tabular ist eine gute Idee!

(24 Jul '13, 18:05) cgnieder
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:

×45
×41
×35
×20

gestellte Frage: 24 Jul '13, 14:38

Frage wurde gesehen: 15,110 Mal

zuletzt geändert: 15 Apr '17, 11:09