无法覆盖 Unicode 字符定义

无法覆盖 Unicode 字符定义

我希望这个 Unicode 符号,左尖括号,被解释为\langle

在 Mac 上的 TeX Live 上,我尝试了这个:

\documentclass[11pt]{article}
\usepackage[utf8x]{inputenc}

\DeclareUnicodeCharacter{2329}{\langle}

\begin{document}
$ 〈  $
\end{document}

这会产生这个错误:

./foo.tex:7: Package ucs Error: Unknown Unicode character 9001 = U+2329,
(ucs)                possibly declared in uni-35.def.
(ucs)                Type H to see if it is available with options.
Unicode character 9001 = U+2329:
Unicode character 9001 = U+2329:
LEFT-POINTING ANGLE BRACKET
BRA
Character available with following options:
   postscript.

但我不想使用该选项postscript,我只是想定义应该发出的 Unicode 字符 2329 \langle

我究竟做错了什么?

答案1

您可以使用该newunicodechar包,但不能utf8x选择inputenc

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{newunicodechar}
\newunicodechar{〈}{\langle}

\begin{document}
$〈$
\end{document}

如果您想使用ucsutf8x(我不推荐),您必须ucs使用 Postscript 选项加载。然而,与 U+2329 相关的定义是有缺陷的,因为即使加载了pifont,它也不会产生任何结果,而这似乎是必需的。我提供了一种解决方法。

\documentclass[11pt]{article}
\usepackage[postscript]{ucs}
\usepackage[utf8x]{inputenc}

\makeatletter
\AtBeginDocument{%
  \sbox0{\let\Pisymbol\relax〈}% this loads uni-35.def and defines the character
  \@namedef{u-postscript-9001}#1{\langle}% we can now change the definition
}
\makeatother

\begin{document}

$a〈b$
\end{document}

答案2

\documentclass[11pt]{article}
\usepackage[utf8x]{inputenc}
%\DeclareUnicodeCharacter{2329}{bad}
\DeclareUnicodeCharacter{9001}{okay}
\begin{document}
$ 〈  $
\end{document}

相关内容