我正在编译以下使用的代码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: 想要的结果是:
答案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}{%