什么是 Identity-H 编码,是否应该避免使用,如果应该,如何避免?

什么是 Identity-H 编码,是否应该避免使用,如果应该,如何避免?

当我创建包含多种字体(使用 xelatex 和 xeCJK)的文档时,所有这些字体的子集都包含在文档中。evince 中的“字体”选项卡中显示的文档属性显示以下内容:

  1. 大多数字体显示为名称-样式-Identity-H,例如 LibertinusSans-Bold-Identity-H (但有些不是以身份-H)。
  2. 所有这些都进一步表明类型 1C (CID)或者TrueType(客户识别号)
  3. 在所有这些的下方都有一行字:编码:Identity-H

(当我检查从别人那里得到的 pdftex 创建的文档中的“字体”选项卡时,字体都是类型 1编码:自定义. 其他文档有其他编码或也身份-H

此主题在 Adob​​e 论坛上,有人写道

当使用此编码时,要提取文本,PDF 还需要一个“ToUnicode CMap”。您无法看到其中是否存在一个。

Identity-H 的真正含义是什么以及 xelatex 对此有何表现?

答案1

在 XeLaTeX 中,您通常不使用经典的 8 位字体,而是使用 OpenType 或 TrueType 字体。这些字体可以包含超过 256 个字形,因此在 PDF 文件中,它们不能轻易地表示为“简单字体”,而必须表示为“CID 字体”。

对于简单字体,编码将 0 到 255 之间的字形索引映射到字形名称,然后用于识别字体中的正确字形。

CID 字体用 CID(只是另一个数字)替换字形名称。因此,对于 CID 字体,用于表示 PDF 文件中字符的数字通过编码重新映射到 CID,然后转换为实际 GID(字体文件中字形的位置)。使用预定义的 CID 编码(它们称为 CMap,但它们与 ToUnicode CMap 不同)可以帮助 PDF 查看器了解哪个字符由特殊字形表示,但与字形名称类似,此映射有时需要调整并且可能取决于 PDF 查看器。因此,手动设置 ToUnicode CMap(将 Unicode 值与每个字形相关联的映射)通常更容易。这通常在 XeTeX 和 LuaTeX 中完成。

在这种情况下,CID 方案可以简化:通过使用 CMap/encoding Identity-H,我们基本上可以说:“我们写入 PDF 文件的字符代码已经是 CID,您不必重新映射任何内容。”这使我们能够跳过该过程的一个步骤。此外,我们通常使用字体,其中 CID 也与 GID 相同,因此我们可以将 GID 写入 PDF 文件,而不必担心所有这些与 CID 相关的东西。

因此,Identity-H 基本上是在说:“我们跳过整个编码阶段,直接在 TeX 中处理所有与编码相关的业务。”这应该不会成为问题,除非您不添加 ToUnicode CMap,否则 PDF 查看器无法将字形映射到 Unicode 值。但默认情况下,XeTeX插入这样的 ToUnicode CMap,这样您就万事俱备了。(一个简单的测试,看看 Identity-H 字体是否存在 ToUnicode CMap:如果复制和粘贴大部分都有效,那么您肯定有一个 ToUnicode CMap)

相关内容