最初这对我来说似乎是字体问题,因为其他字体没有同样的问题,正如这个好的 MWE 所表明的那样:
从好的 PDF 中复制文本
EBGaramond12-Italic.otf:
[ - ] бгдпт
[SRB] бгдпт
良好的 MWE:
\documentclass[11pt]{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Mono}
\newcommand*{\chars}{бгдпт}
\newcommand*{\samplepars}[1]{{%
\vspace{\normalbaselineskip}%
#1:\par
\fontspec{#1}[Script=Cyrillic]%
{\normalfont [ - ]} {\chars}\par
{\normalfont [SRB]} {\addfontfeature{Language=Serbian}\chars}\par
}}
\begin{document}
\samplepars{EBGaramond12-Italic.otf}%
\end{document}
问题开始出现在 Source Han 字体上((""/"K"/"SC"/"TC"
)字体通过 支持所有语言字形locl
)。对于 MWE,我们将使用来源黑体 TC(16MB)。
(所有当前可用的字体都可以快速轻松地下载这些命令。
如果使用字体文件默认语言以外的其他语言(例如,使用字体之外的语言),则替换的字形具有 unicode 值Chinese Traditional
。这使得辅助工具、在 PDF 文件中搜索和复制这些字形变得不可能。... TC
U+FFFD
�
REPLACEMENT CHARACTER
预期的行为是替换的字形具有与它们所替换的默认字形相同的 unicode 值。
编辑:为了比较,我能够制作一个良好的 CJK PDF使用 LibreOffice Writer,此 ODT 文件。使用 解压
mutool clean -d -a libreoffice.pdf libreoffice-uncompressed.pdf
并查看源代码,其中不包含任何BDC
、EMC
,甚至zh
,只有一个/Lang (en-US)
。文件中嵌入的字体由 LibreOffice 从 OTF 转换为 Type1,这可能是字形 unicode 值的原因。
如果问题确实出在 TeX 上,那么如何修复或解决它?
从错误的 PDF 中复制文本
SourceHanSansTC-Regular.otf:
[ZHS] ���⻣�����贈��⻆���函純賭難海�練�������
[ZHT] 刃令毒骨縣誤船述煙贈雪及角條低詩函純賭難海喝練灰起英次能窗化
糟糕的 MWE:
\documentclass[11pt]{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Mono}
\setlength{\parindent}{0mm}
\newcommand*{\chars}{%
刃令毒骨縣誤船述煙贈雪及角條低詩函純賭難海喝練灰起英次能窗化}
\newcommand*{\samplepars}[1]{{%
\vspace{\normalbaselineskip}%
#1:\par
\fontspec{#1}[Script=CJK]%
% {\normalfont [JAN]} {\addfontfeature{Language=Japanese }\chars}\par
% {\normalfont [KOR]} {\addfontfeature{Language=Korean }\chars}\par
%%{\normalfont [ZHH]} {\addfontfeature{Language=Chinese Hong Kong }\chars}\par
{\normalfont [ZHS]} {\addfontfeature{Language=Chinese Simplified }\chars}\par
{\normalfont [ZHT]} {\addfontfeature{Language=Chinese Traditional}\chars}\par
}}
\begin{document}
\newpage
% \samplepars{SourceHanSerif-Regular.otf}%
% \samplepars{SourceHanSerifK-Regular.otf}%
%%\samplepars{SourceHanSerifHC-Regular.otf}%
% \samplepars{SourceHanSerifSC-Regular.otf}%
% \samplepars{SourceHanSerifTC-Regular.otf}%
\newpage
% \samplepars{SourceHanSans-Regular.otf}%
% \samplepars{SourceHanSansK-Regular.otf}%
%%\samplepars{SourceHanSansHC-Regular.otf}%
% \samplepars{SourceHanSansSC-Regular.otf}%
\samplepars{SourceHanSansTC-Regular.otf}%
\end{document}