使用 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
到处使用包是一种很好的做法。