tikz-uml 无法处理包含下划线的类名

tikz-uml 无法处理包含下划线的类名

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}

结果:

在此处输入图片描述

资料来源:如何以简单的方式在 tikz 图中将任意文本用作节点名称?

将下划线设置为非活动字符是否安全?

减少普通文本中下划线字符的长度(gender_gap)

相关内容