正确的二合字母处理和渲染

正确的二合字母处理和渲染

克罗地亚语中有三种二合字母(许多其他语言也有):dž、lj 和 nj。常见的排版方式不包括使用专用的 Unicode 代码点(存在)——人们只是将它们输入为两个字符。

假设字体包含专用符号,那么正确的方法是什么,例如将(源中的两个字符)渲染为“dž”(输出中的单个字符)?也许babel/ polyglossia?有这样的例子吗?

如果字体不包含专用符号,是否也支持“回退”到“dž”(输出两个字符)?

编辑1 感谢提供连字变体!这是我想要实现的想法(pdflatex 变体):

\documentclass{article}
\usepackage{lmodern} % I know that my font has appropriate Unicode slots for digraphs...
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[croatian]{babel}
\languageattribute{croatian}{unicodedigraphs} % ...so I will explicitly load something implemented in babel's Croatian definition file...

\begin{document}
dž % ...and these consecutive characters will be automatically rendered as U+01C6
\end{document}

可以实现这样的目标吗?使用和增强babel(pdflatex) 和polyglossia(xelatex) 是正确的方法吗?

编辑2 我想到用 catcodes 实现一些东西...一旦我取得进展就回来。

答案1

许多字体不包含这些二合字母,因此在源中手动输入它们可能会导致 PDF 文件缺少字形。

liga大多数包含二合字母的字体似乎通过功能(默认开启)或calt功能(在 中默认开启xetex;请确保在 中将其打开luatex)或有时dlig功能(默认情况下不开启)将部件替换为二合字母。

如果您的字体包含二合字母,但没有提供明显的使用方法,并且您正在使用luatex,则可以创建一个功能或添加到现有功能。我还没有找到一种可以准确说明您所想情况的免费字体,但这是 Heuristica 中的 dz 二合字母 (U+02a3)。

如果您不执行任何操作,您将获得在源中输入的组件或二合字母:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Heuristica}
\begin{document}
dz ʣ
\end{document}

上述例子的输出

现在让我们将“dz”添加到默认连字中:

\documentclass{article}
\usepackage{fontspec}
\directlua{
  fonts.handlers.otf.addfeature{
    name = "liga",
    type = "ligature",
    data = {
      ʣ = { "d", "z" },
    },
  }
}
\setmainfont{Heuristica}
\begin{document}
dz
\end{document}

第二个示例的输出

输出中有您想要的 unicode 字形,但您不再需要直接在源中输入它。如果您想更改为没有字形的字体,您只需删除对的调用\directlua并调整对的调用\setmainfont(而如果您直接在源中输入二合字母,则需要在整个文档中搜索它们并用它们的组件替换它们)。

我唯一一次直接在源代码中输入二合字母的时候是当相关语言有时要求组成字符保持分开时(例如,在法语中,有些词需要“œ”而其他词需要“oe”)。

相关内容