uml 条件太宽

uml 条件太宽

现在(即 4 小时前)我开始使用tikz-uml,但遇到了一个问题。我正在做以下序列图,

在此处输入图片描述

使用此代码,

\documentclass[a4paper,14pt,twoside, openright]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[italian]{babel}
\usepackage[a4paper, total={17cm, 25cm}]{geometry}
\usepackage{tikz}
\usepackage{tikz-uml}
\usetikzlibrary{intersections}
\usetikzlibrary{calc}
\usetikzlibrary{shapes,arrows}
\usetikzlibrary{positioning}
\usepackage{xstring} 
\usepackage{graphicx}
\usepackage{float}
\begin{document}
\begin{figure}[h!]
    \centering
    \begin{tikzpicture}
        \begin{umlseqdiag}
        \umlactor [x=2] {User}
        \umlobject [x=7] {Sys}
        \umlsdnode [dt=6]{Sys}
        \umlsdnode [dt=2]{User}
        \begin{umlfragment}[type=loop, label={pagato<importo}, inner xsep=5]
           \begin{umlcall}[dt=6, op={Importo (prezzo)}]{Sys}{User}
           \begin{umlcall}[dt=5, op={Pago (Moneta, Banconota)}, type=return]{User}{Sys} 
           \end{umlcall} 
           \end{umlcall} 
        \end{umlfragment}
        \begin{umlcall}[dt=6, op={Resto}]{Sys}{User}
        \end{umlcall}
        \end{umlseqdiag}
    \end{tikzpicture}
    \caption{Sequenza \emph{Pagamento}}
    \label{fig:req1_5}
\end{figure}
\end{document}

但是,正如您所看到的,我让condition覆盖了图表的某些部分。我应该写什么选项才能为其留出足够的空间?

我的意思是放在图表上方、靠近单词的地方也loop可以。

答案1

最简单的解决方法:增加inner xsepifumlfragment15。不过,这也增加了右侧的空间。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz-uml}
\usepackage[T1]{fontenc}
\begin{document}
\begin{tikzpicture}
        \begin{umlseqdiag}
        \umlactor [x=2] {User}
        \umlobject [x=7] {Sys}
        \umlsdnode [dt=6]{Sys}
        \umlsdnode [dt=2]{User}
        \begin{umlfragment}[type=loop, label={pagato<importo}, inner xsep=15] % <-- increased inner xsep to 15
          \begin{umlcall}[dt=6, op={Importo (prezzo)}]{Sys}{User}
            %  \begin{umlcall}[dt=5, op={Pago (Moneta, Banconota)}, type=return]{User}{Sys}
            %  \end{umlcall} 
           \end{umlcall} 
        \end{umlfragment}
        \begin{umlcall}[dt=6, op={Resto}]{Sys}{User}
        \end{umlcall}
        \end{umlseqdiag}
    \end{tikzpicture}
\end{document}

为了移动标签,您可能必须编辑tikz-uml.sty。不过,我通常不建议直接编辑软件包。另一个选择是将环境的整个定义复制到和umlfragment之间的序言中,更改为,然后在那里进行编辑。\makeatletter\makeatother\newenvironment\renewenvironment

无论如何,有问题的是第 4509 行,其中tikz-uml.sty只有代码

at (\[email protected] west)

将其更改为

at (\[email protected] east)

完成后,您可能还想添加inner ysep=2环境umlfragment选项,否则那里就没有空间放置标签。

请注意,当我在 Overleaf 上测试时,嵌套umlcall环境由于某种原因导致错误,这就是为什么在下面(略微简化的)代码中将其注释掉的原因。我不知道为什么,如果这没有发生在你的系统上,那么我想就没有问题。

在此处输入图片描述

\documentclass[border=5mm]{standalone}
\usepackage{tikz-uml}
\usepackage[T1]{fontenc}
\begin{document}
\begin{tikzpicture}
        \begin{umlseqdiag}
        \umlactor [x=2] {User}
        \umlobject [x=7] {Sys}
        \umlsdnode [dt=6]{Sys}
        \umlsdnode [dt=2]{User}
        \begin{umlfragment}[type=loop, label={pagato<importo}, inner xsep=5,inner ysep=2]
          \begin{umlcall}[dt=6, op={Importo (prezzo)}]{Sys}{User}
            %  \begin{umlcall}[dt=5, op={Pago (Moneta, Banconota)}, type=return]{User}{Sys}
            %  \end{umlcall} 
           \end{umlcall} 
        \end{umlfragment}
        \begin{umlcall}[dt=6, op={Resto}]{Sys}{User}
        \end{umlcall}
        \end{umlseqdiag}
    \end{tikzpicture}
\end{document}

相关内容