在 pgf-umlsd 中将标签与箭头平行对齐

在 pgf-umlsd 中将标签与箭头平行对齐

这是使用以下代码的序列图的 MWE pgf-umlsd:(取自这里

\documentclass{article}
\usepackage{float}
\usepackage{tikz}
\usetikzlibrary{positioning, fit, calc, shapes, arrows}
\usepackage[underline=false]{pgf-umlsd}
\begin{document}

\begin{figure}[H]
    \centering
    \begin{sequencediagram}
        \newinst{c}{Client}
        \newinst[6]{s}{Server}

        \mess[1]{c}{Longer label}{s}
        \mess[1]{s}{label}{c}
        \mess[1]{c}{label}{s}
        \mess[1]{s}{Longer label}{c}
    \end{sequencediagram}
    \caption{Client-Server messaging}
\end{figure}
\end{document}

在此处输入图片描述

如何才能使每个标签与其对应的箭头平行对齐?

答案1

查看代码,pgf-umlsd.sty我们发现其\mess定义为

% message between threads
% Example:
% \mess[delay]{sender}{message content}{receiver}
\newcommand{\mess}[4][0]{
  \stepcounter{seqlevel}
  \path
  (#2)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess from) {};
  \addtocounter{seqlevel}{#1}
  \path
  (#4)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (mess to) {};
  \draw[->,>=angle 60] (mess from) -- (mess to) node[midway, above]
  {#3};

  \node (#3 from) at (mess from) {};
  \node (#3 to) at (mess to) {};
}

带有该选项的节点midway就是我们要找的节点。我们可以看到,\mess没有提供任何向该节点添加配置的方法。

我只需复制代码\mess,调用它\messS,然后在该代码中添加节点sloped的选项midway

顺便说一句:请不要使用[H]浮动位置。这通常表示您没有以正确的方式使用浮动。

相关内容