我的问题其实似乎很简单,如果这个问题之前已经回答过了,我很抱歉,我找不到它。也许我输入的关键词也错了。
现在的情况:
\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
已被弃用,并且通常需要最少的工作示例来回答问题。