我知道之前已经有人问过并回答过这个问题,我需要把它{
放在}
周围,但是由于某种原因,这不起作用:
\draw (0,0) -- ({atan(1)}:{sqrt(2)});
知道为什么吗?
答案1
该问题已在 TikZ 官方版本(v.3.0.0 及更高版本)中修复。
这些信息之后答案还在继续……社区推广广告 - 2015
它需要更多的牛铃!!
对我来说,原因相当神秘,也许我们的巫师会解释的。最后你需要一个额外的空间:
\begin{tikzpicture}
\draw (0,0) -- ({atan(1)}:{sqrt(2)} );
\end{tikzpicture}
或者,值得注意的是,你在最后一次计算中没有放任何括号,并且跳过了右括号:
\begin{tikzpicture}
\draw (0,0) -- ({atan(1)}:sqrt(2);
\end{tikzpicture}
这简直就是黑魔法(或者是数学计算中多了一个括号)。所以我欢迎任何人编辑这个答案并启发我们。
我不知道这是否相关,但这里还有另一个更搞笑的(!?)
\usetikzlibrary{calc}
\begin{tikzpicture}
\draw (0,0) arc (0:45:({veclen(2,2)}););
\end{tikzpicture}
在这个例子中,你不能使用额外的空格。你需要省略最后一个括号。你也可以删除最后两个字符,);
因为它们在分号后不起作用。
\begin{tikzpicture}
);
\end{tikzpicture}
答案2
更新下面的解决方法现在是pgf/tikz
cvs 版本。
正如我在评论中所说,这种行为与以下事实有关:TeX
删除分隔参数的括号举个例子来理解一下:
\documentclass{minimal}
\def\foo(#1){%
\def\bar{#1}%
\show\bar}
\def\test{{test}}
\show\test
\foo(\test)
\begin{document}
\end{document}
输出:
\test=macro:->{test}.
\bar=macro:->\test .
tikz
使用分隔参数在连续的宏调用中解析极坐标\tikz@...@parse@polar
。因此,一个简单的解决方法是保护“内部宏调用”中的所有分隔参数(即在第一个使用(
和)
分隔参数的宏和最后一个宏之间)。这样,由于每次调用这些“内部”宏时都会删除括号,因此不会有任何副作用(我在这里可能错了)。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\makeatletter
% Code from tikz.code.tex
\def\tikz@parse@polar#1(#2:#3){%
% Braces surrounding #2 or #3 eventually disapeared
\pgfutil@ifundefined{tikz@polar@dir@#2}
% So we put them back
{\tikz@@parse@polar#1({#2}:{#3})}
{\tikz@@parse@polar#1(\csname tikz@polar@dir@#2\endcsname:#3)}%
}
\def\tikz@@parse@polar#1(#2:#3){%
% Again braces surrounding #2 or #3 were stripped
\pgfutil@in@{ and }{#3}%
\ifpgfutil@in@%
% So we put them back
\edef\tikz@args{({#2}:#3)}%
\else%
\edef\tikz@args{({#2}:{#3} and {#3})}%
\fi%
\expandafter\tikz@@@parse@polar\expandafter#1\tikz@args%
}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ({atan(1)}:{sqrt(2)});
\draw[semitransparent,thick,red] (0,0) -- (45:1.41);
\end{tikzpicture}
\end{document}
答案3
另一种选择是预先计算长度:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetlengthmacro{\radius}{sqrt(5+2*sqrt(3))*1cm}
\draw (0,0) -- ({atan(1)}:\radius);
\end{tikzpicture}
\end{document}