现在(即 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 xsep
ifumlfragment
到15
。不过,这也增加了右侧的空间。
\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}