缩放节点的宽度以适应文本,同时保持最大宽度

缩放节点的宽度以适应文本,同时保持最大宽度

我的问题其实似乎很简单,如果这个问题之前已经回答过了,我很抱歉,我找不到它。也许我输入的关键词也错了。

现在的情况:

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

此处文本宽度已增加到 15em,因为之前节点换行文本太快,图形无法放在一页上,并且元素开始重叠。

在我的用例中,我希望有三个垂直图表彼此相邻,因此让 tikz 遵守最大宽度指令也很重要。我不能按原样使用text width=15em(或0.3\textwidth),因为当文本较短时,节点本身仍保持其宽度。

因此,本质上我想要一个节点:如果低于最大宽度,则根据文本长度调整大小,否则它将开始换行。此外,如果可能的话,无需太多努力,允许设置该宽度,如下所示:

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

或类似的,但最好不在样式定义中,也不在每个单独的 \node 中。

提前感谢大家的帮助:)

答案1

我不认为有一个简单的键可以做到这一点,但有些东西与此类似。此答案定义了一种样式max width node,它采用形式为的参数max width node={[<style>]{content}},并在以下 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}

在此处输入图片描述

请注意,这\tikzstyle已被弃用,并且通常需要最少的工作示例来回答问题。

相关内容