Ich bin überfordert. Wie muss ich das richtig einstellen, dass Text eine rechteckigen node, bis auf einen gewählten inner sep, voll ausnimmt, in der Breite und, je nach Textumfang, auch in der Höhe?

alt text

\documentclass{article}
\usepackage{tikz}
% \usetikzlibrary{calc}

\pgfmathsetlengthmacro\breite{4cm}
\pgfmathsetlengthmacro\hoehe{2.567cm}
\pgfmathsetlengthmacro\InnerSep{0.4cm}

\begin{document}
\begin{tikzpicture}[]
\node[draw,
anchor=center, 
inner sep=0pt, 
minimum width=\breite, text width=\breite-\InnerSep, 
minimum height=\hoehe, 
text depth=\hoehe-\InnerSep, 
%text height=\hoehe-\InnerSep, % klappt nicht
] (A) {Das ist der Text in der node. 
Das ist der Text in der node. 
Das ist der Text in der node. 
%Das ist der Text in der node. 
};

\draw[red] (A.north west) -- +(\breite,0);
\draw[blue] ([xshift=0.5*\InnerSep]A.north west) -- +(\breite-0.5*\InnerSep,0) node[midway, above]{komisch};
\draw[green] (A.north west) -- +(0,-\hoehe+\InnerSep);
\end{tikzpicture}
\end{document}

gefragt 05 Mär, 15:18

coversin's gravatar image

coversin
916
Akzeptiert-Rate: 50%

Wenn Du inner sep selber bestimmst, dann sollte der Option auch die Länge \InnerSep statt 0pt zugewiesen werden.

Die gesuchte Höhe müsste sich einstellen, wenn Du minimum height und text depth entfernst.

Sofern ich nichts übersehen habe, kannst Du die Beschriftung auch mit label={[text=blue]komisch} hinzufügen.

(05 Mär, 16:54) Bartman

Von Versuchen, schmale Textspalten in Blocksatz zu bringen, rate ich dringend ab. Das funktioniert nie wirklich gut. Je nach Zweck des ganzen kann man ggf. die Zeilen horizontal zentrieren. Oftmals ist das gezeigte linksbündige Ergebnis aber auch das Optimum.

(05 Mär, 16:58) Ijon Tichy

Achso, ja die Höhe soll schon fest eingestellt sein und nicht automatisch angepasst werden. Am inner sep werde ich noch etwas rumtesten.

(05 Mär, 19:47) coversin

Wenn ich dich richtig verstehe, hättest du zunächst einmal gerne Blocksatz, damit der Text links und rechts bündig mit dem Node abschließt. Generell ist Blocksatz mit Option align=justify zu erreichen:

\documentclass{article}
\usepackage[ngerman]{babel}% Wenn wir deutschen Beispieltext verwenden, wählen
                           % wir natürlich auch die Sprache passend.
\usepackage{tikz}

\pgfmathsetlengthmacro\breite{4cm}
\pgfmathsetlengthmacro\hoehe{2.567cm}
\pgfmathsetlengthmacro\InnerSep{0.4cm}

\begin{document}
\begin{tikzpicture}[]
\node[draw,
anchor=center, 
inner sep=0pt, 
minimum width=\breite, text width=\breite-\InnerSep,
align=justify,
minimum height=\hoehe, 
text depth=\hoehe-\InnerSep, 
] (A) {Das ist der Text in der node. 
Das ist der Text in der node. 
Das ist der Text in der node. 
};

\draw[red] (A.north west) -- +(\breite,0);
\draw[blue] ([xshift=0.5*\InnerSep]A.north west) -- +(\breite-0.5*\InnerSep,0) node[midway, above]{komisch};
\draw[green] (A.north west) -- +(0,-\hoehe+\InnerSep);
\end{tikzpicture}
\end{document}

Blocksatz

Allerdings sollte man davon bei so schmalen Nodes und generell in schmalen Spalten absehen, weil das Ergebnis dabei fast nie gut wird. Ich empfehle stattdessen, Text wirklich eher linksbündig oder horizontal zentriert zu setzen. Auch das geht über Option align. Siehe dazu Abschnitt »17.4.3 Text Parameters: Alignment and Width for Multi-Line Text« in der pgf/TikZ-Anleitung. Man kann Text auch mit Option text centered horizontal zentrieren. Siehe auch: Wie kann man bei TikZ Text in einem node zentrieren?.

Vertikal kann pgf/TikZ natürlich keinen Text dazu erfinden. Mit ist daher nicht klar, wie der Node vertikal gefüllt werden sollte. Die Zeilen auseinander zu ziehen wäre ebenfalls nicht gut. Ich könnte mir allenfalls eine vertikale Zentrierung vorstellen. Das macht TikZ automatisch, wenn du Option text depth entfernst:

\documentclass{article}
\usepackage[ngerman]{babel}% Wenn wir deutschen Beispieltext verwenden, wählen
                           % wir natürlich auch die Sprache passend.
\usepackage{tikz}

\pgfmathsetlengthmacro\breite{4cm}
\pgfmathsetlengthmacro\hoehe{2.567cm}
\pgfmathsetlengthmacro\InnerSep{0.4cm}

\begin{document}
\begin{tikzpicture}[]
\node[draw,
anchor=center, 
inner sep=0pt, 
minimum width=\breite, text width=\breite-\InnerSep,
align=justify,
minimum height=\hoehe
] (A) {
  Das ist der Text in der node. 
Das ist der Text in der node. 
Das ist der Text in der node.
};

\draw[red] (A.north west) -- +(\breite,0);
\draw[blue] ([xshift=0.5*\InnerSep]A.north west) -- +(\breite-0.5*\InnerSep,0) node[midway, above]{komisch};
\draw[green] (A.north west) -- +(0,-\hoehe+\InnerSep);
\end{tikzpicture}
\end{document}

Blocksatz vertikal zentriert

Permanenter link

beantwortet 05 Mär, 17:26

Ijon%20Tichy's gravatar image

Ijon Tichy
10.6k31532
Akzeptiert-Rate: 52%

bearbeitet 28 Mär, 18:01

stefan's gravatar image

stefan ♦♦
16.8k92947

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:

×705
×73
×24

gestellte Frage: 05 Mär, 15:18

Frage wurde gesehen: 1,027 Mal

zuletzt geändert: 05 Mär, 19:48