有没有办法告诉节点箭头应该到达哪里?
在这个例子中,从节点 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}