Tikz UML 状态文本不起作用

Tikz UML 状态文本不起作用

我想使用umlstate文本我的 uml 状态图中的宏。我使用 tikz-uml 1.0 版本,但宏什么都不做,因为在状态主体或任何其他地方都没有添加文本。有没有人遇到过类似的问题并知道解决方法?

\documentclass[a4paper,12pt]{article}
\usepackage{tikz-uml}

\begin{document}
\begin{tikzpicture}
\begin{umlstate}[x=0,y=-4, name=horizontal, fill=white]{Waagrecht}
\umlstatetext{Some State Content}
\end{umlstate}
\end{tikzpicture}

\end{document}

编辑:在这个例子中它确实有效。但是一旦示例变得更加复杂,它就不会再显示它了:

\begin{tikzpicture}
\begin{umlstate}[name=main]{Großkanonischer-Monte-Carlo-Schritt}
\umlstateinitial[x=4, y=1.75, name=mainInit]
\begin{umlstate}[y=-2, name=input, fill=gray!20]{\shortstack{Einfügen\\ Wahrscheinlichkeit $\alpha_{ins} = \frac{2M^2}{N+1}\cdot e^{\beta \cdot }$}}
\umlstateinitial[x = 4, name=initInput]
\begin{umlstate}[x=0,y=-4, name=horizontal, fill=white]{Waagrecht}
\umlstatetext{Some

State

Content

$$x = y$$
}
\umlstatetext{Teste auf Kollision}

\umlstatedecision[x=4, y=0, name=decision]
\umlstatefinal[x=1, y=-3, name=collision]
\umlHVtrans[arg=transition1, pos=1.5]{decision}{collision}
\begin{umlstate}[x=4, y=-3, name=noCollision]{Keine Kollision}
\end{umlstate}
\umltrans[arg=]{decision}{noCollision}
\end{umlstate}
\begin{umlstate}[x=8,y=-4, name=vertical, fill=white]{Senkrecht}
\umlstatedecision[ x=4, y=0, name=decision]
\begin{umlstate}[x=1, y=-3, name=noCollision]{Keine Kollision}
\end{umlstate}
\umlbasicstate[x=4.5, y=-3, name=collision]{Kollision}
\end{umlstate}
\umlHVtrans[arg=transition1, pos=1.5]{initInput}{vertical}
\umlHVtrans[arg=transition1, pos=1.5]{initInput}{horizontal}
\end{umlstate}
\umlHVtrans[arg=$\frac{1}{2}$, pos=1.5]{mainInit}{input}
\end{umlstate}
\end{tikzpicture}

答案1

首先,似乎\umlstatetext一个环境中只能有一个umlstate,任何额外的都会覆盖第一个。并且参数中的文本放在单列中tabularl因此文本不会换行,并且您不能使用显示的数学。您可以使用添加多行\\,就像在普通的 中一样tabular

\documentclass[a4paper,12pt]{article}
\usepackage{tikz-uml}    
\begin{document}
\begin{tikzpicture}
\begin{umlstate}[x=0,y=-4, name=horizontal, fill=white]{Waagrecht}
\umlstatetext{%
Some State Content\\
And more}
\end{umlstate}
\end{tikzpicture}
\end{document}

上述代码的输出

关于更复杂的例子,如果你有一个嵌套umlstate环境,你需要添加\umlstatetext 嵌套环境。如果我直接理解了代码,\umlstatetext那么

\def\tikzumlStateText{#1}

umlstate环境确实

\def\tikzumlStateText{tikzumlEmpty}%

在环境内容之前,即它“清空”了 的现有定义\tikzumlStateText

因此在更大的例子中实现这一点:

\documentclass[a4paper,12pt]{article}
\usepackage{tikz-uml}    
\begin{document}    
\begin{tikzpicture}
\begin{umlstate}[name=main]{Großkanonischer-Monte-Carlo-Schritt}
\umlstateinitial[x=4, y=1.75, name=mainInit]
\begin{umlstate}[y=-2, name=input, fill=gray!20]{\shortstack{Einfügen\\ Wahrscheinlichkeit $\alpha_{ins} = \frac{2M^2}{N+1}\cdot e^{\beta \cdot }$}}
\umlstateinitial[x = 4, name=initInput]
\begin{umlstate}[x=0,y=-4, name=horizontal, fill=white]{Waagrecht}
\umlstatedecision[x=4, y=0, name=decision]
\umlstatefinal[x=1, y=-3, name=collision]
\umlHVtrans[arg=transition1, pos=1.5]{decision}{collision}
\begin{umlstate}[x=4, y=-3, name=noCollision]{Keine Kollision}
\end{umlstate}
% note this is placed after the nested umlstate environment
\umlstatetext{Teste auf Kollision}
\umltrans[arg=]{decision}{noCollision}
\end{umlstate}
\begin{umlstate}[x=8,y=-4, name=vertical, fill=white]{Senkrecht}
\umlstatedecision[ x=4, y=0, name=decision]
\begin{umlstate}[x=1, y=-3, name=noCollision]{Keine Kollision}
\end{umlstate}
\umlbasicstate[x=4.5, y=-3, name=collision]{Kollision}
\end{umlstate}
\umlHVtrans[arg=transition1, pos=1.5]{initInput}{vertical}
\umlHVtrans[arg=transition1, pos=1.5]{initInput}{horizontal}
\end{umlstate}
\umlHVtrans[arg=$\frac{1}{2}$, pos=1.5]{mainInit}{input}
\end{umlstate}
\end{tikzpicture}
\end{document}

第二个代码的输出

相关内容