Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

xeCJK: 部分汉字的伪粗体在 PDF 文件中无法拷贝或拷贝出异常内容 #353

Closed
mohuangrui opened this issue Apr 12, 2018 · 11 comments
Labels

Comments

@mohuangrui
Copy link

尊敬的ctex开发者你们好,有如下一个与当前ctex默认配置无关但与手动配置ctex字体相关的问题:

  1. 当手动配置采用ctex的默认的字体配置时,不会出现如上问题,测试代码如下:
%---------------------------------------------------------------------------%
%->> Document class declaration
%---------------------------------------------------------------------------%
\documentclass[fontset=windows]{ctexbook}%
%---------------------------------------------------------------------------%
%->> Document settings
%---------------------------------------------------------------------------%
\setCJKmainfont[BoldFont=SimHei,ItalicFont=KaiTi]{SimSun}
\setCJKsansfont[BoldFont={* Bold}]{Microsoft YaHei}
\setCJKmonofont{FangSong}
%---------------------------------------------------------------------------%
%->> Document content
%---------------------------------------------------------------------------%
\begin{document}
    \section{文档内字体切换方法}
        \begin{itemize}
            \item 宋体:国科大论文模板ucasthesis 或 \textrm{国科大论文模板ucasthesis}
            \item 粗宋体:{\bfseries 国科大论文模板ucasthesis} 或 \textbf{国科大论文模板ucasthesis}
            \item 黑体:{\sffamily 国科大论文模板ucasthesis} 或 \textsf{国科大论文模板ucasthesis}
            \item 粗黑体:{\bfseries\sffamily 国科大论文模板ucasthesis} 或 \textsf{\bfseries 国科大论文模板ucasthesis}
            \item 仿宋:{\ttfamily 国科大论文模板ucasthesis} 或 \texttt{国科大论文模板ucasthesis}
            \item 粗仿宋:{\bfseries\ttfamily 国科大论文模板ucasthesis} 或 \texttt{\bfseries 国科大论文模板ucasthesis}
            \item 楷体:{\itshape 国科大论文模板ucasthesis} 或 \textit{国科大论文模板ucasthesis}
            \item 粗楷体:{\bfseries\itshape 国科大论文模板ucasthesis} 或 \textit{\bfseries 国科大论文模板ucasthesis}
        \end{itemize}
\end{document}
%---------------------------------------------------------------------------%
  1. 若仅仅修改setCJKmainfont的配置,如只去掉BoldFont选项,就会出现所描述的问题,测试代码如下:
%---------------------------------------------------------------------------%
%->> Document class declaration
%---------------------------------------------------------------------------%
\documentclass[fontset=windows]{ctexbook}%
%---------------------------------------------------------------------------%
%->> Document settings
%---------------------------------------------------------------------------%
\setCJKmainfont[ItalicFont=KaiTi]{SimSun}
\setCJKsansfont[BoldFont={* Bold}]{Microsoft YaHei}
\setCJKmonofont{FangSong}
%---------------------------------------------------------------------------%
%->> Document content
%---------------------------------------------------------------------------%
\begin{document}
    \section{文档内字体切换方法}
        \begin{itemize}
            \item 宋体:国科大论文模板ucasthesis 或 \textrm{国科大论文模板ucasthesis}
            \item 粗宋体:{\bfseries 国科大论文模板ucasthesis} 或 \textbf{国科大论文模板ucasthesis}
            \item 黑体:{\sffamily 国科大论文模板ucasthesis} 或 \textsf{国科大论文模板ucasthesis}
            \item 粗黑体:{\bfseries\sffamily 国科大论文模板ucasthesis} 或 \textsf{\bfseries 国科大论文模板ucasthesis}
            \item 仿宋:{\ttfamily 国科大论文模板ucasthesis} 或 \texttt{国科大论文模板ucasthesis}
            \item 粗仿宋:{\bfseries\ttfamily 国科大论文模板ucasthesis} 或 \texttt{\bfseries 国科大论文模板ucasthesis}
            \item 楷体:{\itshape 国科大论文模板ucasthesis} 或 \textit{国科大论文模板ucasthesis}
            \item 粗楷体:{\bfseries\itshape 国科大论文模板ucasthesis} 或 \textit{\bfseries 国科大论文模板ucasthesis}
        \end{itemize}
\end{document}
%---------------------------------------------------------------------------%
  1. 此问题的出现与 fontset=windows 后再重复设定配置字体无关,因为若使用 fontset=none, 问题仍存在,代码如下:
%---------------------------------------------------------------------------%
%->> Document class declaration
%---------------------------------------------------------------------------%
\documentclass[fontset=none]{ctexbook}%
%---------------------------------------------------------------------------%
%->> Document settings
%---------------------------------------------------------------------------%
\setCJKmainfont[ItalicFont=KaiTi]{SimSun}
\setCJKsansfont[BoldFont={* Bold}]{Microsoft YaHei}
\setCJKmonofont{FangSong}
%---------------------------------------------------------------------------%
%->> Document content
%---------------------------------------------------------------------------%
\begin{document}
    \section{文档内字体切换方法}
        \begin{itemize}
            \item 宋体:国科大论文模板ucasthesis 或 \textrm{国科大论文模板ucasthesis}
            \item 粗宋体:{\bfseries 国科大论文模板ucasthesis} 或 \textbf{国科大论文模板ucasthesis}
            \item 黑体:{\sffamily 国科大论文模板ucasthesis} 或 \textsf{国科大论文模板ucasthesis}
            \item 粗黑体:{\bfseries\sffamily 国科大论文模板ucasthesis} 或 \textsf{\bfseries 国科大论文模板ucasthesis}
            \item 仿宋:{\ttfamily 国科大论文模板ucasthesis} 或 \texttt{国科大论文模板ucasthesis}
            \item 粗仿宋:{\bfseries\ttfamily 国科大论文模板ucasthesis} 或 \texttt{\bfseries 国科大论文模板ucasthesis}
            \item 楷体:{\itshape 国科大论文模板ucasthesis} 或 \textit{国科大论文模板ucasthesis}
            \item 粗楷体:{\bfseries\itshape 国科大论文模板ucasthesis} 或 \textit{\bfseries 国科大论文模板ucasthesis}
        \end{itemize}
\end{document}
%---------------------------------------------------------------------------%
  1. 之所以关注这个问题是因为有时开发一个模板时,往往得收敛于学位办老师们对word的使用和字体配置认知,当前ctex使用黑体替换粗宋体以及调用微软雅黑的默认设定往往与word使用者的惯性不太一致。为了收敛于word使用者的习惯而对字体进行了如下手动配置,其解决了字体的问题,却由于xecjk上述字体配置的敏感性导致出现了所描述的问题:
%---------------------------------------------------------------------------%
%->> Document class declaration
%---------------------------------------------------------------------------%
\documentclass[fontset=windows]{ctexbook}%
%---------------------------------------------------------------------------%
%->> Document settings
%---------------------------------------------------------------------------%
\setCJKmainfont[AutoFakeBold,ItalicFont=KaiTi]{SimSun}%
\setCJKsansfont[AutoFakeBold]{SimHei}%
\setCJKmonofont{FangSong}%
%---------------------------------------------------------------------------%
%->> Document content
%---------------------------------------------------------------------------%
\begin{document}
    \section{文档内字体切换方法}
        \begin{itemize}
            \item 宋体:国科大论文模板ucasthesis 或 \textrm{国科大论文模板ucasthesis}
            \item 粗宋体:{\bfseries 国科大论文模板ucasthesis} 或 \textbf{国科大论文模板ucasthesis}
            \item 黑体:{\sffamily 国科大论文模板ucasthesis} 或 \textsf{国科大论文模板ucasthesis}
            \item 粗黑体:{\bfseries\sffamily 国科大论文模板ucasthesis} 或 \textsf{\bfseries 国科大论文模板ucasthesis}
            \item 仿宋:{\ttfamily 国科大论文模板ucasthesis} 或 \texttt{国科大论文模板ucasthesis}
            \item 粗仿宋:{\bfseries\ttfamily 国科大论文模板ucasthesis} 或 \texttt{\bfseries 国科大论文模板ucasthesis}
            \item 楷体:{\itshape 国科大论文模板ucasthesis} 或 \textit{国科大论文模板ucasthesis}
            \item 粗楷体:{\bfseries\itshape 国科大论文模板ucasthesis} 或 \textit{\bfseries 国科大论文模板ucasthesis}
        \end{itemize}
\end{document}
%---------------------------------------------------------------------------%
  1. 根据 tex.se 上的调用cmap宏包并不能解决此问题,但奇怪的是,若采用adobe字体,则上述敏感性却又不存在了,测试代码如下:
%---------------------------------------------------------------------------%
%->> Document class declaration
%---------------------------------------------------------------------------%
\documentclass[fontset=windows]{ctexbook}%
%---------------------------------------------------------------------------%
%->> Document settings
%---------------------------------------------------------------------------%
\setCJKmainfont[AutoFakeBold,ItalicFont=AdobeKaitiStd-Regular]{AdobeSongStd-Light}%
\setCJKsansfont[AutoFakeBold]{AdobeHeitiStd-Regular}%
\setCJKmonofont{AdobeFangsongStd-Regular}%
%---------------------------------------------------------------------------%
%->> Document content
%---------------------------------------------------------------------------%
\begin{document}
    \section{文档内字体切换方法}
        \begin{itemize}
            \item 宋体:国科大论文模板ucasthesis 或 \textrm{国科大论文模板ucasthesis}
            \item 粗宋体:{\bfseries 国科大论文模板ucasthesis} 或 \textbf{国科大论文模板ucasthesis}
            \item 黑体:{\sffamily 国科大论文模板ucasthesis} 或 \textsf{国科大论文模板ucasthesis}
            \item 粗黑体:{\bfseries\sffamily 国科大论文模板ucasthesis} 或 \textsf{\bfseries 国科大论文模板ucasthesis}
            \item 仿宋:{\ttfamily 国科大论文模板ucasthesis} 或 \texttt{国科大论文模板ucasthesis}
            \item 粗仿宋:{\bfseries\ttfamily 国科大论文模板ucasthesis} 或 \texttt{\bfseries 国科大论文模板ucasthesis}
            \item 楷体:{\itshape 国科大论文模板ucasthesis} 或 \textit{国科大论文模板ucasthesis}
            \item 粗楷体:{\bfseries\itshape 国科大论文模板ucasthesis} 或 \textit{\bfseries 国科大论文模板ucasthesis}
        \end{itemize}
\end{document}
%---------------------------------------------------------------------------%
  1. 描述的问题在 Linux + texlive 2015 + ctexbook 2016 和 Windows + MikTex + ctexbook 2018 都复现。

非常感谢你们的测试和解答

@zepinglee
Copy link
Member

啥问题?好像图片没有上传成功

@mohuangrui
Copy link
Author

@zepinglee 为什么要图片?图片没用啊,请测试一下代码你就明白了

@stone-zeng
Copy link
Member

并没有复现问题,我用的是 TeX Live 2018。@mohuangrui 你把 TeX Live 更新一下试试?

@mohuangrui
Copy link
Author

@stone-zeng 请问你测试了后面的代码,比如:

%---------------------------------------------------------------------------%
%->> Document class declaration
%---------------------------------------------------------------------------%
\documentclass[fontset=windows]{ctexbook}%
%---------------------------------------------------------------------------%
%->> Document settings
%---------------------------------------------------------------------------%
\setCJKmainfont[AutoFakeBold,ItalicFont=KaiTi]{SimSun}%
\setCJKsansfont[AutoFakeBold]{SimHei}%
\setCJKmonofont{FangSong}%
%---------------------------------------------------------------------------%
%->> Document content
%---------------------------------------------------------------------------%
\begin{document}
    \section{文档内字体切换方法}
        \begin{itemize}
            \item 宋体:国科大论文模板ucasthesis 或 \textrm{国科大论文模板ucasthesis}
            \item 粗宋体:{\bfseries 国科大论文模板ucasthesis} 或 \textbf{国科大论文模板ucasthesis}
            \item 黑体:{\sffamily 国科大论文模板ucasthesis} 或 \textsf{国科大论文模板ucasthesis}
            \item 粗黑体:{\bfseries\sffamily 国科大论文模板ucasthesis} 或 \textsf{\bfseries 国科大论文模板ucasthesis}
            \item 仿宋:{\ttfamily 国科大论文模板ucasthesis} 或 \texttt{国科大论文模板ucasthesis}
            \item 粗仿宋:{\bfseries\ttfamily 国科大论文模板ucasthesis} 或 \texttt{\bfseries 国科大论文模板ucasthesis}
            \item 楷体:{\itshape 国科大论文模板ucasthesis} 或 \textit{国科大论文模板ucasthesis}
            \item 粗楷体:{\bfseries\itshape 国科大论文模板ucasthesis} 或 \textit{\bfseries 国科大论文模板ucasthesis}
        \end{itemize}
\end{document}
%---------------------------------------------------------------------------%

然后生成的 PDF 中的文本可以被正常拷贝到另一个文本编辑器比如word,并且不会出现乱码?

我目前没有 TeXlive 2018,若可以,请问可以测试下MikTeX么,我的MikTex上的ctex是最新版,并且这个问题我也从其他人那得到确认。

@stone-zeng
Copy link
Member

好吧,我也碰到这个问题了……

只用 fontspec 也可以出来的:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{SimSun}[AutoFakeBold]
\pagestyle{empty}

\begin{document}
\textbf{}~字 \par % 国 国 ?
字~\textbf{} \par % 字 ?
\textbf{}~国 \par % 国 国 国
国~\textbf{} \par % 国 国
\end{document}

这里面四行东西,每次只留一行剩下三行注释掉,编译之后复制出来的写在 % 后面了。好像必须是加粗的字和不加粗的字不一样才会复制不了。另外加粗之后似乎会多复制出来一个字。

这种东西真的是太极端了,比如说你给的例子里面,把 section 删掉就没问题了 😪

@mohuangrui
Copy link
Author

@stone-zeng 是的,这是一种很奇怪的敏感性。ctex的默认配置用于一整篇论文都不会出这个问题,但只要变动一项,就不行了。然后若用adobe字体,即使用AutoFakeBold并修改多处,也不会有问题。太奇怪了。

@stone-zeng
Copy link
Member

试了一下,方正、华文的字体都不行,但 Adobe、Fandol、思源黑体/宋体是可以正确复制的。注意到有问题的一组都是 ttf 格式,后面一组则是 otf/ttc,会不会和这个有关?

@stone-zeng
Copy link
Member

stone-zeng commented Apr 13, 2018

@mohuangrui
Copy link
Author

@stone-zeng 好的,非常谢谢~我四年多年就被这个问题困扰过,当时就是用Adobe字体解决的,看来还是得继续考虑这个方案。那请问这个iissues要怎么处理呢?

@Liam0205 Liam0205 changed the title 通过xeCJK手动配置字体并用xelatex编译时容易导致字体编码异常进而无法拷贝生成的PDF中的中文文本或拷贝为乱码 xeCJK: 部分汉字的伪粗体在 PDF 文件中无法拷贝或拷贝出异常内容 May 3, 2018
@Liam0205
Copy link
Contributor

Liam0205 commented May 3, 2018

这是一个挺早的已知问题,CTeX-kit 还在 Google Code 上托管时我就提出过。

@stone-zeng 所说,这是一个 XeTeX 相关的底层 bug,临时的解决方案可以是更换字体或是如 @leo-liu 在 StackExchange 上的回答那样绕过

@Liam0205 Liam0205 closed this as completed May 3, 2018
@muzimuzhi
Copy link
Contributor

我使用以下环境测试了 #353 (comment)https://sourceforge.net/p/xetex/bugs/61/ 中的例子,都已正常。

  • XeTeX 3.14159265-2.6-0.999991 (TeX Live 2019)
  • xdvipdfmx Version 20190503
  • adobe acrobat reader dc build 19.12.20040.345140

问题可能已经修复。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants