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

ctex 较新更新版 (如v2.4.12) 无法显示粗宋体 #335

Closed
mohuangrui opened this issue Jan 19, 2018 · 15 comments
Closed

ctex 较新更新版 (如v2.4.12) 无法显示粗宋体 #335

mohuangrui opened this issue Jan 19, 2018 · 15 comments
Assignees

Comments

@mohuangrui
Copy link

尊敬的ctex开发者们,你们好,非常感谢你们无价的工作和付出,让ctex如此优秀。目前我发现一个macOS字体调用的问题,希望能得到你们的检查和确认:

1) macOS Sierra/High Sierra Version 10, /Library/Fonts中的 ST 类中文字体,如STHeiti, STSong 只配有Regular类字体,无相应的粗体字。
2)ctex-fontset-mac.def 中调用的皆为 ST 类中文字体。
3) 1) 和 2)导致在mac上编译的文档无法正常显示加粗字体,特别是加粗宋体。
4) /Library/Fonts 中的 SC 类字体,如 Songti SC,皆具有完备的字体。而且,通过如下设定可解决字体加粗的问题:
\setCJKfamilyfont {zhsong} {Songti SC}

在此提出此问题是基于若此问题不只局限于特定macOS版本,也许可考虑重新配置maxOS上的字体。

谢谢阅读,祝好!

@qinglee
Copy link
Member

qinglee commented Jan 20, 2018

#67 (comment) 相同的问题,macOS 在 10.8 之后就为宋、黑、楷这三个字体提供了多个字重。但当时我发现新加字重的字符集大概只覆盖到最基本的 GB2312,与原来字体并不一致,也出于兼容考虑,没有采用新字体。

这么多年过去了,应该很少人继续使用旧版本 macOS,不用考虑兼容问题了,就是不知道字符集是否补全了,我手中现在没有机器和字体测试,请 @Liam0205 处理吧。

@Liam0205
Copy link
Contributor

我的电脑目前装的东西太多,也不确定原生系统的字体状态会是什么样子。

这个我问题我查一下官方的资料,然后咨询一下 Apple 那边的朋友,看下怎么处理比较合适。

1 similar comment
@Liam0205
Copy link
Contributor

我的电脑目前装的东西太多,也不确定原生系统的字体状态会是什么样子。

这个我问题我查一下官方的资料,然后咨询一下 Apple 那边的朋友,看下怎么处理比较合适。

@zepinglee
Copy link
Member

zepinglee commented Jan 27, 2018

诶我前几天也发现了这个问题,现在的 mactex 2017 要求 macos 10.10 以上版本(http://tug.org/mactex/ ),确实不用考虑兼容性了。

另外提醒一点,STSong 的字重跟 Songti SC Light 最为接近,不是 Regular。

@mohuangrui mohuangrui changed the title macOS 缺乏 STSong Bold 字体库 导致无法显示粗宋体 ctex 较新更新版 (如v2.4.12) 无法显示粗宋体 Feb 2, 2018
@mohuangrui
Copy link
Author

大家好,最近较多用户在使用我编写的ucasthesis论文模板后发现宋体无法加粗,他们的共性是安装了最新的LaTeX发行版。在MacOS上的字体问题我已反馈了。今天我对Windows的宏包库更新后,发现宋体无法加粗的问题也同样存在。

Log 版本信息

"This is XeTeX, Version 3.14159265-2.6-0.99998 (MiKTeX 2.9.6600) (preloaded format=xelatex 2018.2.2) 2 FEB 2018 13:44"

Document Class: ctexbook 2018/01/28 v2.4.12 Chinese adapter for class book (CTE
X)

Log 字体调用异常信息:

\ctex\fontset*ctex-fontset-windows*.def"

.................................................
. fontspec info: "no-font-shape"
.
. Could not resolve font "KaiTi/B" (it probably doesn't exist).
.................................................
.................................................
. fontspec info: "no-font-shape"
.
. Could not resolve font "SimHei/I" (it probably doesn't exist).
.................................................
.................................................
. fontspec info: "no-font-shape"
.
. Could not resolve font "SimSun/BI" (it probably doesn't exist).
.................................................

同样的问题也出现在 fontset=adobe上:

\tex\latex\ctex\fontset\ctex-fontset-adobe.def

.................................................
. fontspec info: "no-font-shape"
.
. Could not resolve font "AdobeKaitiStd-Regular/B" (it probably doesn't
. exist).
.................................................
.................................................
. fontspec info: "no-font-shape"
.
. Could not resolve font "AdobeHeitiStd-Regular/I" (it probably doesn't
. exist).
.................................................
.................................................
. fontspec info: "no-font-shape"
.
. Could not resolve font "AdobeSongStd-Light/BI" (it probably doesn't exist).
.................................................

似乎问题的核心是所调用字库的不完整性,以前的ctex版本也许会通过调用黑体来替换加粗的宋体(如fontset=adobe时),但此机制似乎也已经失效了。尽管没有在Linux测试最新版,但问题很可能也是存在的。 期待你们能提供一个完善的宋体加粗方案。

同时还有一个建议是,是否能在ctex的用户文档内提供所调用字体的下载链接,这样LaTeX新手们遇到字体问题时,能简单的通过下载安装字体即可解决问题,而不是需要去查找系统字体再进行手动配置?另外,ctex用户文档中的“由马起园、苏杰、黄晨成等人开发的开源中文字体,参见:
https://github.com/clerkma/fandol-fonts。”链接已失效。

麻烦你们了,谢谢!

@mohuangrui
Copy link
Author

你们好,我又来了,折腾了一天,终于把问题定位准确了,也找到了解决方案。

  1. 问题描述:使用较新版的ctex后,宋体在windows上的加粗分为两种情形:
    a) 如果是在\begin{document}之后使用 \bfseries 或 \textbf{},加粗正常。
    b) 如果是在已加载了ctex的 .cls 文件中的\maketitle类的命令内使用\bfseries 或 \textbf{} 则无法加粗。
    从而问题的潜在原因可能是 ctex (xecjk)定义伪粗体的加载位置无法顾及到某些文档域?

  2. 解决方案:问题的核心仍然是所调用字库的不完备性。测试发现,macOS 所默认携带的 SC 类字体是完备的,而对于Linux和Windows,fandol字库似乎表现很好。所以,除了修复伪粗体命令之外,是否可能考虑调整各个系统的默认字库,以减轻ctex用户的字体配置难度?对了,fandol字库的有效链接如下:

https://ctan.org/tex-archive/fonts/fandol?lang=en

谢谢你们的复查和帮助!

@stone-zeng
Copy link
Member

stone-zeng commented Feb 3, 2018

fandol 缺字比较历害,虽然开源免费,但只是没有办法的办法(比如 Linux 下)。Windows 自带的中易字库比较完备,但没有提供粗宋。

@mohuangrui
Copy link
Author

明白了,那还是麻烦你们将宋体的伪粗体在某些情形下失效的问题解决吧,谢谢了

@Liam0205
Copy link
Contributor

Liam0205 commented Feb 3, 2018

xeCJK 风格的字体选择,首先是针对 TeX 中三个主要的字族(family)设置。这三个字族分别是 \rmfamily\sffamily\ttfamily。对应的文档字体设置命令分别是 \setCJKmainfont\setCJKsansfont\setCJKmonofont

对于每一条 \setCJKxxxfont 命令,又分别有 \mdseries\upshape\bfseries\upshape 以及 \mdseries\itshape 的分别。具体来说

\setCJKmainfont[BoldFont = B, ItalicFont = C]{A}

将文档中 \rmfamily 的 CJK 部分的 \mdseries\upshape 字体设置为 A,将其 \bfseries\upshape 以及 \mdseries\itshape 字体分别设置为 BC

当不提供 BoldFontItalicFont 时,若 XeTeX 能找到 A 字体的高字重及/或意大利体字形,则系统会直接调用它们。而若它们不存在时,若 xeCJK 的伪粗体伪斜体打开,则会使用伪粗伪斜代替;若没打开,则只能回退到 A 本身。

在设计字体配置(fontset)时,我们的考量主要有以下几个。

  • 中文 \rmfamily 以宋体为代表,\sffamily 以黑体为代表,而 \ttfamily 则交给仿宋体。
  • 由于中文不存在 \itshape 的说法,所以 \itshape 以楷书代替。
  • 对于 \rmfamily\bfseries,若有高质量的粗宋体,则明确配置(或者由 XeTeX 自己确定,macOS 上的 Songti SC 就属于这种情况);但若没有高质量的粗体,则对 \rmfamily 以黑体替代。其他字族则视情况而定(可以考虑伪粗体)。

@Liam0205
Copy link
Contributor

Liam0205 commented Feb 3, 2018

对于 Fandol 字体,它缺字较多。所以不会作为 macOS 和 Windows 的默认字体设置的。

@Liam0205
Copy link
Contributor

Liam0205 commented Feb 3, 2018

#335 (comment)
未复现,待查。

@qinglee
Copy link
Member

qinglee commented Feb 3, 2018

请注意区分 \rmfamily\songti,前者会设置粗体(BoldFont)为黑体或者粗宋体,而后者只在有粗宋体时,才将其设置为粗体。我看了一下你的模板,你在 \maketitle 中用的是 \songti,就会出现你说的宋体可能没被加粗的情况。

@Liam0205
Copy link
Contributor

Liam0205 commented Feb 3, 2018

晕,我就说无法复现……原来是用了 \songti 命令……

@mohuangrui
Copy link
Author

@Liam0205 @qinglee 非常感谢你们的简明扼要的解答,获益匪浅。最开始时,没有调用\songti之类的命令,但由于部分用户不认同黑体替换掉粗宋体,所以后来就强行指定了\songti,当时加粗正常。现在按照你们的引导,我不再使用\setCJKfamilyfont的字体切换,而是调用\sffamily之类的,然后对pdflatex,xelatex,lualatex进行了测试,发现一切工作正常。

非常感谢你们帮忙,也非常抱歉因为我的个人错误花费了你们大量时间。谢谢!

@Liam0205
Copy link
Contributor

Liam0205 commented Apr 3, 2018

transfered to #351

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

No branches or pull requests

5 participants