在 Emacs AucTeX 中从 LaTeX 引擎更改为 XeTeX 引擎时出现编码错误

在 Emacs AucTeX 中从 LaTeX 引擎更改为 XeTeX 引擎时出现编码错误

使用 LaTeX 引擎(AUCTeX 11.86)编译时,以下 MWE 运行良好

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}

\begin{document}
áéíóúñ
\end{document}

但是,使用 XeTeX 引擎时出现以下错误:

ERROR: Package inputenc Error: Unicode char \u8:áéí not set up for use with LaTeX

--- TeX said ---
.

See the inputenc package documentation for explanation.

如果我将输入编码更改为 Latin-1,文档就会正确编译。为什么 XeTeX 拒绝 UTF-8 编码?

我尝试了直接以西班牙语排版以及AUCTeX 和 XeTeX但都无济于事。

答案1

\usepackage[utf8]{inputenc}使用 XeLaTeX 是错误的,因为 XeTeX 直接读取 UTF-8,并且该包会混淆其解释字符的方式。

输入 Xe(La)TeX 的文件应始终采用 UTF-8 编码(UTF-16 和 UTF-32 也行,但 UTF-8 似乎更可取)。可以指定不同的输入编码,但这是针对旧文档的,不是您想要的。

pdflatex如果你想要一个同时使用和排版的文档xelatex,那么你可以尝试

\documentclass{article}

\usepackage{ifxetex}

\ifxetex
  \usepackage{fontspec}
\else
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage{lmodern}
\fi

\begin{document}
áéíóúñ
\end{document}

并将文件保存为 UTF-8。您可以babel在两种情况下使用,因为西班牙语基于拉丁字母;但是,对于 XeLaTeX,切换到 Polyglossia 可能会更好:

\documentclass{article}

\usepackage{ifxetex}

\ifxetex
  \usepackage{fontspec}
  \usepackage{polyglossia}
  \setmainlanguage{spanish}
\else
  \usepackage[T1]{fontenc}
  \usepackage[utf8]{inputenc}
  \usepackage[spanish]{babel}
  \usepackage{lmodern}
\fi

\begin{document}
áéíóúñ
\end{document}

请注意,fontspec默认使用拉丁现代字体的 OpenType 版本。

答案2

这是一篇旧帖子,不再正确。使用 TeX Live 2020,问题的 MWE 现在可以正常工作,因为该包现在被忽略,只会产生警告,而不会产生致命错误:

Package inputenc Warning: inputenc package ignored with utf8 based engines.

这确实不是意味着现在inputenc到处使用包是一种很好的做法。

相关内容