latex/tikz 文本在矩形内的相对位置

latex/tikz 文本在矩形内的相对位置

我想这个问题已经有人问过了,但我找不到。我需要绘制一些矩形,并需要在它们里面放置一些文本。现在棘手的是,我想根据矩形的大小来定位它们(​​就像在普通乳胶中指定一样\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 boxes 和局部框架(或局部坐标系)。

  1. 使用 alocal bounding box获取矩形的角。1
  2. 安装一个框架,其中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。但是,这个答案在局部坐标系的安装上有所不同。

相关内容