tikz-uml 的umlinherit
命令在传递包含下划线的名称时会中断,请考虑:
\documentclass{standalone}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}
\umlinterface[x=-2]{a}{}{}
\umlclass[x=2]{a\_impl}{}{}
\umlinherit{a\_impl}{a}
\end{tikzpicture}
\end{document}
这无法编译:Package pgf Error: No shape named 'a_impl' is known
。在我看来,这显然是一个错误,但是我已经tikz-uml
在我的文档中用过好几个图表了,所以我想知道是否有解决办法。
答案1
您可以在环境中将下划线的类别代码设置为 11 或 12(字母/其他)tikzpicture
。这意味着您不需要对其进行转义。这也意味着您不能再将其_
用于数学下标,而是可以使用\sb{}
。此外,这意味着您需要使用T1
字体编码,否则 LaTeX 不知道如何映射_
到实际的下划线字符。最后,建议选择其他字体,因为 Computer Modern 的下划线非常低(明显低于基线),而 Latin Modern 的下划线非常宽。在下面的 MWE 中,我使用了 Palatino。
如果您在环境中设置了 catcode,那么更改是本地的,因此您可以在文档的其余部分中正常使用下划线。
梅威瑟:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{palatino}
\usepackage{tikz-uml}
\begin{document}
\begin{tikzpicture}
\catcode`\_=12
\umlinterface[x=-2]{a}{}{}
\umlclass[x=2]{a_impl}{$a\sb{1\dots n}$}{}
\umlinherit{a_impl}{a}
\end{tikzpicture}
\end{document}
结果: