你好,我正在尝试将相同的节点相互放置。我尝试将一个节点放置在其他两个节点的中间,但也在右边半厘米处。
\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' or
cm'(在'{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}