我希望这两个矩形并排放置,并与它们的上边对齐,而无需使用锚点“手动”计算位置。我已确保矩形的高度和宽度适合矩形内容的大小(在本例中为文本:可能有更好的方法使矩形的大小适合其内容)。很可能,正如我编写代码时一样,锚点位于矩形的中心,即坐标点 (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
在于,所提出的解决方案仅关注图像。它不需要任何支持代码来显示结果,因此它非常适合tikzpicture
s 的原型设计。图片以全图像尺寸显示在屏幕上。 - 通过为图片元素定义样式(如节点、箭头等),可以(在一定程度上)将样式与图片代码分离。这样,类似的元素具有统一的样式,样式不会在每个元素上重复。这会导致(远)更清晰、更简洁的代码,更容易理解,并且可以更轻松地更改样式。
- 通过定义节点样式中的锚点参数来选择要考虑哪个节点锚点。笔记:在定义节点的锚点后使用定位语法将覆盖它。因此,第二个节点首先定义相对于第一个节点的定位,然后通过节点的样式(
box
)定义要考虑哪个节点的锚点。 - 在 MWE 中使用了一些绘制
tikzpicture
s 的经验:- 让代码简短(这样就不容易丢失),
- 代码应该结构化,以便于识别
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 width
,minimum height
因为你不需要它。