
다음 코드와 같이 \X{Tpeak}
매크로 출력을 전달하는 방법은 무엇입니까 ?\FPeval\Ypeak
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pstricks-add}
\usepackage[nomessages]{fp}
\newcommand\const[3][3]{%
\expandafter\FPeval\csname#2\endcsname{round(#3:#1)}%
\pstVerb{/#2 \csname#2\endcsname\space def}%
}
\const{Vinit}{10}
\const{Theta}{75/180*pi}
\const{Gravity}{10}
\def\X#1{Vinit*cos(Theta)*#1}
\def\Y#1{Vinit*sin(Theta)*#1-Gravity*pow(2,#1)/2}
\const{Tpeak}{Vinit*sin(Theta)/Gravity}
\const{Ypeak}{\X{Tpeak}}
\const{Xpeak}{pow(2,Vinit)*sin(2*Theta)/(2*Gravity)}
\begin{document}
\begin{pspicture}[showgrid=bottom](2\dimexpr\Xpeak\psxunit\relax,\Ypeak)
\end{pspicture}
\end{document}
답변1
에 전달하기 전에 표현식을 \X{Tpeak}
먼저 확장해야 합니다 \const
.
\edef\next{%
\noexpand\const{Ypeak}{\X{Tpeak}}%
}\next
첫 번째 는 \X
완전히 확장되었지만 . 그런 다음 다음 을 포함합니다:\const
\noexpand
\next
\const {Ypeak}{Vinit*cos(Theta)*Tpeak}
매크로는 \next
일시적으로만 사용됩니다. 따라서 일반적인 패턴은 이것을 그룹에 넣는 것입니다.
\begingroup
\edef\next{\endgroup
\noexpand\const{Ypeak}{\X{Tpeak}}%
}\next
그런 다음 이전에 정의된 항목은 \next
이후에도 변경되지 않고 그대로 유지되며 \const
여전히 그룹 외부에서 호출됩니다.