重新定义 TikZ-UML 序列图中的选项

重新定义 TikZ-UML 序列图中的选项

我有几个序列图,大多数情况下我总是为所有TikZ-UML设置选项dt=5和。是否可以将这两个变量的这些值设置为默认值?padding=3umlcall

\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 的新版本中提供。

相关内容