我是 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}