让我们用 xelatex 运行这个代码片段:
\documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
\setCJKmainfont{Source Han Serif SC} % SimSun is OK
\begin{document}
见
\end{document}
文档正文为单个汉字“见”(U+89C1)。使用 Source Han Serif SC 字体,生成的 PDF 包含另一个字符“⻅”(U+2EC5)。使用 SimSun 字体,生成的 PDF 包含原始“见”(U+89C1)。
有人能告诉我谁该负责吗:fontspec、xeCJK 还是 Source Han Serif SC;以及如何在所有情况下都坚持使用原始字符?谢谢。
答案1
事实证明,SourceHanSansSC-Regular.otf确实包含见(U+89C1),但方式不同寻常。字形为cid37659,有2个代码点,U+2EC5和U+89C1。XeLaTeX不知何故选择了较低的值。添加\XeTeXgenerateactualtext=1
可修复支持“实际文本“功能(Adobe Reader 有,但 SumatraPDF 没有)。
报告了同样的问题https://github.com/CTeX-org/ctex-kit/issues/286(部分为中文)http://tug.org/pipermail/xetex/2017-June/027142.html. 似乎修补已经提交但尚未被普遍采用(我的环境:MiKTeX 2.9,在 Windows 10 上进行了最新更新)。
非常感谢 David Carlisle 的悉心指导。