请考虑\pstVerb{/#2 \csname#2\endcsname\space def}
以下代码片段。
\newcommand\const[3][3]{%
\edef\next{round(#3}%
\expandafter\FPeval\csname#2\expandafter\endcsname
\expandafter{\next:#1)}%
\pstVerb{/#2 \csname#2\endcsname\space def}%
}
其目的是为用 RPN 符号写的表达式定义一个常量。
下面是我的完整代码
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-plot}
\usepackage[nomessages]{fp}
\newcommand\const[3][3]{%
\edef\next{round(#3}%
\expandafter\FPeval\csname#2\expandafter\endcsname
\expandafter{\next:#1)}%
\pstVerb{/#2 \csname#2\endcsname\space def}%
}
\const{Vox}{2}
\const{Xo}{1}
\const{Voy}{4}
\const{Yo}{10}
\const{G}{10}
\def\X(#1){Xo+Vox*#1}
\def\Y(#1){Yo+Voy*#1-0.5*G*#1^2}
\const{Tp}{Voy/G}
\const{Toffset}{0.5}
\const{Tf}{2*Tp+Toffset}
\const{Xp}{\X(Tp)}
\const{Yp}{\Y(Tp)}
\const{Xf}{\X(Tf)}
\const{Yf}{\Y(Tf)}
\usepackage{fourier}
\begin{document}
\begin{pspicture}(0,\Yp)(\Xf,\Yf)
\psframe*[linecolor=lightgray](0,\Yf)(\Xo,\Yo)
\psparametricplot[algebraic,linecolor=red,linestyle=dashed]{0}{\Tf}{\X(t)|\Y(t)}
\rput[B]{45}(\Xp,\Yp){\bomb}
\end{pspicture}
\end{document}
使用\psparametricplot[algebraic,linecolor=red,linestyle=dashed]{0}{\Tf}{\X(t)|\Y(t)}
withalgebraic
选项。如您所见,没有用 RPN 符号书写的表达式。
但是,如果我禁用\pstVerb{/#2 \csname#2\endcsname\space def}
(通过使用 进行注释%
),编译将在latex
和阶段成功,但在阶段dvips
失败ps2pdf
Error: /undefined in Xo
... <other errors go here but omitted for brevity> ....
我正在使用algebraic
选项,但为什么必须指定一些仅用 RPN 编写的表达式才需要的常量?
答案1
如果我使用 TeX 世界中的常量更改参数函数,则无需在 PS 世界中定义常量。
\def\X(#1){\Xo+\Vox*#1}
\def\Y(#1){\Yo+\Voy*#1-0.5*\G*#1^2}