缩小节点中的文本,使得最小宽度和最小高度为节点的实际宽度和高度

缩小节点中的文本,使得最小宽度和最小高度为节点的实际宽度和高度

我想缩小节点中的文本,使得最小高度和宽度是节点的实际宽度和高度。

我找到了这个 将文本缩小到 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}并将其与\resizeboxgraphicx包,已由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}

结果

相关内容