Ich habe TikZ-Knoten mit mehrzeiligem Inhalt, und möchte auf einzelne Zeilen Bezug nehmen. Zum Beispiel hier möchte ich einen Linie von "Quitina" zu "Fructosa-6P" zeichnen:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
  \begin{tikzpicture}
    \node[draw, font=\sffamily, inner sep=0pt] (A) {%
      \begin{tabular}{@{}c@{}}
        Glucosamina \\
        \hline
        Quitina
      \end{tabular}};
    \node[right=of A, draw, font=\sffamily] (B) {Fructosa-6P};
    \draw (A) -- (B);
  \end{tikzpicture}
\end{document}

mehrzeilige TikZ-Knoten

Ich habe auch Nodes mit mehr Zeilen. Muss ich für jede Zeile einen node machen, oder kann ein node aus mehreren Teilen zusammengesetzt sein, die jeweils eigene Anker haben?

gefragt 05 Aug '13, 17:53

Felix's gravatar image

Felix
1.3k525666
Akzeptiert-Rate: 47%

bearbeitet 25 Aug '13, 13:55

cgnieder's gravatar image

cgnieder
22.1k253463


Ja, es gibt sogenannte „multipart nodes“.

Ein sehr allgemeines Shape ist das rectangle split-Shape der shapes.multipart library.

In deinem Beispiel benötigt man noch zusätzlich rectangle split part=2, da die Standardeinstellung 4 ist.

Ich habe außerdem noch \vphantom{Q} hinzugefügt, so dass beide Teile die gleiche Tiefe haben, was auch dazu führt, dass die Linie zwischen beiden Nodes direkt die Mitte trifft. Es gibt da allerdings noch andere Wege, so ist zum Beispiel auch extra ein Anchor, wo die horizontale Linie die Außenlinie des Nodes trifft: text split east.

Jede part hat zumindest einen Baseline-Anchor: .text, .two, .three, etc.

Code

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning,shapes.multipart}
\begin{document}
  \begin{tikzpicture}
    \node[draw, shape=rectangle split, rectangle split parts=2, font=\vphantom{Q}\sffamily] (A) {Glucosamina \nodepart{two} Quitina};
    \node[right=of A, draw, font=\sffamily] (B) {Fructosa-6P};
    \draw (A) -- (B);
  \end{tikzpicture}
\end{document}

Resultat

alt text

Permanenter link

beantwortet 05 Aug '13, 18:23

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k3815
Akzeptiert-Rate: 53%

Sehr gut! Den Sinn meiner Frage klarer zu machen, würde vllt. sein: \node[right=of A.two east, draw, font=\sffamily] (B) {Fructosa-6P};\draw (A.two east) -- (B);. Sowas hatte ich im Sinn. Falls es für die Allgemeinheit den Nutzen von multipart nodes besser zeigt.

(05 Aug '13, 18:31) Felix

@Felix Dachte ich mir fast, dass du mehr machen willst. (Edit: Du hast es ja sogar in deiner Frage beschrieben, sorry.) Vielleicht wäre es dann aber hilfreich Anchors wie A.two base east benutzen tu können, damit Quitina und Fructosa auf der gleiche Höhe sind? (Oder man sorgt mit einem \vphantom{Q} in dem B-Node, dass die Textboxen gleich groß sind. … Viele Wege führen zum Ziel.)

(05 Aug '13, 18:44) Qrrbrbirlbel
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:

×730
×76

gestellte Frage: 05 Aug '13, 17:53

Frage wurde gesehen: 54,502 Mal

zuletzt geändert: 25 Aug '13, 13:55