我想在命令中计算坐标时使用乳胶宏,但如果目标点坐标和指令都涉及这样的宏,\draw
这似乎是不可能的。[in=...,out=...]
以这个 MWE 为例:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\def\a{25}
\def\b{0}
\def\r{1.5}
\begin{tikzpicture}
\draw (0,0) -- ({\r*cos(\b)},{\r*sin(\b)});
\draw [red] (0,0) to [out=\a,in=180-\a] (1.5,0);
\draw [blue] (0,0) to [out=-\a,in=180+\a] ({\r*cos(\b)},{\r*sin(\b)});
\end{tikzpicture}
\end{document}
第一个\draw
命令运行正常,tikz 执行了 sin 和 cos 计算;第二个\draw
命令也运行正常,latex\a
在 tikz 处理 to[in=-\a ,out=180+\a]
指令之前进行了替换。但是,最后一个\draw
命令失败并显示错误消息
"""
! Package pgf Error: No shape named 1 is known.
See the pgf package documentation for explanation.
Type H <return> for immediate help.
...
l.11 ...-\a,in=180+\a] ({\r*cos(\b)},{\r*sin(\b)})
"""
这是为什么?我该如何让它工作?谢谢 Jose
答案1
绘制命令to
不直接接受计算坐标,您可以简单地创建一个命名坐标,或者使用适当的极坐标,就像我对绿线所做的那样:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\newcommand*\a{25}
\newcommand*\b{0}
\newcommand*\r{1.5}
\begin{tikzpicture}
\coordinate (target) at ({\r*cos(\b)},{\r*sin(\b)});
\draw (0,0) -- (target);
\draw [red] (0,0) to [out=\a,in=180-\a] (1.5,0);
\draw [blue] (0,0) to [out=-\a,in=180+\a] (target);
\draw [green,very thick,dashed] (0,0) to [out=-\a,in=180+\a] +(\b:\r);
\end{tikzpicture}
\end{document}
答案2
我不知道为什么你的解决方案不起作用,但这个有效
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\def\a{25}
\def\b{0}
\def\r{1.5}
\begin{tikzpicture}
\draw (0,0) -- ({\r*cos(\b)},{\r*sin(\b)});
\draw [red] (0,0) to [out={\a},in={180-\a}] (1.5,0);
\pgfmathsetmacro{\rC}{\r*cos(\b)}
\pgfmathsetmacro{\rS}{\r*sin(\b)}
\draw [blue] (0,0) to [out={-\a},in={180+\a}] (\rC,\rS);
\end{tikzpicture}
\end{document}
答案3
这似乎是 Ti 的一个错误钾Z,只要其后的 x 坐标to[in=...,out=...]
有函数,就会出现,包括sin
、cos
、round
、floor
等等。
一个简单的解决方案是在 x 坐标处添加另一对花括号,如下所示:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\def\a{25}
\def\b{0}
\def\r{1.5}
\begin{tikzpicture}
\draw (0,0) -- ({\r*cos(\b)},{\r*sin(\b)});
\draw [red] (0,0) to [out=\a,in=180-\a] (1.5,0);
\draw [blue] (0,0) to [out=-\a,in=180+\a] ({{\r*cos(\b)}},{\r*sin(\b)});
\end{tikzpicture}
\end{document}