当使用十六进制代码输入字符时,LuaTeX 和 XeTeX 不允许对多字节字符使用两个插入符号 ^^xx。虽然可以^^^^041f
正常工作(显示西里尔字母“Т”),^^d0^^9f
但(与 UTF-8 中的“Т”相同)会显示两个字形。MWE:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{CMU Serif}
\usepackage[russian]{babel}
\begin{document}
A word in Russian: ^^d0^^9f^^d1^^80^^d0^^b8^^d0^^b2^^d0^^b5^^d1^^82^^21
Four carets work fine: ^^^^041f^^^^0440^^^^0438^^^^0432^^^^0435^^^^0442^^^^0021
\end{document}
对于 PdFTeX 引擎,^^xx^^xx
只要inputenc
使用正确的编码,该符号就可以起作用:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\begin{document}
A word in Russian: ^^d0^^9f^^d1^^80^^d0^^b8^^d0^^b2^^d0^^b5^^d1^^82^^21
\end{document}
所以,问题是:这真的是 LuaTeX 和 XeTeX 引擎中的错误吗?或者我应该向应该与这些引擎一起使用的软件包报告错误,并使用^^xx^^xx
符号(例如https://ctan.org/tex-archive/biblio/bibtex/contrib/gost?lang=en ugost2008.bst
具体来说)?
答案1
这不是一个错误,只是你输入了错误的字符。输入
^^d0^^9f
有效,但是两个字符序列 U+00D0 U+009F 不是单个字符 U+0422
没有必要使用^^
编码 UTF-8 字节,只需直接使用^^^^0422
或\Uchar"0422
或字符即可Т
。最后一种形式,使用 Т 的优点是 pdflatex 的 inputenc 解码器也能理解它。