编辑

编辑

我正在尝试学习 TikZ,对 pstrick 有一些经验。我想在我的图形中添加一些标签,并且习惯了 pstricks 宏的便利性\uput{label separation}[relative angle](point){label}。例如,\uput{8pt}[100](1,0){$A$}将标签 $A$ 放在点 (1,0) 处,但在标准 100 度方向上相距 8 点。那么 TiKZ 中是否有类似的东西?特别是我想:

  • 指定点和标签之间的距离或间隔,以及
  • 准确指定角度,而不是局限于 0、45、90、135、180 等...

这是一个小例子。

    \documentclass[12pt]{standalone}

    \usepackage{tikz}
    \usetikzlibrary{arrows.meta, fit}
    \usetikzlibrary{calc,intersections,through,backgrounds}

    \begin{document}
    \begin{tikzpicture}[x=0.06\linewidth, y=0.06\linewidth]
      \coordinate [label=45:$A$] (A) at (6,6);
      \coordinate [label=135:$B$] (B) at (1,4);
      \coordinate [label=-45:$D$] (D) at (4,1);
      \coordinate [label=-120:$C$] (C) at (0,0);
      \draw [line width=0.8pt] (A) -- (B) -- (C) -- (D) -- cycle;
      \path [draw, name path=A--C, line width=0.8pt] (A) -- (C);
      \path [draw, name path=B--D, line width=0.8pt] (B) -- (D);
      \path [name intersections={of=A--C and B--D, by=P}];
      %\draw (P) node[anchor=-100]{$P$};
    \end{tikzpicture}
    \end{document}

我想在名为 P 的点上放置一个标签。我注释掉的那行可以很好地完成这个工作,但我发现这违反直觉,因为我的标签是 anode而不是 a label。另外,我该如何调整标签和点之间的间隔?

编辑: 根据下面@cfr的回答,我可以通过插入代码行来实现我需要的

    \draw (P) node[shift={(80:12pt)}]{$P$};

因此,总结一下:相当于普斯特里克\uput{label separation}[relative angle](point/position){label}\draw (point/position) node[shift=(relative angle:label separation)]{label}蒂克兹

答案1

您可能会发现quotes图书馆很方便。

这是添加标签而不使用引号语法的一种方法。我实际上不会在intersections这里费心,而只会使用短对角线的中点。

\begin{tikzpicture}[x=0.06\linewidth, y=0.06\linewidth, line width=.8pt]
  \coordinate [label=45:$A$] (A) at (6,6);
  \coordinate [label=135:$B$] (B) at (1,4);
  \coordinate [label=-45:$D$] (D) at (4,1);
  \coordinate [label=-120:$C$] (C) at (0,0);
  \draw  (A) -- (B) -- (C) -- (D) -- cycle (A) -- (C) (B) -- (D) node [midway, above] {$P$};
\end{tikzpicture}

使用该quotes库使我们能够使用更简洁的语法。 结合操作edge,我们可以使用以下代码行构造类似的图表。

\draw (0,0) coordinate ["-120:$C'$"] (C') -- +(4,1) coordinate ["-45:$D'$"] (D') -- +(6,6) coordinate ["45:$A'$"] (A') edge (C') -- +(1,4) coordinate ["135:$B'$"] (B') edge ["$P'$" right, pos=.35]  (D') -- cycle;

相似的形状 - 不同的语法

"<specification>"添加标签(如果是坐标或节点)或节点(如果是边)。"<specification>"'如果使用放置,则“交换”标签或节点的位置auto。如果是标签,"<angle>:<text>"则可用于将标签节点放置在精确的角度。rightabove在规范中重新定义为引用您可能选择的各种“标准”角度。标准样式可用于设置格式和放置的自定义默认值。

\documentclass[border=10pt,multi,tikz]{standalone}
\usetikzlibrary{quotes}
\begin{document}
\begin{tikzpicture}[x=0.06\linewidth, y=0.06\linewidth, line width=.8pt]
  \coordinate [label=45:$A$] (A) at (6,6);
  \coordinate [label=135:$B$] (B) at (1,4);
  \coordinate [label=-45:$D$] (D) at (4,1);
  \coordinate [label=-120:$C$] (C) at (0,0);
  \draw  (A) -- (B) -- (C) -- (D) -- cycle (A) -- (C) (B) -- (D) node [midway, above] {$P$};
  \begin{scope}[xshift=50mm]
    \draw (0,0) coordinate ["-120:$C'$"] (C') -- +(4,1) coordinate ["-45:$D'$"] (D') -- +(6,6) coordinate ["45:$A'$"] (A') edge (C') -- +(1,4) coordinate ["135:$B'$"] (B') edge ["$P'$" right, pos=.35]  (D') -- cycle;
  \end{scope}
\end{tikzpicture}
\end{document}

编辑

据我了解,当放置标签或图钉等时,TiZ 试图比你想象的更聪明。如果你请求一个非标准角度,它会将anchor节点的“捕捉”到最近的罗盘点,例如30,等等90110因此,要强制执行角度,你需要强制执行anchor

例如,

... coordinate [label={[anchor=-5]-185:$C$}, label={[anchor=15]-165:$C$}, label={-135:$C$}, label={[anchor=60]-120:$C$}] (C) ...

生产

具有非标准锚定的多个标签

要放置P标签,我只需创建一个移位的edge node。例如,

... edge node [midway, shift=(80:12pt)] {$P$}  ...

生产

移位边节点

完整代码:

\documentclass[border=10pt,multi,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=0.06\linewidth, y=0.06\linewidth, line width=.8pt]
  \draw (0,0) coordinate [label={[anchor=-5]-185:$C$}, label={[anchor=15]-165:$C$}, label={-135:$C$}, label={[anchor=60]-120:$C$}] (C) -- +(4,1) coordinate [label=-45:$D$] (D) -- +(6,6) coordinate [label=45:$A$] (A) edge (C) -- +(1,4) coordinate [label=135:$B$] (B) edge node [midway, shift=(80:12pt)] {$P$}  (D) -- cycle;
\end{tikzpicture}
\end{document}

答案2

看看以下 MWE 是否能帮助您:

\documentclass[ tikz,
                border=3mm,
                12pt]{standalone}
\usetikzlibrary{intersections}

    \begin{document}
\begin{tikzpicture}[x=0.06\linewidth, y=0.06\linewidth,
    every label/.style = {label distance=3pt, inner sep=1pt},
     every path/.style = {draw, line width=0.8pt}
                    ]
\coordinate [label=45:$A$] (A) at (6,6);
\coordinate [label=135:$B$] (B) at (1,4);
\coordinate [label=-45:$D$] (D) at (4,1);
\coordinate [label=-120:$C$] (C) at (0,0);
\path (A) -- (B) -- (C) -- (D) -- cycle;
\path [name path=A--C] (A) -- (C);
\path [name path=B--D] (B) -- (D);
\path [name intersections={of=A--C and B--D,by={[label=above:$P$]P}}];
\end{tikzpicture}
    \end{document}

在此处输入图片描述

相关内容