tikz-uml 序列图“Extra \or”错误

tikz-uml 序列图“Extra \or”错误

我正在编译以下使用的代码tikz-uml包裹。

\documentclass{article}
%\usepackage{pgf}
%\usepackage{tikz}
\usepackage{tikz-uml}

\begin{document}
\begin{tikzpicture}
    \begin{umlseqdiag}
        \umlobject{a}
        \begin{umlcall}{a}{a}
            \begin{umlcall}{a}{a}           % line 11
            \end{umlcall}                   % line 12
        \end{umlcall}
    \end{umlseqdiag}
\end{tikzpicture}
\end{document}

在一台机器上编译没有问题。 但是在另一台机器上,它给出了错误。 两台机器都使用 Windows 7 64 位、MikTeX 2.9 64 位。错误消息:

! Extra \or.
\ifthenelse #1->\toks@ {#1}\TE@repl \or
                                        \TE@or \TE@repl \and \TE@and \TE@rep...
l.12            \end{umlcall}
I'm ignoring this; it doesn't match any \if.

有人知道原因和解决方法吗?我知道这是由于umlcall环境内部的另一个环境造成的。实际上,取消注释第 11 行和第 12 行就足以使错误消失,但结果显然不一样。

该问题不依赖于包含 PGF 或 TikZ 包,也不依赖于定义inputenc或。它也不依赖于对象调用自身的fontenc事实。a

编辑1: 我错了,我测试过的代码和在其他机器上运行的代码实际上有点不同(确切地说:环境中的所有内容tikzpicture都是更大文件的一部分)。

\usepackage[language]{babel}解决办法是在序言中添加。 但为什么文档对此只字未提……?

编辑2: 想要的结果是:

tikz-uml 嵌套自 umlcall

答案1

解决方案是使用babel您选择的语言的包,即在序言中添加一行:

\usepackage[english]{babel}

当然,您可以更改english为使用不同的语言。

该软件包的文档tikz-uml没有提及这个问题,也没有提到“所需软件包”之类的内容。

更新:babel我通过修改文件 消除了加载包的必要性tikz-uml.sty。事实上,问题出在环境定义中的某个地方umlcall,而原因在于\ifthenelse命令。因此,我将第 3397 行从:

\ifthenelse{\equal{\tikzumlCallStartNodeName}{\tikzumlCallEndNodeName}}{%

\ifstrequal{\tikzumlCallStartNodeName}{\tikzumlCallEndNodeName}{%

在包文件开头添加以下行之后:

\RequirePackage{etoolbox}

我也在3403行进行了类似的修改,得到:

  \ifstrequal{\tikzumlcallreturn}{tikzumlEmpty}{%

相关内容