![xdvipdfmx 拒绝处理多个变音符号](https://linux22.com/image/270356/xdvipdfmx%20%E6%8B%92%E7%BB%9D%E5%A4%84%E7%90%86%E5%A4%9A%E4%B8%AA%E5%8F%98%E9%9F%B3%E7%AC%A6%E5%8F%B7.png)
因此,我正在尝试排版一本包含汉字和拼音的书,而 xelatex 却出现了错误。我设法将问题缩小到下面的双重重音符号 ê̄:
\documentclass{book}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setmainfont[Mapping=tex-text]{Sun-ExtA}
\begin{document}
ê̄
\end{document}
那是 u+00eaLATIN SMALL LETTER E WITH CIRCUMFLEX
后跟 u+0304 COMBINING MACRON
。现在这些吸盘在我的 osx mountain lion 上真的表现得不太好——根据应用程序的不同,它们被渲染得很丑陋,不想被复制粘贴,出现各种错误。但最糟糕的是,它们让 xelatex——更具体地说——xdvipdfmx
退出:
otf_cmap>> Creating ToUnicode CMap for "Sun-ExtA/H/65536/0/0"...
No Unicode mapping available: GID=50878, name=(none)(CID:Sun-ExtA/H/65536/0/0[IPIDPM+Sun-ExtA][CIDFontType2]
** ERROR ** Invalid glyph index (gid 50878)
Output file removed.
)
Error 256 (driver return code) generating output;
file dictionary/output-pdf/dictionary.pdf may not be valid.
现在,您可能想指出我在此处使用的特定字体,从某种意义上说您是对的 — 当我省略字体规范时,我确实会呈现一个页面(带有相当难看的 ê̄)。我确实检查了 Sun-ExtA 的代码点可用性,是的,它确实包含这两个代码点。它似乎不是唯一的罪魁祸首;在缩小故障位置的过程中,我还删除了另一种字体(http://www.georgduffner.at/ebgaramond/) 会导致类似的错误(具有不同的所谓 GID)。
我正在排版的文档非常复杂,因为它包含来自星界 (cjk 扩展 b 和 c) 的中文字符、拼音、平假名、片假名、韩语等等。要为所有这些字符找到合适、正确的字体非常困难,所以我不想,那个字体不行,所以我们就用另一种字体替换它吧。那样不行。
为了继续,我必须具体找出:
如何缩小此类错误首先,我花了很多小时才大致了解原因并找到根源。在屏幕上和日志文件中输出的数千行输出中,只有很少的内容(见鬼,我甚至无法重定向所有输出——如果既不是也不是,技术人员如何打印到屏幕上
stdout
?stderr
)。我设法隔离的消息没有告诉任何行号或文本上下文,而且有点疯狂——我的意思是,当 EB Garamond 还在xdvipdfmx
抱怨映射到 unicode 西里尔字母块的 GID 时,我不使用它,并且上述消息中的 GID 将对应于 욾,这在我的数据中也没有出现。这些 GID 是否均匀应该是 unicode 代码点吗?你要怎样才能找到它呢?接下来,我需要知道最佳做法是什么排版多个变音符号在 xelatex 中,它不一定是最通用的解决方案,因为只有几个相关的情况。
编辑 其他的似乎相信只写出组合重音符号就是一种解决方案,但我的尝试(也使用其他字体)只导致字母旁边的重音符号重叠。
编辑根据上面链接的讨论中的建议,我尝试\usepackage{covington}
使用\twoacc[\~|\={a}]
标准字体和 Sun-ExtA,但是不是与Ubuntu 字体;据称 GID 1267 是罪魁祸首。我认为这是一个 TeX 错误 — — 我的意思是它只是将三个轮廓堆叠在一起,对吗?
编辑我忘了说:我这里使用的是 osx 10.8.4 ;xetex 安装是来自 MacTeX-2012 的。我确实检查了多种字体,因为我听说过存在问题(有一个双重字体,我已经解决了)。
编辑此示例xdvipdfmx
使用以下命令退出Invalid glyph index (gid 1265)
:
\documentclass{book}
\usepackage{polyglossia}
\setmainfont{Ubuntu}
\setdefaultlanguage{english}
\begin{document}
x́
\end{document}
这里使用的组合重音符号是 u+0301;使用 u+0304 时,其 GID 为 1268;其他变音符号要么显示缺少的字符框,要么抛出类似的错误。
答案1
以下是关于如何排版多个重音符号的问题的答案:我遇到了一个有点难以捉摸的accentbx
AS Berdnikov 编写的有点难以捉摸的包([电子邮件保护]或者
[电子邮件保护])。它不在 CTAN 上,但有人好心地把它放在了 github 上,因为https://github.com/zellyn/accentbx所以去抓住它吧。现成的 PDF 也可以在线获取。
由于某种原因,我不太明白包加载失败(至少在 XeLaTeX 2012 下)
! You can't use `\char' after \the.
\EU1\i ->\char
"0131\relax
l.506 \edef\@tempa{\the\i
} \chardef\idotless=\@tempa\relax
所以我取消了第 500 行到第 522 行关于无点 i 和 j 处理的注释。现在我可以写
\documentclass{book}
\usepackage{polyglossia}
\setmainfont{Ubuntu}
\setdefaultlanguage{english}
\usepackage{/path/to/accentbx}
\def\tA#1{\upaccent{\tiny a}{#1}}
\begin{document}
\tA{x}
\upaccent{\aboxshift{ˉ}}{ü}
\end{document}
a
在 上得到一个小字母x
,在 上得到一个长音符号,在 上得到一个变音符号,这真是太棒了。
在看到并尝试了针对这个长期问题的多个解决方案后,我建议每个需要时不时堆叠类型的人都应该利用这个软件包。附带的 PDF 非常详尽地处理了类型堆叠者和细心的强调者在 TeX 世界中遇到的大量问题。
答案2
您的字体可能有问题吗?我不能使用 Sun-ExtA,因为它是专有的,但是当我使用我的一种字体 (Gentium) 时,它可以很好地用 XeLaTeX 编译您的文档:
\documentclass{book}
\usepackage{polyglossia}
\setdefaultlanguage{english}
\setmainfont[Mapping=tex-text]{Gentium}
\begin{document}
ê̄ {\char"00EA\char"0304}
\end{document}