为 latex tikz 中的样式设置固定的高度和宽度

为 latex tikz 中的样式设置固定的高度和宽度

我在 latex 中有一个矩形样式,我想固定它的大小。但是在设置中我只能设置最小宽度和最小高度。这是我的样式;

direct/.style={rectangle, minimum height =4 cm, rounded corners=4.4mm, minimum width=10 cm, fill=red!15, draw,thick,},

然后这个形状的大小会根据其中的文本而变化。我想要一个恒定的矩形。你知道我该如何解决这个问题吗?谢谢

答案1

Anis 的评论已经告诉了你很多。作为补充,我想提一下如果你的节点中确实有内容并且希望拥有同质大小的几种可能性。由于不知道你的背景和需求,我的只是猜测。希望它能作为一个起点。

  • 您可以使用text width设置为minimum width(或略小)并让 TikZ 换行您的文本(要更改对齐方式,请使用键align)。这种方法可以防止节点内容(如果太长)超过所需的最小宽度,但不能防止高度超过所需的最小宽度。
  • 然后,您可以定义一种样式来手动缩放字体,例如使用relsize包。您可以在需要时使用此样式手动减少节点内容。不过,这需要一些微调。
  • 你可以通过获得灵感来自动化之前的方法这里。我在下面的示例中选取了其中一个答案。这个想法是自动缩放节点内容以适应框,而该框又适合您的节点所需大小。

作为一般建议,您可以大致查看 PGF 手册,也许从 TikZ 的简单介绍开始,以获得一般概述。这两个文档都是这里

这是一个概念证明。

\documentclass[border=1mm]{standalone}
\usepackage{tikz,lipsum,environ,relsize}
\usetikzlibrary{positioning}

\newcommand{\fixedWidth}{10cm}
\newcommand{\fixedHeigth}{4cm}

\tikzset{
    direct/.style={
        rectangle,
        minimum height=\fixedHeigth,
        minimum width=\fixedWidth,
        rounded corners=4.4mm,
        fill=red!15,
        draw,
        thick
    },
    fontsmaller/.style={font=\smaller[#1]}
}

% Taken from https://tex.stackexchange.com/a/26004/128737
\makeatletter
\NewEnviron{fitbox}[2]{%
    \minipage{#1}%
    \sbox0{\minipage{#1}\strut\BODY\strut\endminipage}%
    \Gscale@div\factor{#2}{\dimexpr\ht0+\dp0\relax}%
    \relscale{\factor}%
    \BODY
    \endminipage
}
\makeatother

\begin{document}
    \begin{tikzpicture}
        \node [direct] (N1) {Short};
        \node [direct, below = of N1] (N2) {
            Very long text whose width exceeds the specified minimum
            width of the node and hence the desired shape
        };
        \node [direct, below = of N2, text width=10cm] (N3) {\lipsum[1-2]};
        \node [direct, below = of N3, text width=10cm, fontsmaller=3.5] (N4) {\lipsum[1-2]};
        \node [direct, below = of N4, text width=10cm] {
            \begin{fitbox}{\fixedWidth}{\fixedHeigth}
                \lipsum[1-2]
            \end{fitbox}
        };
    \end{tikzpicture}
\end{document}

结果

答案2

另一种选择是将文本排版为固定形状,并且不告诉 TiZ. 如果文本不适合,它就会泄漏......

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{tikz}
\newcommand{\FixedSizeText}[3]{% width, height
    \begin{minipage}[c][#2][c]{#1}%
        #3%
    \end{minipage}%
}
\begin{document}
\begin{tikzpicture}[]
    \tikzset{my rect/.style={
        rectangle, draw=red, inner sep=0pt, rounded corners},
    }
    \path (0,0) node [my rect]{\FixedSizeText{3cm}{2cm}{A little text}}
        (3,0) node [my rect]{\FixedSizeText{3cm}{2cm}{A little text}}
        (0,-3) node [my rect]{\FixedSizeText{3cm}{2cm}{Longer text that will arguably not fill in the minipage, and so the thing will be leaked around}}
        ;
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案3

也许您搜索的是类似这样的内容(等于框,但里面的文本数量不一样): 在此处输入图片描述

代码:

\documentclass{article}
\usepackage{tikz,lipsum,lmodern}
\usepackage[most]{tcolorbox}

\begin{document}

    \begin{tcolorbox}[enhanced,fit to height=8cm, width=10cm,
        colback=gray!35!black!20!white,colframe=gray!75!black,title=Fit box (8cm),
        drop fuzzy shadow]
        \lipsum[1-2]
    \end{tcolorbox}
    \quad
    \begin{tcolorbox}[enhanced,fit to height=8cm, width=10cm,
        colback=gray!35!black!20!white,colframe=gray!75!black,title=Fit box (8cm),
        drop fuzzy shadow]
        \lipsum[1-3]
    \end{tcolorbox}
\end{document}

相关内容