我是 TikZ 绘图方面的新手,在以下示例中标有 的行上遇到了“缺失数字错误” %(**)
,
\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric,arrows,intersections}
%shapes.geometric and arrows are used in other TikZ graphics not included in this MCVE
\begin{document}
\begin{tikzpicture}[scale=0.3]
\draw [name path=yaxis, ->,thick] (0,-2)--(0,12) node (yax) [above] {$\Im E$};
\draw [->,thick] (-20,0)--(12,0) node (xax) [right] {$\Re E$};
\path [name path=circular] (-15,0) arc (180:0:8);
\path [name intersections={of=circular and yaxis}];
\coordinate (c) at (intersection-1);
\draw [->,thick] let
\p1=(c),
\n1={\y1/8}, %(*)
\n2={asin(\n1)} %(**)
in (-15,0) arc (180:\n2:8); %(***)
\draw let \p1=(c) in (0,\y1)--(7,\y1);
\end{tikzpicture}
\end{document}
我已经检查了此网站上现有的问题,但尚未找到答案,我尝试以各种方式在和周围添加括号%(*)
,%(**)
但没有成功。我还尝试将两个let
s 合并为一个,如\n1={asin(\y1/8)}
,并尝试添加括号的变体。它们都报告缺少数字错误。如果我用数字替换\n1
in line ,或使用in 代替in (这不是我想要的,但我只是想检查一下),也不会出现错误。%(**)
\n1
\n2
%(***)
其他观察
- 如果我替换
acos
为ln
,则不会报告错误 - 如果我替换
\y1/8
为\y1
,则会报告错误“尺寸太大”
编辑
asin(\y1/8)=acos(7/8)
,所以无论如何我都可以绘制我想要的,但我只是不明白错误来自哪里。
答案1
我个人会用不同的方式计算角度(假设你不想用分析方法计算)。你有一个(-7,0)
半径为 的半圆8cm
,你想从中画出到 y 轴交点的路径。也就是说,我们需要 的极坐标(c)-(-7,0)
。可以通过以下方式计算角度atan2
,这样就避免了必须除以维度,以及在询问 Ti 时可能出现的相关错误钾Z 计算大于 1 的数的反正弦。atan2
对于任何参数都有定义,因此不会出现此错误(并且这种计算角度的方式可以说更直观)。水平拉伸不需要calc
(但在这里使用当然没有错calc
)。
\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}[scale=0.3]
\draw [name path=yaxis, ->,thick] (0,-2)--(0,12) node (yax) [above] {$\Im E$};
\draw [->,thick] (-20,0)--(12,0) node (xax) [right] {$\Re E$};
\path [name path=circular] (-15,0) arc (180:0:8);
\path [name intersections={of=circular and yaxis}];
\coordinate (c) at (intersection-1);
\draw [->,thick] let \p1=($(c)-(-7,0)$),
\n1={atan2(\y1,\x1)} in (-15,0) arc (180:\n1:8);
\draw (c-|0,0) -- (c-|7,0);
\end{tikzpicture}
\end{document}
答案2
我在一个封闭式问题中找到了答案。对我来说,这个问题问得很清楚,我不知道为什么它被封闭了。
继第二条评论之后Tikz:在 pt 和单位测量之间进行转换,我将\n1={\y1/8}
其改为\n1={\y1/8cm}
,它按预期工作。这是因为内部坐标系使用cm
作为单位长度,但pt
在使用坐标分配时报告带有单位的坐标。
尽管如此,我不明白为什么错误是“缺少数字,视为零”,但至少我知道将来正确的做法是什么。