我有几个序列图,大多数情况下我总是为所有TikZ-UML
设置选项dt=5
和。是否可以将这两个变量的这些值设置为默认值?padding=3
umlcall
\documentclass{report}
\usepackage{tikz}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}
\begin{umlseqdiag}
\umlbasicobject{B}
\umlbasicobject[x=6]{C}
\begin{umlcall}[op=msg1, return={r0, r1}, dt=4, padding=3]{C}{B}
\end{umlcall}
\begin{umlcall}[op=callback, return={ok}, dt=5, padding=3]{B}{C}
\end{umlcall}
\begin{umlcall}[op=msg2, return=r2, dt=5, padding=3]{C}{B}
\end{umlcall}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}
答案1
环境umlcall
确实
\pgfkeys{/tikzuml/call/.cd,%
dt/.initial={tikzumlEmpty},%
padding/.initial=2,%
[...]
因此,除了纠正环境的定义之外,没有其他方法可以传递不同的初始值。以下是使用 的方法xpatch
。
\documentclass{report}
\usepackage{tikz}
\usepackage{tikz-uml}
\usepackage{xpatch}
\xpatchcmd{\umlcall}
{dt/.initial={tikzumlEmpty}}
{dt/.initial=5}
{}{}
\xpatchcmd{\umlcall}
{padding/.initial=2}
{padding/.initial=3}
{}{}
\begin{document}
\begin{tikzpicture}
\begin{umlseqdiag}
\umlbasicobject{B}
\umlbasicobject[x=6]{C}
\begin{umlcall}[op=msg1, return={r0, r1}, dt=4, padding=3]{C}{B}
\end{umlcall}
\begin{umlcall}[op=callback, return={ok}, dt=5, padding=3]{B}{C}
\end{umlcall}
\begin{umlcall}[op=msg2, return=r2, dt=5, padding=3]{C}{B}
\end{umlcall}
\end{umlseqdiag}
\end{tikzpicture}
\begin{tikzpicture}
\begin{umlseqdiag}
\umlbasicobject{B}
\umlbasicobject[x=6]{C}
\begin{umlcall}[op=msg1, return={r0, r1}, dt=4]{C}{B}
\end{umlcall}
\begin{umlcall}[op=callback, return={ok}]{B}{C}
\end{umlcall}
\begin{umlcall}[op=msg2, return=r2]{C}{B}
\end{umlcall}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}
我排版了原始调用和新的调用(其中未指定值),以查看它们是否相同。
答案2
在这里,我创建了一个新环境,Umlcall
它具有您想要的默认值。我稍微更改了您的 MWE 参数,以显示可以覆盖默认值,并且该方法也可以在没有任何可选参数的情况下工作。默认值在宏中定义\umldefaults
。
\documentclass{report}
\usepackage{tikz}
\usepackage{tikz-uml}
\newcommand\umldefaults{dt=5, padding=3, }
\newenvironment{Umlcall}[3][]{\expandafter\umlcall\expandafter[\umldefaults #1]{#2}{#3}}%
{\endumlcall}
\begin{document}
\begin{tikzpicture}
\begin{umlseqdiag}
\umlbasicobject{B}
\umlbasicobject[x=6]{C}
\begin{Umlcall}[op=msg1, return={r0, r1}, dt=7, padding=5]{C}{B}
\end{Umlcall}
\begin{Umlcall}[op=callback, return={ok}]{B}{C}
\end{Umlcall}
\begin{Umlcall}[op=msg2, return=r2]{C}{B}
\end{Umlcall}
\begin{Umlcall}{C}{B}
\end{Umlcall}
\end{umlseqdiag}
\end{tikzpicture}
\end{document}
答案3
你说得对。tikz-uml 提供了一种通过命令定义全局默认值的方法\tikzumlset
,但我仅为了绘图目的而激活它,即每个可用 UML 元素的绘制、填充和文本选项。我添加了为每个元素的每个选项定义全局默认值的可能性。这将很快在 tikz-uml 的新版本中提供。