最大幅を維持しながら、テキストに合わせてノードの幅を調整します。

最大幅を維持しながら、テキストに合わせてノードの幅を調整します。

私の問題は実は思われる簡単な質問なので、以前に回答されていたら申し訳ありませんが、見つけることができませんでした。キーワードも間違っていたのかもしれません。

現在の状況:

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

ここでは、テキストの幅が 15em に拡大されています。これは、以前はノードがテキストを非常に速く折り返していたため、グラフが 1 ページに収まらず、要素が重なり始めたためです。

私のユースケースでは、3 つの垂直グラフを並べて表示したいので、tikz に最大幅の指示を尊重させることも重要です。テキストが短い場合、ノード自体の幅がそのまま残るため、 text width=15em(または0.3\textwidth) をそのまま使用することはできません。

つまり、基本的に次のようなノードが必要です: 最大幅を下回る場合はテキストの長さに応じてサイズが変更され、それ以外の場合はテキストの折り返しが開始されます。また、可能であれば、次のようにして幅を設定できるようにします:

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

または同様のものですが、スタイル定義内や個々の \node 内ではない方が望ましいです。

ご協力をよろしくお願いします :)

答え1

それを実行する単純なキーがあるとは思いませんが、これに多少近いものがあります。この回答では、次の MWE の例を使用して、max width node形式の引数を取るスタイルを定義します。max width node={[<style>]{content}}

\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}

ここに画像の説明を入力してください

\tikzstyleは非推奨であり、通常は最小限の動作例に質問が付属することが予想されることに注意してください。

関連情報