如何明确地加宽用创建的序列图pgf-umlsd
,或者理想情况下,将其设置为所需的宽度以显示其标签而不重叠?
这是一个非常简单的standalone
文档,它用作A Long Method Name
序列图的“调用”部分。不幸的是,这与Client
和下的两个序列重叠Server
。
是否可以将其设置sequencediagram
为足够宽以容纳文本?
我查阅了本网站上的一些答案,这个文件,解释了如何使用\postlevel
来包装东西。这个答案建议使用\unitbox
,但到目前为止,这只调整了垂直间距,并没有强制图表变宽。这个问题的答案(https://tex.stackexchange.com/q/249200)似乎没有显示一种配置整个序列图以适应其标签宽度的方法。
\documentclass[preview]{standalone}
\usepackage{pgf-umlsd}
\begin{document}
\begin{figure}
\begin{sequencediagram}
\newthread{A}{Client}{}
\newthread{B}{Server}{}
\begin{call}{A}{A Long Method Name}{B}{}
\end{call}
\end{sequencediagram}
\end{figure}
\end{document}
答案1
稍微看一下代码,乍一看,似乎没有办法按照程序包的编写方式做到这一点。一种可能的解决方法是为线程定义一个新的宏,其中包含该线程的 xshift 的另一个强制参数。这有点粗糙,但适用于这种特定情况。
(顺便说一下,边界框有点错误,如果你运行下面的示例你就会发现,我还没有尝试修复它。)
\documentclass{standalone}
\usepackage{pgf-umlsd}
% based on \newthread macro from pgf-umlsd.sty
% add fourth argument (third mandatory) that defines the xshift of a thread.
% that argument gets passed to \newinst, which has an optional
% argument that defines the shift
\newcommand{\newthreadShift}[4][gray!30]{
\newinst[#4]{#2}{#3}
\stepcounter{threadnum}
\node[below of=inst\theinstnum,node distance=0.8cm] (thread\thethreadnum) {};
\tikzstyle{threadcolor\thethreadnum}=[fill=#1]
\tikzstyle{instcolor#2}=[fill=#1]
}
\begin{document}
\begin{sequencediagram}
\newthread{A}{Client}
\newthreadShift{B}{Server}{4cm}
\begin{call}{A}{A Long Method Name}{B}{}
\end{call}
\end{sequencediagram}
\end{document}