我尝试在 TikZ 坐标声明中使用简单的数学函数,例如 sin、cos 和 sqrt。我发现这适用于笛卡尔坐标,但不适合极坐标:
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
% \draw (0,0) -- (2,0) -- (45:1/0.707) -- (0,0); % <-- works
% \draw (0,0) -- (2,0) -- (45:{1/cos(45)}) -- (0,0); % <--doesn't work
\draw (0,0) -- (2,0) -- (1,{1/tan(45)}) -- (0,0); % <--works
\end{tikzpicture}
\end{document}
这只是一个已知的限制,还是有办法解决这个问题?
答案1
这实际上是 PGF/TikZ 的 CVS 版本中修复的一个错误,请参阅在 TikZ 中使用数学
正如 percusse 在对该问题的回答中所报告的那样,您可以通过在半径计算的右括号后添加一个空格来解决此错误:
\draw (0,0) -- (2,0) -- (45:{1/cos(45)} ) -- (0,0);
cjorssen 还发布了现在 CVS 版本中的修复程序,您可以在文档中使用它。请参阅他的回答对上述问题。
原始答案
您可以使用let
关键字在坐标外进行计算来解决此问题。这将在第节中描述14.15 Let 操作手册的第 150 页(2010 年 10 月 25 日发布的 2.10 版)。
我习惯于cycle
封闭路径,因为这可以确保在那个角落处的线条正确合并。
\documentclass[tikz]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw let \n1 = {1/cos(45)} in
(0,0) -- (2,0) -- (45:\n1) -- cycle;
\end{tikzpicture}
\end{document}
答案2
我个人更喜欢通过单独进行计算\pgfmathsetmacro
,然后使用结果。否则,{}
解析器必须使用额外的组才能正常工作。
参考:
代码:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\CosValue}{1/cos(45)}%
\draw (0,0) -- (2,0) -- (45:\CosValue) -- cycle;
\end{tikzpicture}
%
\begin{tikzpicture}
\pgfmathsetmacro{\CosValue}{cos(45)}%
\draw (0,0) -- (2,0) -- (45:1/\CosValue) -- cycle;
\end{tikzpicture}
\end{document}