我正在使用代数选项,但为什么必须指定一些仅用 RPN 编写的表达式才需要的常量?

我正在使用代数选项,但为什么必须指定一些仅用 RPN 编写的表达式才需要的常量?

请考虑\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}

相关内容