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, 11:53

Felix's gravatar image

Felix
1.3k225366
Akzeptiert: 89%

bearbeitet 25 Aug '13, 07:55

Clemens's gravatar image

Clemens
19.0k113060


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, 12:23

Qrrbrbirlbel's gravatar image

Qrrbrbirlbel
2.9k1415

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, 12: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, 12:44) Qrrbrbirlbel
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:

×492
×51

Frage gestellt: 05 Aug '13, 11:53

Frage wurde angeschaut: 45,608 Mal

Zuletzt aktualisiert: 25 Aug '13, 07:55