在节点上声明传入箭头的点

在节点上声明传入箭头的点

有没有办法告诉节点箭头应该到达哪里?

在这个例子中,从节点 B 到 A 的箭头应该正好到达“Dies”中“D”的中间。它应该从 B 的文本顶部中央开始。

希望这是可以理解的。

\documentclass[11pt, halfparskip,toc=flat,numbers=noendperiod]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{ngerman} % deutsche Silbentrennung, Deutsche Ausdrücke

\usepackage[T1]{fontenc}
\usepackage{lmodern,textcomp}


\usepackage{pstricks-add}

\begin{document}
\begin{center}
\psset{xunit=1cm,yunit=1cm,runit=1cm}
\begin{pspicture}(10,5)
    %\psgrid(0,0)(0,0)(10,5)


    \rput[t](5, 5){
        \rnode{A}{
            \parbox[c]{3cm}{
                \centering
                Dies ist Node A
            }
        }
    }

    \rput[t](0, 2.5){
        \rnode{B}{
            \parbox[c]{3.5cm}{
                \centering
                Dies ist der Text\\
                zu Node B
            }
        }
    }

    \rput[t](10,2.5){
        \rnode{C}{
            \parbox[c]{3cm}{
                Mein Name ist C, Node C
            }
        }
    }

    \rput[t](5,0){
        \rnode{D}{
            \parbox[c]{3cm}{
                Ich bin Node D\\
                Ich stehe ganz unten
            }
        }
    }

    \psset{linewidth=.05cm}
    \psset{nodesep=0.1cm}
    \psset{arcangle=45}

    \ncarc{->}{B}{A}
    \ncarc{->}{A}{C}
    \ncarc{->}{C}{D}
    \ncarc{->}{D}{B}

\end{pspicture}

\end{center}

\end{document}

答案1

有一种方法。\nccurve例如,允许指定连接角度和偏移量。如果精度较低就足够了,您可以使用一行代码;由于您要寻找精确的位置,因此您需要更多代码:

%calculate offset
\newlength\labellength
\newlength\dlength
\newlength\offset
\settowidth{\labellength}{Dies ist Node A}
\settowidth{\dlength}{D}    
\setlength{\offset}{\dimexpr-.5\labellength+.5\dlength\relax}

%draw curve
\nccurve[angleA=90,angleB=90,offsetB=\offset,ncurvA=.67,ncurvB=.67]{->}{B}{A}

此处设置为默认值的参数ncurv允许您调整曲线的形状。A 和 B(不要与节点名称混淆)指的是起始节点和终止节点。有关更多详细信息,请参阅 @MarcoDaniel 链接的手册;其中还介绍了连接两个节点的其他几个选项。

在此处输入图片描述

答案2

使用您当前的设置无法完成此操作。节点说明符\rnode有一个可选参数来指定引用点,但只能指定一次。说明符等于\rput

但是该软件包pst-node提供了另一种方法。您可以使用新命令\psDefBoxNodes{node name }{text }来定义显示的引用点:

该示例取自手动的

\documentclass[]{scrartcl}
\usepackage{pst-node}
\begin{document}

\psset{xunit=1cm,yunit=1cm,runit=1cm}
\begin{pspicture}(-1,-2)(10,6)
\psscalebox{15}{\psDefBoxNodes{Age}{\color{red!50}\sffamily \"Age}}%
\pspolygon[fillstyle=solid,
fillcolor=blue!30,opacity=0.3](Age:tl)(Age:tr)(Age:br)(Age:bl)%
\psline[linestyle=dashed](Age:Bl)(Age:Br)%
\psdots(Age:tl)(Age:tC)(Age:tr)(Age:Cl)(Age:C)(Age:Cr)%
(Age:Bl)(Age:BC)(Age:Br)(Age:bl)(Age:bC)(Age:br)%
\pcline[arrows=<->,linecolor=blue,arrowscale=1.25](Age:tC)(Age:Br)
\uput[180](Age:tl){tl}\uput[180](Age:Cl){Cl}\uput[180](Age:Bl){Bl}\uput[180](Age:bl){bl}
\uput[90](Age:tC){tC} \uput[0](Age:C){C}
\uput[0](Age:BC){BC} \uput[-90](Age:bC){bC}
\uput[0](Age:tr){tr} \uput[0](Age:Cr){Cr} \uput[0](Age:Br){Br} \uput[0](Age:br){br}
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容