定义新的 Unicode 字符时出现问题

定义新的 Unicode 字符时出现问题

我有一个文档,它通过 pandoc 从源文件中获取文本(无论如何这都无关紧要)并将其插入而不是 $body$。源文档包含十六进制编辑器中显示的唯一一个符号“C2 AD”。我发现,它是一个 UTF-8 字符“U+00AD”——软连字符。我尝试使用 \DeclareUnicodeCharacter 命令来处理它,方法如下:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\DeclareUnicodeCharacter{00AD}{\-}

\begin{document}
$body$
\end{document}

但 Xelatex 仍然返回错误:“!包 inputenc 错误:在输入编码‘utf8’中,使用的键盘字符未定义(inputenc)。”

当我尝试使用 utf8x 而不是 utf8 时:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8x]{inputenc}
\usepackage[T2A]{fontenc}
\DeclareUnicodeCharacter{00AD}{\-}

\begin{document}
$body$
\end{document}

它返回:“!LaTeX 错误:缺少 \begin{document}”。

我做错了什么?

答案1

\usepackage[utf8]{inputenc}\usepackage[utf8x]{inputenc}对于不支持 UTF-8 的 TeX 引擎是必需的。然后 TeX 会看到两个字节 C2 和 AD,utf8.def或者utf8x.def激活 C2 来捕获 AD,以打印符号或执行\-或诸如此类的操作。

在 XeTeX 中,字节 C2 AD 成为“大”字符 AD。“大”字符意味着字符代码 >= 256 的字符是可能的。然后您可以激活该字符并赋予它您要求的含义:

% XeTeX or LuaTeX
\catcode`\^^ad=\active
\let^^ad=\-

答案2

我不建议使用utf8x; 与包选项utf8x一起inputenc使用inputenx,但它也适用于 XeLaTeX 和 LuaLaTeX,您可以使用newunicodechar

\documentclass{article}

%%% Optional part if you want to use multiple engines
\usepackage{ifxetex,ifluatex}

\newif\ifxetexorluatex
\ifx\ifxetex\ifluatex % see http://tex.stackexchange.com/a/140164/
  \xetexorluatextrue
\fi

\ifxetexorluatex\else
  \usepackage[utf8]{inputenx}
\fi
%%% End of optional part

%%% Use just the following line if you only compile with pdflatex
%\usepackage[utf8]{inputenx}

\usepackage{newunicodechar}
\newunicodechar{­}{\-} % the first argument contains U+00AD

相关内容