![在 pgf-umlsd 中将标签与箭头平行对齐](https://linux22.com/image/358841/%E5%9C%A8%20pgf-umlsd%20%E4%B8%AD%E5%B0%86%E6%A0%87%E7%AD%BE%E4%B8%8E%E7%AE%AD%E5%A4%B4%E5%B9%B3%E8%A1%8C%E5%AF%B9%E9%BD%90.png)
这是使用以下代码的序列图的 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]
浮动位置。这通常表示您没有以正确的方式使用浮动。