在时序图中旋转并对齐线程名称

在时序图中旋转并对齐线程名称

我是 Latex 的新手,仍在尝试解决问题。我正在使用 pgf-umlsd 包创建一个序列图,该序列图追踪函数之间的消息交换。由于空间限制,我需要图表的宽度尽可能小。因此,我尝试将线程的标签旋转约 30-45 度。目前,这是我能想到的:

我拥有的 这不是我想要的理想图表,因为有时,如果函数名称太长,它会与消息上的标签重叠。我使用 \rotatebox 来实现这一点。

我想要实现的是这样的图表:(请原谅我糟糕的编辑技巧!) 我想要的是

本质上,我想移动线程标签,使其从线程顶部开始并向上倾斜。我该怎么做?

我正在使用 pdflatex 生成图像的 PDF 渲染。这是我使用的代码:

\documentclass[tikz]{standalone}
\usepackage{graphics}
\usepackage{tikz}
\usepackage{pgf-umlsd}
\usepackage[T1]{fontenc}

\begin{document}
\begin{sequencediagram}
\tikzstyle{inststyle}=[]
\pgfumlsdunderlinefalse
\renewcommand{\newthread}[3][gray!30]{
  \newinst{#2}{\rotatebox[x=25pt,y=25pt]{30}{#3}}
  \stepcounter{threadnum}
  \node [below of=inst\theinstnum,node distance=0.8cm]
   (thread\thethreadnum) {};
  \tikzstyle{threadcolor\thethreadnum}=[fill=none]
  \tikzstyle{instcolor#2}=[fill=none]
 }
\newthread{function\string_name\string_one}
{function\string_name\string_one}{}
\newthread{function\string_name\string_two}
{function\string_name\string_two}{}
\newthread{function\string_name\string_three}
{function\string_name\string_three}{}
\newthread{function\string_name\string_four}
{function\string_name\string_four}{}
\newthread{function\string_name\string_five}
{function\string_name\string_five}{}
\newthread{function\string_name\string_six}
{function\string_name\string_six}{}

\mess{function\string_name\string_one}{}{function\string_name\string_two}
\mess{function\string_name\string_two}{}
{function\string_name\string_three}
\mess{function\string_name\string_three}{}
{function\string_name\string_four}
\mess{function\string_name\string_four}{}
{function\string_name\string_five}
\mess{function\string_name\string_five}{}
{function\string_name\string_six}

\end{sequencediagram}
\end{document}

我尝试向 \rotatebox 命令添加选项并更改原点,但没有帮助。

答案1

我重新定义的建议\newinst是使用 s 添加线程名称,label而不是直接使用节点。

代码输出

\documentclass[tikz]{standalone}
\usepackage{pgf-umlsd}
\usepackage[T1]{fontenc}

\begin{document}
\begin{sequencediagram}
\tikzset{inststyle/.style={}}
\pgfumlsdunderlinefalse
\renewcommand{\newinst}[3][2]{
  \stepcounter{instnum}
  \path (inst\thepreinst.east)+(#1,0) node[inststyle,label={[anchor=west,rotate=45,xshift=-5pt]above:#3}] (inst\theinstnum)
  {};
  \path (inst\theinstnum)+(0,-0.5*\unitfactor) node (#2) {};
  \tikzstyle{instcolor#2}=[]
  \stepcounter{preinst}
}

\newthread{function\string_name\string_one}
{function\string_name\string_one}{}
\newthread{function\string_name\string_two}
{function\string_name\string_two}{}
\newthread{function\string_name\string_three}
{function\string_name\string_three}{}
\newthread{function\string_name\string_four}
{function\string_name\string_four}{}
\newthread{function\string_name\string_five}
{function\string_name\string_five}{}
\newthread{function\string_name\string_six}
{function\string_name\string_six}{}

\mess{function\string_name\string_one}{}{function\string_name\string_two}
\mess{function\string_name\string_two}{}
{function\string_name\string_three}
\mess{function\string_name\string_three}{}
{function\string_name\string_four}
\mess{function\string_name\string_four}{}
{function\string_name\string_five}
\mess{function\string_name\string_five}{}
{function\string_name\string_six}

\end{sequencediagram}
\end{document}

相关内容