Skalieren Sie die Breite eines Knotens, um ihn an den Text anzupassen und gleichzeitig die maximale Breite beizubehalten

Skalieren Sie die Breite eines Knotens, um ihn an den Text anzupassen und gleichzeitig die maximale Breite beizubehalten

Mein Problem eigentlichscheinteinfach, also entschuldigen Sie, wenn dies schon einmal beantwortet wurde, ich konnte es nicht finden. Vielleicht hatte ich auch die falschen Schlüsselwörter.

Momentane Situation:

\tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=15em, text centered, rounded corners, minimum height=5em]

Hier wurde die Textbreite auf 15em erhöht, da die Knoten den Text zuvor so schnell umbrochen haben, dass die Grafik nicht auf eine Seite passte und die Elemente begannen, sich zu überlappen.

In meinem Anwendungsfall möchte ich drei vertikale Diagramme nebeneinander haben, daher ist es wichtig, dass Tikz auch die Anweisung zur maximalen Breite beachtet. Ich kann text width=15em(oder 0.3\textwidth) nicht so verwenden, wie es ist, denn wenn der Text kurz ist, behält der Knoten selbst immer noch seine Breite.

Im Wesentlichen möchte ich also einen Knoten, der: Wenn er unter der maximalen Breite liegt, die Größe entsprechend der Textlänge anpasst, andernfalls den Text umbricht. Außerdem sollte, wenn möglich ohne allzu großen Aufwand, die Einstellung dieser Breite möglich sein, und zwar wie folgt:

\begin{figure}[htbp]
    \centering
    \begin{tikzpicture}[node distance = 2cm, auto, maximum-width=0.3\textwidth]
...

oder ähnlich, aber vorzugsweise nicht in der Stildefinition und nicht in jedem einzelnen \node.

Danke schonmal für jede Hilfe :)

Antwort1

Ich glaube nicht, dass es einen einfachen Schlüssel gibt, der das tut, aber es gibt etwas, das dem ziemlich nahe kommt. Diese Antwort definiert einen Stil max width node, der Argumente der Form annimmt max width node={[<style>]{content}}, mit Beispielen im folgenden MWE:

\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc}
\tikzset{max width node/.style args={[#1]#2}{insert path={
node[#1,opacity=0,overlay](tst){#2}
let \p1=($(tst.east)-(tst.west)$),
    \n1={ifthenelse(\x1>\pgfkeysvalueof{/tikz/max width},1,0)}
in
\ifdim\n1>0pt
  node[#1,text width=\pgfkeysvalueof{/tikz/max width}-4pt]{#2}
\else
  node[#1]{#2}
\fi
}},max width/.initial=5em}
\begin{document}
\begin{tikzpicture}[block/.style={rectangle, draw, fill=blue!20, text centered, rounded corners, minimum height=5em}]
 \path (0,0) [max width node={[block]{pft}}]
  (0,-5) [max width node={[block]{pft pft pft pft pft pft pft pft pft pft
  pft pft pft pft pft pft pft pft pft pft 
  pft pft pft pft pft pft pft pft pft pft}}];
 \path (5,0) [max width node={[block,max width=7em]{pft}}]
  (5,-5) [max width node={[block,max width=7em]{pft pft pft pft pft pft pft pft pft pft
  pft pft pft pft pft pft pft pft pft pft 
  pft pft pft pft pft pft pft pft pft pft}}];
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Bitte beachten Sie \tikzstyle, dass dies veraltet ist und normalerweise mit Fragen nur minimale funktionierende Beispiele einhergehen.

verwandte Informationen