考虑以下代码
\documentclass[pstricks,12pt]{standalone}
\usepackage{pst-node}
\usepackage{pgfmath}% don't forget this line!
\psset{saveNodeCoors}
\degrees[13]
\begin{document}
\makeatletter
\begin{pspicture}(-4,-4)(4,4)
\foreach \i [count=\j from 0] in {A,2,3,4,5,6,7,8,9,T,J,Q,K}
{
\pnodes(!3 \j\space neg \pst@angleunit 90 add PtoC){X\i}
\qdisk(X\i){2pt}
\uput[!N-X\i.y N-X\i.x atan 1 \pst@angleunit div](X\i){\i}
%\uput[(X\i)](X\i){\i}
%\uput[!\psGetNodeCenter{X\i} X\i.y X\i.x atan 1 \pst@angleunit div](X\i){\i}
}
\end{pspicture}
\makeatother
\end{document}
输出如下。
但如果我使用
\uput[(X\i)](X\i){\i}
\uput[!\psGetNodeCenter{X\i} X\i.y X\i.x atan 1 \pst@angleunit div](X\i){\i}
我得到了以下错误的输出。
根据赫伯特几十年前的回应(我不知道在这个网站的具体位置),对(N-<node>.x
和N-<node>.y
)和(<node>.x
和<node>.y
)具有不同的变换矩阵。
问题是,在将节点作为方向角X\i
传递之前,我必须对节点应用什么变换矩阵才能得到相同的正确结果?\uput
更新
当圆心不在原点时,遗憾的是\uput[(NODE)](>NODE){contents}
它不再起作用。
\documentclass[pstricks,border=20pt]{standalone}
\usepackage{pst-node,pst-plot}
\pstVerb{/XX 3 def /YY 4 def}
\degrees[12]
\makeatletter
\def\object#1{%
\begin{pspicture}[saveNodeCoors,showgrid](0,1)(6,7)
\pnode(!XX YY){P}
\pscircle(!XX YY){2}
\curvepnodes[plotpoints=13]{0}{12}{2 t \pst@angleunit PtoC YY add exch XX add exch}{R}
\multido{\i=0+1}{\Rnodecount}
{%
\pstVerb
{
/ALPHA {\i\space} def
%/ALPHA {N-R\i.y N-P.y sub N-R\i.x N-P.x sub atan 1 \pst@angleunit div} def
%/ALPHA {\psGetNodeCenter{R\i}\psGetNodeCenter{P} R\i.y P.y sub R\i.x P.x sub atan 1 \pst@angleunit div} def % IT CANNOT BE USED!
%/BETA {ALPHA 90 1 \pst@angleunit div sub} def
/BETA {\i\space 90 1 \pst@angleunit div sub} def
}%
\ifcase#1
\psset{linecolor=red}
\uput[\i]{!BETA}(R\i){$R_{\i}$}
\or
\psset{linecolor=green}
\uput[!ALPHA]{!BETA}(R\i){$R_{\i}$}
\or
\psset{linecolor=blue}
\uput[(R\i)]{!BETA}(>R\i){$R_{\i}$}
\fi
\psline(!XX YY)(R\i)
}
\end{pspicture}}
\makeatother
\begin{document}
\foreach \x in {0,...,2}{\object{\x}}
\end{document}
案例 0
情况1
案例 2
答案1
>
使用位置节点的前缀可以实现所需的行为,即使用\uput[(X\x)](>X\x){\x}
:
\documentclass[pstricks,margin=12pt]{standalone}
\usepackage{pst-node}
\usepackage{pgfmath}
\degrees[13]
\begin{document}
\makeatletter
\begin{pspicture}(-4,-4)(4,4)
\foreach \x [count=\xi from 0] in {A,2,3,4,5,6,7,8,9,T,J,Q,K}
{
\pnodes(!3 \xi\space neg \pst@angleunit 90 add PtoC){X\x}
\qdisk(X\x){2pt}
\uput[(X\x)](>X\x){\x}
}
\end{pspicture}
\makeatother
\end{document}
这相当于第三个版本
\uput[!\psGetNodeCenter{X\x} X\x.y X\x.x Atan 1 \pst@angleunit div](>X\x){\x}
似乎这种语法正是为这种\uput
行为而引入的,请参阅texdoc pst-news10
。
答案2
\documentclass[pstricks,margin=12pt]{standalone}
\usepackage{pst-node}
\degrees[13]
\begin{document}
\begin{pspicture}(-4,-4)(4,4)
\psforeach{\x}{A,2,3,4,5,6,7,8,9,T,J,Q,K}{%
\pnode(3;\the\psLoopIndex){X\x}
\qdisk(X\x){2pt}
\nput[labelsep=12pt]{(X\x)}{X\x}{\red\x}
\pcline[linestyle=none](0,0)(X\x)\ncput[npos=0.7,nrot=:R]{\x}
\nput[labelsep=-15pt,rot=\the\psLoopIndex]{\the\psLoopIndex}{X\x}{\green\x}
\uput{20pt}[\the\psLoopIndex](X\x){\blue\x}
\psline[linestyle=dotted](3;\the\psLoopIndex)
}
\end{pspicture}
\end{document}