tikz:适合矩形内容和矩形节点

tikz:适合矩形内容和矩形节点

我希望这两个矩形并排放置,并与它们的上边对齐,而无需使用锚点“手动”计算位置。我已确保矩形的高度和宽度适合矩形内容的大小(在本例中为文本:可能有更好的方法使矩形的大小适合其内容)。很可能,正如我编写代码时一样,锚点位于矩形的中心,即坐标点 (0,0) 有什么想法吗?

\documentclass{article}
\usepackage[margin=1.5cm,top=1cm,headheight=16pt,headsep=0.1in,heightrounded]{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes,positioning,intersections,quotes}
\begin{document}
\begin{tikzpicture}
\node[rectangle,
    draw = lightgray,
    fill = yellow,
    minimum width = .1cm, 
    minimum height = .1cm] (rect_1) at (0,0) 
    {
    \Huge{Rectangle}
    };
\node[rectangle,
    draw = lightgray,
    fill = green,
    minimum width = .1cm, 
    minimum height = .1cm] (rect_2) at (rect_1.south east) 
    {
    \Huge{Rectangle}
    };
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案1

对于节点定位,我将使用positioning库并为节点定义锚点。对于节点,我建议使用通用定义样式(不定义最小节点大小)和颜色参数:

\documentclass[border=3.141592]{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning} % <---

\begin{document}
    \begin{tikzpicture}[
node distance = 7mm,         % <---
   box/.style = {draw=lightgray, fill=#1, % <--- 
                 anchor=north west,
                 align=left, font=\Huge}
                       ]
\node (n1)  [box=yellow]    {Rectangle};  % <---
\node (n2)  [right=of n1.north east,      % <--- had to be before node style
             box=green]   {Rectangle\\ Rectangle};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

一些评论(正如@Unknowm 所建议的):

  • 建议的解决方案独立于所使用的文档类,因此它article也将在文档类中给予它们相同的结果。
  • 在此(及类似)情况下使用 a 的优势standalone在于,所提出的解决方案仅关注图像。它不需要任何支持代码来显示结果,因此它非常适合tikzpictures 的原型设计。图片以全图像尺寸显示在屏幕上。
  • 通过为图片元素定义样式(如节点、箭头等),可以(在一定程度上)将样式与图片代码分离。这样,类似的元素具有统一的样式,样式不会在每个元素上重复。这会导致(远)更清晰、更简洁的代码,更容易理解,并且可以更轻松地更改样式。
  • 通过定义节点样式中的锚点参数来选择要考虑哪个节点锚点。笔记:在定义节点的锚点后使用定位语法将覆盖它。因此,第二个节点首先定义相对于第一个节点的定位,然后通过节点的样式(box)定义要考虑哪个节点的锚点。
  • 在 MWE 中使用了一些绘制tikzpictures 的经验:
    • 让代码简短(这样就不容易丢失),
    • 代码应该结构化,以便于识别tikzpicture它定义了哪一部分,
    • 在代码中添加注释很有帮助。上面的 MWE 是与 指示的 MWE 相比的主要变化% <---

答案2

虽然不是最好的解决方案,但至少有一种可能性:

\documentclass{article}
\usepackage[margin=1.5cm,top=1cm,headheight=16pt,headsep=0.1in,heightrounded]{geometry}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,shapes,positioning,intersections,quotes}
\begin{document}
\begin{tikzpicture}
\node[rectangle,
    draw = lightgray,
    fill = yellow,
    font=\Huge] (rect_1)
    {
    Rectangle
    };
\node[rectangle,
    draw = lightgray,
    fill = green,
    xshift = 5cm,
    anchor = north,
    align = left,
    font=\Huge] (rect_2) at (rect_1.north)
    {
    Rectangle\\
    Rectangle
    };
\end{tikzpicture}
\end{document}

我还删除了minimum widthminimum height因为你不需要它。

相关内容