
其實我的問題似乎很簡單,所以很抱歉,如果之前已經回答過這個問題,我無法找到它。也許我也有錯誤的關鍵字。
現在的情況:
\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
我認為沒有一個簡單的鍵可以做到這一點,但有一些與此類似的東西。這個答案定義了一個 style 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
已被棄用,並且通常最少的工作範例都會附帶問題。