我想这个问题已经有人问过了,但我找不到。我需要绘制一些矩形,并需要在它们里面放置一些文本。现在棘手的是,我想根据矩形的大小来定位它们(就像在普通乳胶中指定一样\hspace{0.5\textwidth}
(例如,将文本放置在矩形的中间(就 y 坐标而言),但放置在矩形宽度的 0.2 倍处(就 x 坐标而言))
这样的事可能吗?如果可能,怎么做?
答案1
这里还有两个选项可以指定 x 轴和 y 轴的相对百分比:
- 选项 1:将节点置于坐标处
(<xpos> |- <ypos>)
,其中<xpos>
和<ypos>
的形式均为{$ <pathway calc> $}
。还提供了此选项的变体,允许更轻松的输入。 - 选项 2:使用路径操作获取和
let
中矩形的宽度和高度。这类似于\x{<node name>}
\y{<node name>}
薛定谔的猫给出了答案,但没有引入明确的新范围。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\tikzset{
relative at/.style n args = {3}{
at = {({$(#1.west)!#2!(#1.east)$} |- {$(#1.south)!#3!(#1.north)$})}
}
}
\begin{document}
\begin{tikzpicture}
% used to indecate the relative position
\draw[help lines, dashed, ystep=0.3] (0, 0) grid (10, 3);
% define a node "rect" with size of the (bounding box of drawn) rectangle
\draw[local bounding box=rect, thick, red] (0, 0) rectangle (10, 3);
% use partway mordifiers <coord1>!<num>!<coord2> of coordinate calculation,
% see tikz manual sec. 13.5.3
\node at ($ (rect.west)!0.2!(rect.east) $) {0.2x, 0.5y};
% Option 1: use path operation |-, see manual sec. 13.3.1 and 14.2.2
\node
at ({$(rect.west)!0.7!(rect.east)$} |- {$(rect.south)!0.8!(rect.north)$})
{0.7x, 0.8y};
% Option 1 variant: simplify input by using new tikz option "relative at"
\node[relative at={rect}{0.5}{0.5}] {0.5x, 0.5y};
% Option 2: use let operation, see manual sec. 14.5
\path
let
\p{rect} = ($ (rect.north east) - (rect.south west)$)
in
[x=\x{rect}, y=\y{rect}, shift=(rect.south west)]
node at (.3, .2) {0.3x, 0.2y};
\end{tikzpicture}
\end{document}
答案2
钛钾Z 对此有一个特定的机制:local bounding box
es 和局部框架(或局部坐标系)。
- 使用 a
local bounding box
获取矩形的角。1 - 安装一个框架,其中
x={(bottom right)-(bottom left)},y={(top left-bottom left)},shift={(bottom left)}
锚点的精确命名详细说明在下面的代码中。
这是一个例子。
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
% store the rectangle in a local bounding box
\draw[local bounding box=rect] (8,1) rectangle (0,2);
% install a local coordinate system
\begin{scope}[x={($(rect.south east)-(rect.south west)$)},
y={($(rect.north west)-(rect.south west)$)},
shift={(rect.south west)}]
\node at (0.3,0.5) {here};
\end{scope}
\end{tikzpicture}
\end{document}
如您所见,在范围内,该坐标(0.3,0.5)
表示矩形宽度的 30% 和矩形高度的 50%。
显然,这也可以用于不同的形状。也可以引入旋转坐标系等,但以上是一个非常基本的例子。
1其他答案我现在才看到的,也命名了局部边界框rect
。但是,这个答案在局部坐标系的安装上有所不同。