防止 LuaLaTeX 分割变音符号

防止 LuaLaTeX 分割变音符号

这是一个简单的例子:

\documentclass{minimal}
\usepackage{fontspec}\setmainfont{Cambria}
\begin{document}aöz\end{document}

使用 将其编译为 PDFlualatex并使用 提取文本pdftotext,我得到字符串aö z,即:

U+0061(a) U+006f(o) U+0308(combining diaeresis) U+0020(space) U+007a(z)

这样做有两个问题:有一个不必要的空格(由于一些 PDF 格式技巧,未压缩的数据流显示Tm[<…>125<01C5>-124<…>]TJ),并且我不希望将变音符号拆分为基本字符和组合字符,因为出于某种原因,在更改字体大小时,它会呈现奇怪的效果。我希望输出为

U+0061(a) U+00f6(ö) U+007a(z)

最糟糕的是:使用\setmainfont{Lucida Grande},我得到的正是这种结果。但使用 Cambria 时不会出现这种情况。

两者都是 TTF 格式。检查 中的字体fontforge显示,它们的U+00f6字形都定义为由 组成U+006f U+0308,唯一的区别是 Cambria 将其 OTF 类定义为“基本字形”,而在 Lucida Grande 中则为“自动”(不知道这是什么意思)。


这是一个fontspec具体的问题:

\documentclass{minimal}
\usepackage{luaotfload}
\font\foo={name:Cambria} at 10pt
\begin{document}
aöz \foo aöz
\end{document}

生成我期望的结果,第一个变音符号也如预期的那样丢失:

U+0061(a) U+007a(z) U+0020(space) U+0061(a) U+00f6(ö) U+007a(z)

\documentclass{minimal}
\usepackage{fontspec}
\begin{document}
aöz \fontspec{Cambria} aöz
\end{document}

生成

U+0061(a) U+00f6(ö) U+007a(z) U+0020 U+0061(a) U+006f(o) U+0308 U+0020 U+007a(z)

使用\DeclareUTFcharacter{x00F6}{\foo}和替换时ö也是一样\foo{},所以我想这不是xunicode的错?

答案1

这个答案我了解到有一个Renderer=Basic选项会导致未知数量的副作用

\documentclass{minimal}
\usepackage{fontspec}
\defaultfontfeatures{Renderer=Basic}
\begin{document}
aöz \fontspec{Cambria} aöz ffi
\end{document}

字体似乎不使用连字,我想使用特殊功能,例如VerticalPosition=Numerator 对于粗俗的分数,我可以直接切换到Renderer=Full

但是,有一种既能防止它在我的 unicode 中混乱,又能保留所有功能的方法会更好……


从那时起,我一直在使用 Basic 渲染器,它似乎毕竟支持字体的内置连字符(对于 Cambria 查看ti),但没有像破折号那样的 TeX 连字符---,需要将它们输入为 unicode

相关内容