我有这个 utf8 编码的输入文件:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{algorithm2e}
\begin{document}
\begin{procedure}
foo
\caption{ö()}
\end{procedure}
\end{document}
但这给了我一个错误:
) (./test.aux)
! Missing \endcsname inserted.
<to be read again>
\unhbox
l.8 \caption{ö()}
不知何故,该\caption
命令不喜欢 ö 字符。有没有办法在 utf8 编码和算法包中使用 ö?
*File List*
article.cls 2007/10/19 v1.4h Standard LaTeX document class
size10.clo 2007/10/19 v1.4h Standard LaTeX file (size option)
inputenc.sty 2008/03/30 v1.1d Input encoding file
utf8.def 2008/04/05 v1.1m UTF-8 support for inputenc
t1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc
ot1enc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc
omsenc.dfu 2008/04/05 v1.1m UTF-8 support for inputenc
algorithm2e.sty 2008/00/00 v3.10 algorithms environments
ifthen.sty 2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)
xspace.sty 2006/05/08 v1.12 Space after command names (DPC,MH)
relsize.sty 2003/07/04 ver 3.1
答案1
Algorithm2e 尝试在您的示例中定义命令 \csname ö\endcsname。问题是“ö”已经是一个命令,并且 - 由于您使用的是 OT1 字体编码 - 它包含无法在 \csname 中使用的命令。您可以使用\usepackage[T1]{fontenc}
。这将解决 ö 的问题。但总的来说,我确实发现 algorithm2e 定义命令而不进行检查相当成问题。我建议使用 nokwfunc 选项。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage%[nokwfunc] % enable it to see the difference
{algorithm2e}
\usepackage[T1]{fontenc}
\begin{document}
\section{A}
\begin{procedure}
foo \caption{ö()}
\end{procedure}
\begin{procedure}
foo \caption{section()}
\end{procedure}
\section{B}
\end{document}
答案2
我不相信可以用变音符号定义宏名称,但这里却发生了这种情况。您\caption{ö()}
将使用 创建一个命令 \ö csname
。例如,这可以完美运行。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{algorithm2e}
\begin{document}
\begin{procedure}
\caption{test(disjöint decomposition)}
\end{procedure}
\end{document}
问题不在于 utf-08 或变音符号,只是不能将变音符号用作宏名。