字符放置问题(XeLaTeX、Linux Libertine 和 Unicode)

字符放置问题(XeLaTeX、Linux Libertine 和 Unicode)

以下测试文档:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Linux Libertine O}
\begin{document}
\end{document}

至少在我的计算机上,使用 XeLaTeX 编译时,会在上面显示第二个字符,而不是在第一个字符之后。

这是字体、XeTeX 的问题还是其他什么问题?(当然,这在我的实际文档中也失败了)

$ xelatex -v
XeTeX 3.1415926-2.4-0.9998 (TeX Live 2012/Debian)
kpathsea version 6.1.0
Copyright 2012 SIL International and Jonathan Kew.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the XeTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the XeTeX source.
Primary author of XeTeX: Jonathan Kew.
Compiled with ICU version 49.1 [with modifications for XeTeX]
Compiled with zlib version 1.2.7; using 1.2.7
Compiled with FreeType2 version 2.4.10; using 2.4.11
Compiled with fontconfig version 2.10.1; using 2.10.2
Compiled with libpng version 1.2.49; using 1.2.49
Compiled with poppler version 0.20.5

$ uname -a
Linux Rykos 3.8.0-24-generic #35-Ubuntu SMP Fri May 31 14:07:41 UTC 2013  x86_64 x86_64 x86_64 GNU/Linux

答案1

同样的问题,但使用 Arial Unicode 可以正常工作,因此问题似乎部分是由于字体造成的。您可以插入字距以避免错位:a\kern0ptɻ

答案2

这是字体中的一个错误, 的字形ɻ有一个 类型的锚点,mark而不是base glyph,因此渲染引擎将其视为组合标记,并将其放置在具有相同锚点但base glyph类型的字形上。这应该报告给字体开发人员。

LuaTeX 没有将其放置在前面的字形上方,这是所用布局引擎的一个错误(luaotfload此处)。

答案3

字体正确地标明了字符宽度,因此您可以使用零字距。

\documentclass{report}

\usepackage{fontspec}

\setmainfont{Linux Libertine O}

\begin{document}

aɻ \textit{aɻ} \textbf{aɻ} \textbf{\textit{aɻ}}

\end{document}

在此处输入图片描述

添加零宽度字距可以解决这个问题,但是会丢失前一个字符的字距信息,但这似乎不是一个很大的损失。

\documentclass{report}

\usepackage{fontspec}
\usepackage{newunicodechar}

\setmainfont{Linux Libertine O}

% fix the strange behavior
\newunicodechar{ɻ}{\leavevmode\kern0pt ɻ}

\begin{document}

aɻ \textit{aɻ} \textbf{aɻ} \textbf{\textit{aɻ}}

\end{document}

在此处输入图片描述

如果使用 Libertinus Serif,就不会出现这样的问题。

相关内容