tikz UML 和重音符号的问题

tikz UML 和重音符号的问题

我在使用 tikzuml 和 accents 时遇到问题。以下方法可行:

\usepackage[latin1]{inputenc}
\usepackage[english,frenchb]{babel}
\usepackage{tikz}
\usepackage{tikz-uml}
...
\begin{tikzpicture}
\begin{umlsystem}{e}
\umlusecase{{\'e}}
\end{umlsystem}
\end{tikzpicture}

而下面的代码则不然(只有 \umlcase 行不同):

\usepackage[latin1]{inputenc}
\usepackage[english,frenchb]{babel}
\usepackage{tikz}
\usepackage{tikz-uml}
...
\begin{tikzpicture}
\begin{umlsystem}{{\'e}}
\umlusecase{{\'e}}
\end{umlsystem}
\end{tikzpicture}

我收到一个错误:“缺少 \endcsname 插入”。因此,似乎在“umlsystem”环境中使用重音符号存在问题。

有人知道如何解决这个问题吗?

答案1

该包还使用该参数umlsystm来形成节点名称,其中重音字符无效。

您可以通过存储用于节点名称的参数的“字符串化”版本来修补它(并建议作者做类似的事情)。

regexpatch比使用更容易xpatch,因为第二个补丁必须应用九次。

基本上,九次出现的\tikzumlSystemName-和 单个 都应该被或(\tikzumlSystemName)替换; 的定义被添加在环境的开始处:它用来获取字符串,而不是可打印字符。\tikzumlSystemNameLabel-(\tikzumlSystemName)\tikzumlSystemNameLabel\detokenize

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[english,frenchb]{babel}
\usepackage{tikz}
\usepackage{tikz-uml}
\usepackage{regexpatch}

\makeatletter
\xpatchcmd{\umlsystem}
  {\def\tikzumlSystemName}
  {\edef\tikzumlSystemNameLabel{\detokenize{#2}}\def\tikzumlSystemName}
  {}{}
\xpatchcmd*{\endumlsystem}
  {\tikzumlSystemName-}
  {\tikzumlSystemNameLabel-}
  {}{}
\xpatchcmd*{\endumlsystem}
  {(\tikzumlSystemName)}
  {(\tikzumlSystemNameLabel)}
  {}{}
\makeatother

\begin{document}
\begin{tikzpicture}
\begin{umlsystem}{{\'e}}
\umlusecase{{\'e}}
\end{umlsystem}
\end{tikzpicture}
\begin{tikzpicture}
\begin{umlsystem}{é}
\umlusecase{é}
\end{umlsystem}
\end{tikzpicture}

\end{document}

您也可以直接使用重音字符,如第二个示例所示。这里我使用了utf8,但它也适用于latin1

enter image description here

相关内容