我想计算坐标 X 和 Y 来构建一个图形:
\documentclass[a4paper,12pt]{book}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{tikz} % pour dessins
\usetikzlibrary{shapes, calc, arrows} % pour complement tikz
\begin{document}
\begin{tikzpicture}
\def\focale{3}
\def\angleg{32}
\def\angled{90-\angleg}
\coordinate (P1) at (\tan(\angleg)*\focale,1.5cm);
...
\end{tikzpicture}%<<<== must use well balanced curly-braces
\end{document}
但我有一个错误:
Missing \endcsname inserted \coordinate (P1) at (\tan(32)
我尝试将计算包含在内,$
但是:
Paragraph ended before \tikz@cc@parse@factor was complete
答案1
简短的回答是:是的,你可以。
您的错误在于您在输入函数时使用了反斜杠,\
而这是向 LaTeX 表明它是编译中的命令的方式。计算数字时,函数不应使用反斜杠,而应使用tan(angleg)
等等。
对于更复杂的函数,使用花括号来表示它们应该在一起(如@zeroth所述)({tan(\angleg)*\focale},1.5cm)
。
答案2
我不同意答复中关于 \ (反斜杠)的说法:
- \tan 必须替换为“tan”,因为您希望将数学函数应用于 \angleg,而不是写为“tan(58)”
- 你必须保留 '\angleg' 因为 TeX 不知道 'angleg '(它是纯文本)
我同意关于 {}(花括号)的答复,每次在点定义中有一些 () 时,花括号都是必需的。
但完整的答案是使用 $ 语法来计算点坐标:
\coordinate (P1) at ($({tan(\angleg)*\focale},1.5cm)$);
此外,更好的做法可能是更换
\def\gnat{<some math expresion>}
经过
\pfgmathsetmacro{\gnat}{<some math expresion>}
因为当使用后者时,计算会被立即解析并执行。
答案3
使用 PSTricks。仅用于比较目的。
PSTricks 相当于 TikZ({tan(\complement)*\radius},1.5)
的是
(+{Tan(\complement)*\radius},1.5)
(**{Tan(\complement)*\radius} 1.5)
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\def\radius{3}
\def\angle{45}
\def\complement{90-\angle}
\begin{document}
\begin{pspicture}[showgrid](6,3)
\pnode(+{Tan(\complement)*\radius},1.5){P1}
%\pnode(**{Tan(\complement)*\radius} 1.5){P1}
\pscircle*[linecolor=red](P1){2pt}
\end{pspicture}
\end{document}
各种各样的
在 PSTricks 中,有几种定义坐标的方法。它可以用现有节点或数学表达式来表示。对于数学表达式,我们有以下四种方法。
横坐标和纵坐标均为 RPN。
例如:
(!2 3 mul 1 sub 2 0 add)
是一个点(5,2)
。横坐标为 RPN,纵坐标为代数。纵坐标可以是 的函数
x
。例如:
(*{2 3 add} {x-3})
是一个点(5,2)
。横坐标为代数,纵坐标为 RPN。横坐标可以是 的函数
y
。例如:
(**{y*3-1} {1 1 add})
是一个点(5,2)
。横坐标和纵坐标都是代数的。
例如:
(+{3+2},1+1)
是一个点(5,2)
。
下面的例子使用\def
将代数表达式表达为的函数x
或y
常数。
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-node}
\def\f[#1]{2*#1-1}
\begin{document}
\begin{pspicture}[showgrid](4,3)
\pscircle*[linecolor=red](+{\f[2],\f[1]}){2pt}% its center is (3,1)
\pscircle*[linecolor=green](*{1 0 add} {\f[x]}){2pt}% its center is (1,1)
\pscircle*[linecolor=blue](**{\f[y]} {2 0 add}){2pt}% its center is (3,2)
\end{pspicture}
\end{document}