第一:标题不好,请随意更改为合适的内容。
代码
考虑以下 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}