如何调整序列图中箭头上方文本的位置。例如,以下代码产生的输出中“Text1 Text1”和“Text2 Text2 Text2”位于箭头中心的顶部。如何将文本定位在箭头左侧或右侧的顶部?
\documentclass[12pt]{article}
\usepackage{lingmacros}
\usepackage{tree-dvips}
\usepackage{pgf-umlsd}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart,shapes,shadows,arrows.meta,arrows,decorations.markings,trees,positioning,decorations.markings,calc,fit,chains,intersections,decorations.pathreplacing}
\begin{document}
\begin{sequencediagram}
\newinst {a} {AAA}
\newinst {b} {BBB}
\newinst {c} {CCC}
\newinst {d} {DDD}
\newinst {e} {EEE}
\newinst {f} {FFF}
\newinst {g} {GGG}
\postlevel
\begin{messcall}{a} {\shortstack[l]{\\
$Text1\ Text1$\\
$Text2\ Text2\ Text2$\\
$$}} {g}
\end{messcall}
\end{sequencediagram}
\end{document}
答案1
我认为,如果不进行某种修改就不可能直接做到这一点pgf-umlsd
,因为所讨论的节点是通过以下内容添加的:
\draw[->,>=angle 60] ({cf\thecallevel}) -- (ct\thecallevel)
node[midway, above] {#3};
如您所见,相关节点没有任何可修改的样式,并且没有环境参数传递到其选项。但可以通过修补宏在文档中“动态”进行此类修改\messcall
。
首先,定义一个新的样式:
\tikzset{messcall/.style={above,midway}}
然后加载xpatch
包:
\usepackage{xpatch}
现在修补\messcall
在启动环境时调用的宏messcall
以及绘制该节点的位置,将其替换node[midway,above]
为node[messcall]
:
\xpatchcmd{\messcall}{node[midway, above]}{node[messcall]}{}{}
现在你可以像这样沿着线修改节点的位置:
\tikzset{messcall/.append style={very near start}}
\begin{messcall}%...
除了 之外,还有其他各种选项very near start
,如第 17.8 节所述将节点明确地放置在直线或曲线上TikZ 手册,包括very near end
、near start
/near end
和通用的pos=<fraction>
,其中<fraction>
是 0 到 1 之间的值。
无关注释:如果Text 1
和Text 2
是实际文本,而不是数学,则不要使用数学模式。如果您想要斜体文本,请使用\textit{...}
。
\documentclass[12pt]{article}
\usepackage{pgf-umlsd}
\tikzset{messcall/.style={above,midway}}
\usepackage{xpatch}
\xpatchcmd{\messcall}{node[midway, above]}{node[messcall]}{}{}
\begin{document}
\begin{sequencediagram}
\newinst {a} {AAA}
\newinst {b} {BBB}
\newinst {c} {CCC}
\newinst {d} {DDD}
\newinst {e} {EEE}
\newinst {f} {FFF}
\newinst {g} {GGG}
\postlevel
\tikzset{messcall/.append style={very near start}}
\begin{messcall}{a} {\shortstack[l]{\\
Text1 Text1\\
Text2 Text2 Text2
}} {g}
\end{messcall}
\end{sequencediagram}
\end{document}
答案2
箭头的起点 (从) 和终点 (到) 分别标记为(cf\thecallevel)
和(ct\thecallevel)
,但\thecallevel
可能会改变,因此这些节点在环境之外不可用。因此,您可以使用类似 的内容:
\begin{messcall}{a}{Middle}{g}
\node[above right] at (cf\thecallevel) {Start};
\node[above left] at (ct\thecallevel) {End};
\end{messcall}
笔记:如果在绘制箭头时的值是,则可以稍后通过(cf1)
和访问它们。(ct1)
\thecallevel
1