使用 calc 库进行相对节点定位

使用 calc 库进行相对节点定位

你好,我正在尝试将相同的节点相互放置。我尝试将一个节点放置在其他两个节点的中间,但也在右边半厘米处。

\usepackage{tikz}
\usetikzlibrary{calc}

\begin{tikzpicture}
\node (p4) {$\hat{4}$} ;
\node[below=1cm of p4] (p3) {$3$} ;
\node[right=3cm of p4] (p1) {$\hat{1}$} ;
\node[below=1cm of p1] (p2) {$2$} ;
\node[below right={1/sqrt(2)}cm of p4] (v1) {$v_1$} ;
\end{tikzpicture}

我不明白为什么这不起作用...我收到以下错误

包 PGF 数学错误:未知运算符c' orcm'(在'{1/sqrt(2)}cm'中)。

答案1

你必须:

  • 添加positioning库。
  • 使用\pgfmathparse计算表达式1/sqrt(2)
  • 使用\pgfmathresult其中是计算的结果。

    \documentclass{article}
    \usepackage{tikz}
    \usetikzlibrary{calc,positioning}
    \begin{document}
    \begin{tikzpicture}
    \node (p4) {$\hat{4}$} ;
    \node[below=1cm of p4] (p3) {$3$} ;
    \node[right=3cm of p4] (p1) {$\hat{1}$} ;
    \node[below=1cm of p1] (p2) {$2$} ;
    \pgfmathparse{1/sqrt(2)}
    \node[below right=\pgfmathresult cm of p4] (v1) {$v_1$} ;
    \end{tikzpicture}
    \end{document}
    

或者如果你不使用一些单元就像cm,你不需要\pgfmathparse

编辑

为了避免出现问题\pgfmathparse{}\pgfmathresult您可以使用自己的\pgfmathsetmacro{...}。此更改避免了@percusse 展示的问题。

\begin{tikzpicture}
\node (p4) {$\hat{4}$} ;
\node[below=1cm of p4] (p3) {$3$} ;
\node[right=3cm of p4] (p1) {$\hat{1}$} ;
\node[below=1cm of p1] (p2) {$2$} ;
\pgfmathsetmacro{\myroot}{1/sqrt(2)} % <- 
\node[line width=3mm,below right=\myroot cm of p4] (v1) {$v_1$} ;
\end{tikzpicture}

虽然这与这个特定问题无关,但可能对其他情况有用。

答案2

您必须使用positioning-library蒂克兹将节点相对于彼此进行定位。

尝试以下步骤:

\documentclass[tikz, border=5mm]{standalone}
\usetikzlibrary{calc, positioning}

\begin{document}
 \begin{tikzpicture}
  \node (p4) {$\hat{4}$};
  \node[below=1cm of p4] (p3) {$3$};
  \node[right=3cm of p4] (p1) {$\hat{1}$};
  \node[below=1cm of p1] (p2) {$2$};
  \node[below right={1/sqrt(2)} of p4] (v1) {$v_1$};
 \end{tikzpicture}
\end{document}

渲染图像

更新:如果你想使用其他单位厘米,...)

上述代码使用蒂克兹默认为1厘米作为基本单位。如果您想使用另一个基本单位作为图片,您可以在tikz图片的选项。这样,您无需在计算 sqrt() 后设置单位并抑制错误。

\begin{tikzpicture}[x=1in, y=1in]
 \node[below=1cm] ... % use of cm
 \node[below=1]   ... % use of global unit (e.g. in)
 ...

答案3

在 tikz 中可以进行解析几何。即添加极坐标/矩形位移并添加两个坐标/向量。

\documentclass[border=3mm]{standalone}

\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}

\newdimen\x
\newdimen\y
\newcommand*{\GetXY}[1]{\path (#1); \pgfgetlastxy{\x}{\y};}%


\begin{document}

% ======================================= V
\begin{tikzpicture}
    % absolute
    \node at ($(1, -2) + (0.5, 1)$) (pX) {X};
    \node at ($(2, 1) - (1.5, 1)$) (pY) {Y};

    % polar coordinates wrt pA
    \node at (4, 1) (pA) {A};
    \node at ($(pA) + (30:1)$) (pAa) {Aa};
    \node at ($(pA) + (-30:1)$) (pAb) {Ab};

    % rectangular coordinates
    \node at (1, 3) (pB) {B};
    \node at ($(pB) + (-1,2)$) (pBa) {Ba};
    \node at ($(pB) - (-1,2)$) (pBb) {Bb};

    % relative
    \node at ($(pA) + (pB)$) (pABp) {ABp};
    \node at ($(pA) - (pB)$) (pABm) {ABm};

    % with x and y
            \node at (-1, -1) (pC) {C};
    \GetXY{$(pC)$};
    \node at ($(\x, -\y)$) (pCa) {Ca};

    % helpers below (feel free to commend out)
    % axis
    \node at (0, 0) (pO) {O};
    \draw[->] (pO) -- (1, 0);
    \draw[->] (pO) -- (0, 1);
    %
    \draw[dashed] (pA) -- (pAa);
    \draw[dashed] (pA) -- (pAb);
    \draw[dashed] (pB) -- (pBa);
    \draw[dashed] (pB) -- (pBb);
    \draw[dashed] (pA) -- (pABp);
    \draw[dashed] (pA) -- (pABm);
    \draw[dashed] (pC) -- (pCa);
\end{tikzpicture}
% ======================================= A

\end{document}

相关内容