使用坐标命令在点和其坐标之间进行人为位移

使用坐标命令在点和其坐标之间进行人为位移

使用命令时,点和其标签之间的默认间隔是多少coordinate?在下面的代码中,我使用选项和“。”在网格上绘制一些点label来排版点。点在此代码中用作标签。

标签与原点之间有一些位移。我想知道这个位移是多少,这样我才能在标签定位时保持一致。选项

[label distance=<- (a measure with units)>]

标签选项中的将减少该距离<a measure with units>

似乎如果将节点放置在可以通过声明角度90或不声明任何角度来指定的点上方,[label distance=-4pt]似乎可以消除人为的位移。如果将标签放置在点的右侧,似乎可以消除人为的位移[label distance=-5pt]

为什么需要对位于节点右侧或上方的节点进行不同程度的补偿?!如果要放置标签above right,则该label distance选项无法消除人为位移。可以抑制这种位移吗?

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,intersections}

\begin{document}
\begin{tikzpicture}
\draw [help lines] (-2,-2) grid (2,2);

\coordinate[label={[label distance=-4pt]90:$.$}] (A) at (1,1);
\coordinate[label={[label distance=-5pt]0:$.$}] (A) at (0,0);

\coordinate[label={[label distance=-5pt]45:$.$}] (A) at (-1,-1);
\coordinate[label={[label distance=-5.5pt]45:$.$}] (A) at (0,-1);
\coordinate[label={[label distance=-6pt]45:$.$}] (A) at (1,-1);

\end{tikzpicture}
\end{document}

答案1

TikZ 在其功能方面表现非常出色。而且,通常情况下,它完全按照您的要求执行操作。但有时,您可能想执行某些操作(例如标记节点和坐标),但 TikZ 的方法可能不是您想要的。

如果我理解您在这里的想法,您会希望自己为坐标创建标签,而不是依赖 TikZ 认为您想要做的事情。

在以下示例中,我创建了自己的自定义标签。我创建了节点并将其绘制为橙色。然后,我为节点创建标签,该标签与要标记的节点中心之间的距离精确匹配。标签本身为红色。我用浅蓝色绘制一个圆圈,其半径等于与节点中心之间的所需距离。我还将您的节点及其标签保留在那里。

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,intersections}

\begin{document}
\begin{tikzpicture}
\draw [help lines] (-2,-2) grid (2,2);

\coordinate[label={[label distance=-4pt]90:$.$}]   (A1) at (1,1);
\coordinate[label={[label distance=-5pt]0:$.$}]    (A2) at (0,0);

\coordinate[label={[label distance=-5pt]45:$.$}]   (A3) at (-1,-1);
\coordinate[label={[label distance=-5.5pt]45:$.$}] (A4) at (0,-1);
\coordinate[label={[label distance=-6pt]45:$.$}]   (A5) at (1,-1);

\coordinate (A) at (1,1);
\coordinate (B) at (0,0);
\coordinate (C) at (-1,-1);
\coordinate (D) at (0,-1);
\coordinate (E) at (1,-1);

\foreach \myn/\mya/\myd in {A/90/4pt,
                            B/0/5pt,
                            C/45/5pt,
                            D/45/5.5pt,
                            E/45/6pt}
  {
    \node[circle,inner sep=1pt,draw,orange] at (\myn) {};
    \draw[blue!20]  (\myn) circle (\myd);
    \node[text=red] (\myn/label) at ($(\myn)+(\mya:-\myd)$) {$.$};
  }

\end{tikzpicture}
\end{document}

在此处输入图片描述

基本上我在\foreach循环中所做的是:获取一些A已经定义的节点(或坐标)。然后,为了创建我自己的精确放置的标签,我将使用以下语法(前提是您使用该calc库)

\node[<options>] (A/label) at ($(A)+(<angle>:<distance>)$) {<label content>};

如果你不使用该calc库,那么你可以通过以下方式定义标签

\path (A) ++ (<angle>:<distance>) node[<node options>] (A/label) {<label content>};

标签名称没有什么特别之处。您可以随意命名,但就代码的可读性而言,最好按其本身命名。

相关内容