我想缩小节点中的文本,使得最小高度和宽度是节点的实际宽度和高度。
我找到了这个
将文本缩小到 tikzpicture 中节点的宽度,但我不想首先生成n
该示例中的节点。
我需要类似的东西:
\begin{tikzpicture}
\tikzstyle{D}=[shape=diamond, draw, line width=0.2pt, minimum width=0.8cm, minimum height=0.8cm,inner sep = 0pt]
\node [D] (m) {\shrinktofitinnode{AAAAAAAA}{??}...{??};
\end{tikzpicture}
如果有人能帮助我,那就太好了。
有谁知道如何计算适合特定尺寸形状的最大文本框?
答案1
minimum width
您可以使用等获取键的值,\pgfkeysvalueof{/pgf/minimum width}
并将其与\resizebox
(graphicx
包,已由tikz
} 加载)一起使用以将内容调整为其大小。对于形状,diamond
您可能需要将宽度稍微减小一点(例如减小到 90%;对于高文本甚至减小到 50%),否则文本将接触线条。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\begin{document}
\begin{tikzpicture}[D/.style={shape=diamond, draw, line width=0.2pt, minimum width=0.8cm, minimum height=0.8cm,inner sep=0pt}]
\node [D] (m) {\setkeys{Gin}{keepaspectratio}\resizebox{\pgfkeysvalueof{/pgf/minimum width}}{\pgfkeysvalueof{/pgf/minimum width}}{AAAAAAAA}};
\node [D] (k) at (2,0) {\setkeys{Gin}{keepaspectratio}\resizebox{.9\dimexpr\pgfkeysvalueof{/pgf/minimum width}\relax}{.9\dimexpr\pgfkeysvalueof{/pgf/minimum height}\relax}{AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA}};
\end{tikzpicture}
\end{document}
您还可以使用adjustbox
轻松进行进一步调整,例如允许换行。类似的 TikZ 选项将无法正常工作,因为\resizebox
已使用。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage{adjustbox}
\begin{document}
\begin{tikzpicture}[D/.style={shape=diamond, draw, line width=0.2pt, minimum width=0.8cm, minimum height=0.8cm,inner sep=0pt}]
\node [D] (m) {\setkeys{Gin}{keepaspectratio}\resizebox{\pgfkeysvalueof{/pgf/minimum width}}{\pgfkeysvalueof{/pgf/minimum width}}{AAAAAAAA}};
\node [D] (k) at (2,0) {\adjustbox{varwidth={5cm}\centering,keepaspectratio,width=.9\dimexpr\pgfkeysvalueof{/pgf/minimum width}\relax,height=.9\dimexpr\pgfkeysvalueof{/pgf/minimum height}\relax}{AAAAAAAAAAAAAA\\BBBBBBBBBBBB\\CCCCCCCCC}};
\end{tikzpicture}
\end{document}
最后,还有一个min size
键,\adjustbox
仅在需要时(即内容太大)缩小内容,否则保持其原始大小。如果您更经常需要这样做,您可能需要定义一个快捷宏。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes}
\usepackage{adjustbox}
\newcommand{\adjsizetonode}{%
\adjustbox{varwidth={5cm}\centering,keepaspectratio,max size={.9\dimexpr\pgfkeysvalueof{/pgf/minimum width}\relax}{.9\dimexpr\pgfkeysvalueof{/pgf/minimum height}\relax}}%
}
\begin{document}
\begin{tikzpicture}[D/.style={shape=diamond, draw, line width=0.2pt, minimum width=0.8cm, minimum height=0.8cm,inner sep=0pt}]
\node [D] (A) at (0,0) {a};
\node [D] (A2) at (1,0) {\adjsizetonode{a}};
\node [D] (B) at (2,0) {\adjsizetonode{BBBBBBBBBBBBBBBBBB}};
\node [D] (B) at (3,0) {\adjsizetonode{BBBBBBBBBBBBBBBBBB\\bbbbbbbbbbbbb bbbbbbbb bbbb bbbb\\Bb bbfd kslkgldf }};
\end{tikzpicture}
\end{document}