我在使用 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
。