PSTricks 代码无法编译

PSTricks 代码无法编译

第一:标题不好,请随意更改为合适的内容。

代码

考虑以下 MWE:

\documentclass{article}

\usepackage{auto-pst-pdf,pst-poly,pstricks-add}
\usepackage{expl3}

\ExplSyntaxOn
  \cs_new_eq:NN
    \calc
  \fp_eval:n
\ExplSyntaxOff

\begin{document}

\begin{figure}[htbp]
\def\sides{6}
\def\sidelength{6}
\def\radius{\calc{\sidelength/(2*sin(pi/\sides))}}
\def\RelAngle{\calc{360/\sides}}
 \centering
  \begin{pspicture}(-\radius,-\radius)(\radius,\radius)
   \PstPolygon[
     PolyNbSides=\sides,
     unit=3
   ]
%   \multido{\rA=0+\RelAngle,\iA=1+1}{\sides}{%
%     \psRelNode[angle=\rA](A)(B){1}{P\iA}
%   }
  \end{pspicture}
\end{figure}

\end{document}

我使用编译

pdflatex -shell-escape <filename>.tex

问题

为什么如果这三行没有被注释掉,代码是否无法编译?如何我如何让这三行不注释的代码变得可编译?

答案1

如文档中所述,\PstPolygon使用自己的pspicture环境。如果您有更多 PSTricks 命令,则必须使用 禁用此功能PstPicture=false。但是,我不知道 (A) 和 (B) 是什么意思?

我想您想要定义边的节点,这更容易:

\documentclass{article}
\usepackage{auto-pst-pdf,pst-poly,pstricks-add}

\begin{document}
\def\sides{6}
\edef\RelAngle{\numexpr360/\sides}

\begin{pspicture}(-3,-3)(3,3)
\providecommand{\PstPolygonNode}{\psdot[dotsize=0.15](1;\INode)}
\PstPolygon[PstPicture=false,PolyNbSides=\sides,unit=3]
%\multido{\rA=0+\RelAngle,\iA=1+1}{\sides}{%
%   \psRelNode[angle=\rA](A)(B){1}{P\iA}}  
\end{pspicture}

\end{document}

在此处输入图片描述

答案2

由于 PSTricks 没有为我们提供接受坐标来(<algebraic expression>|<algebraic expression>)定义节点的宏,因此我们可以\psparametricplot在此处滥用如下方法。

    \psparametricplot[algebraic,plotpoints=2,showpoints]{0}{0}{\X(t)|\Y(t)}

可用于绘制一个点,(\X(0),\Y(0))其中\X(t)\Y(t)都是中的代数表达式t

在此处输入图片描述

\documentclass[pstricks,border=12pt]{standalone}
\usepackage[nomessages]{fp}
\usepackage{pst-plot}

\newcommand\const[3][3]{%
    \edef\temporary{round(#3}%
    \expandafter\FPeval\csname#2\expandafter\endcsname
         \expandafter{\temporary:#1)}%
    \pstVerb{/#2 \csname#2\endcsname\space def}%
}


\const{Offset}{pi/4}% 45 degrees in radian for the angular diplacement
\const{Sides}{3}% number of sides
\const{SideLength}{3}% assuming in cm
\const{Radius}{SideLength/(2*sin(pi/Sides))}% 3 digits after the decimal point
\const{TwoPi}{2*pi}
\const[0]{PlotPoints}{Sides+1}

\def\X(#1){\Radius*cos(#1+\Offset)}
\def\Y(#1){\Radius*sin(#1+\Offset)}

\def\Picture{%
\begin{pspicture}[showgrid=false](-\Radius,-\Radius)(\Radius,\Radius)
    \psparametricplot[algebraic,plotpoints=\PlotPoints,showpoints]{0}{\TwoPi}{\X(t)|\Y(t)}
\end{pspicture}}

\begin{document}
    \Picture
\end{document}

动画片

在此处输入图片描述

\documentclass[pstricks,border=12pt]{standalone}
\usepackage[nomessages]{fp}
\usepackage{pst-plot}

\newcommand\const[3][3]{%
    \edef\temporary{round(#3}%
    \expandafter\FPeval\csname#2\expandafter\endcsname
         \expandafter{\temporary:#1)}%
    \pstVerb{/#2 \csname#2\endcsname\space def}%
}

\def\Picture#1{%
\const{Offset}{#1/180*pi}%
\const{Sides}{5}% number of sides
\const{SideLength}{3}% assuming in cm
\const{Radius}{SideLength/(2*sin(pi/Sides))}% 3 digits after the decimal point
\const{TwoPi}{2*pi}
\const[0]{PlotPoints}{Sides+1}
\def\X(##1){\Radius*cos(##1+\Offset)}
\def\Y(##1){\Radius*sin(##1+\Offset)}
\begin{pspicture}[showgrid=false](-\Radius,-\Radius)(\Radius,\Radius)
    \psparametricplot[algebraic,plotpoints=\PlotPoints,showpoints]{0}{\TwoPi}{\X(t)|\Y(t)}
    \psparametricplot[algebraic,plotpoints=2,showpoints,linecolor=red]{0}{0}{\X(t)|\Y(t)}
\end{pspicture}}

\begin{document}
    \multido{\i=0+10}{36}{\Picture{\i}}
\end{document}

相关内容