У меня возникла проблема с использованием TikZ-UML, это хорошая библиотека, но в ней есть ошибка (или она не работает в моей конфигурации). LaTeX переходит в бесконечный цикл, если я использую все поведения «do», «exit» и «entry» в диаграмме состояний UML.
Этот пример упрощен сдокументация.
\documentclass{article}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}
\begin{umlstate}[name=state, do=b, exit=c, entry=d]{state}
\end{umlstate}
\end{tikzpicture}
\end{document}
Если я удаляю "do", "exit" или "entry", то все в порядке. Со всеми ними я получил ошибку:
! TeX capacity exceeded, sorry [input stack size=5000].
Есть ли у вас какие-либо подсказки?
решение1
Это действительно ошибка. Я не знаю, какая у меня версия, но если вы откроете tikz-uml.sty
и перейдете к строке 2857, вы обнаружите рекурсию, поскольку содержимое не развернуто (я думаю, что предполагалось собрать текст, поступающий из этих опций);
\def\tikzumlStateText{\tikzumlStateTextOld \\ do/\umlstatedo}%
Измените его на (так как его нет в CTAN, он, вероятно, есть в вашем локальном texmf),
\expandafter\def\expandafter\tikzumlStateText\expandafter{\tikzumlStateTextOld\\ do/\umlstatedo}%
Тогда это работает, независимо от порядка.
\documentclass{article}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}
\begin{umlstate}[name=state,
entry=d,
exit=b,
do=c,
]{state}
\end{umlstate}
\end{tikzpicture}
\end{document}