在 pgf-umlsd 中配置箭头

在 pgf-umlsd 中配置箭头

生成的标准图表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

是的,可以通过重新定义来实现\mess;在下面的例子中,我使用了xparse轻松添加第五个可选参数,让您可以控制\draw用于箭头的命令;特别是,这允许您指定不同的箭头提示并使用键shorten

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

\RenewDocumentCommand{\mess}{O{0}mmmO{>=angle 60}}{%
  \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[->,#5] (mess from) -- (mess to) node[midway, above]
  {#3};

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

\begin{document}

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

        \mess[1]{c}{Longer label}{s}[{-]},shorten >=20pt]
        \mess[1]{s}{label}{c}[>=hooks,shorten >=10pt]
        \mess[1]{c}{label}{s}
        \mess[1]{s}{Longer label}{c}
    \end{sequencediagram}
    \caption{Client-Server messaging}
\end{figure}

\end{document}

在此处输入图片描述

为了生成您在问题中显示的精确的箭头,您需要例如拥有的 CVS 版本,那么您已经在库pgf中拥有这种箭头。arrows.meta

相关内容