在下面的小例子中,我在 XeLaTeX 和 LuaLaTeX 中得到了意想不到但不同的结果:
\documentclass{article}
\usepackage{fontspec}
\setlength\parindent{0pt}
\newcommand*\x{\rule{1cm}{1cm}}
\begin{document}
\x\,\x \par
\x~\x \par
\x \x \par % U202F ('NARROW NO-BREAK SPACE') between
\x \x \par % U2009 ('THIN SPACE') between
\end{document}
- XeLaTeX:第二、第三和第四个方块的宽度距离相同。
- LuaLaTeX:第三和第四个方块没有距离。
我希望情况三和情况四的距离与情况一的距离一样小,并且两个引擎都一样。这些是错误吗,或者我可以自己纠正吗?
答案1
如果你查看日志文件,你会发现
Missing character: There is no <E2><80><AF> in font [lmroman10-regular]:mapping=tex-text!
Missing character: There is no <E2><80><89> in font [lmroman10-regular]:mapping=tex-text!
(我使用了“ASCII 表示”,因此显示的是 UTF-8 字节)。UTF-8 序列对应于
<E2><80><AF>
→ U+202F 狭窄无间断空格
<E2><80><89>
→ U+2009 细空格
如果字体在这些插槽中没有字形,则结果是打印一个矩形(旧版本的 XeTeX)、一些空格或什么都没有。
您可以使用以下方法避免newunicodechar
:
\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}
\setlength\parindent{0pt}
\newcommand*\x{\rule{1cm}{1cm}}
\newunicodechar{^^^^202f}{~}
\newunicodechar{^^^^2009}{\,}
\begin{document}
\x\,\x \par
\x~\x \par
\x \x \par % U202F ('NARROW NO-BREAK SPACE') between
\x \x \par % U2009 ('THIN SPACE') between
\end{document}
您可以插入显式字符,而不是^^^^
序列;但在空格字符的情况下,这很尴尬,因为编辑器不会区分它们;但是
\newunicodechar{ }{~} % U+202F NARROW NO-BREAK SPACE
\newunicodechar{ }{\,} % U+2009 THIN SPACE
也可以。