我想使用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
,任何额外的都会覆盖第一个。并且参数中的文本放在单列中tabular
,l
因此文本不会换行,并且您不能使用显示的数学。您可以使用添加多行\\
,就像在普通的 中一样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}