如何调整序列图中箭头上方文本的位置

如何调整序列图中箭头上方文本的位置

如何调整序列图中箭头上方文本的位置。例如,以下代码产生的输出中“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 endnear start/near end和通用的pos=<fraction>,其中<fraction>是 0 到 1 之间的值。

无关注释:如果Text 1Text 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)\thecallevel1

相关内容