ZJU-Awesome / write_with_LaTeX

135 stars 90 forks source link

中文加粗问题的解决 #11

Open muzimuzhi opened 5 years ago

muzimuzhi commented 5 years ago

README 中提到了中文加粗的问题

如果有部分同学和我一样,出现了该加粗的字体没有加粗,并伴随相关警告,有一个临时的解决办法,但是我仍旧没有搞清楚原因,希望知道的同学告诉我。

这是由 \fangsong 命令的错用导致的。


以下,以 zjuthesis 文档类为例,解释错用在哪里,及如何修复。

  1. 模板中,将正文默认字体(\normalfont)定义为仿宋字体 FangSong,并设置 HeiTi 为其粗体。 https://github.com/ZJU-Awesome/write_with_LaTeX/blob/e04fbaf6459e3bbe61d49e5ce7a666ba89a029eb/zju_thesis/zjuthesis.cls#L306-L307

  2. 在需要使用伪粗仿宋的地方,如 \chapter 内部,多余使用了 \fangsong 字体切换命令 https://github.com/ZJU-Awesome/write_with_LaTeX/blob/e04fbaf6459e3bbe61d49e5ce7a666ba89a029eb/zju_thesis/zjuthesis.cls#L749

  3. 然而,模板并没有(重)定义 \fangsong 命令,故而使用的是 ctex 宏集提供的定义 https://github.com/CTeX-org/ctex-kit/blob/6c45dfd5f8a850ea4f925d35269db388f6c3dcb8/ctex/ctex.dtx#L10079

    %<!ubuntu>\NewDocumentCommand \fangsong { } { \CJKfamily { zhfs } 

    其中 zhfs 所代表的实际字体,因用户的操作系统而异。但相同的是,zhfs 对应的仿宋体,在 ctex 为各系统准备的字体定义文件里定义时,既没有配置粗体,也没有开启伪粗。

  4. 所以,虽然模板设置了仿宋字体并为其配置了粗体,但每次使用 \fangsong 命令后,就变成了使用 ctex 宏集字体定义文件里设置的没有配置粗体、也没有开启伪粗的仿宋字体。

这样,自然就带来了中文加粗失败。

  1. 目前的临时方式

改写默认的中文字体定义文件,为每个没有粗体可用的字体开启伪粗,并在 REAME 中推荐用户将模板修改过的字体定义文件,覆盖 ctex 宏包集自带的字体定义文件。

  1. 建议的模板改进方式

    • 删去多余的 \fangsong 命令
      因为已经将正文默认字体设置为仿宋,所以在需要「粗体仿宋」时,无需额外使用 \fangsong 命令。
    • 在模板的 \setCJKmanfont 里,为仿宋字体开启伪粗。模板目前将仿宋粗体设置为 HeiTi,这是不符合《编写规则》的。
    • 删去无用的字体配置文件,移除 REAMME 中的相应段落。
    • 理论上,全文任何地方都不需要直接使用 \fangsong,用 \normalfont 足以代替。如果偏偏想用\fangsong 命令、不用不舒服,可以考虑将其重定义为 \normalfont

如有其他字体也需要用到伪粗,操作及注意同上。

  1. 在模板改进之前,使用中文粗体的建议,见我的下方评论
hairuo commented 5 years ago

谢谢介绍,按照”6. 建议的改进方式“,我在zjuthesis.cls中找到\fangsong\zihao{-3} \bfseries,然后删掉\fangsong只剩下\zihao{-3} \bfseries,这样运行之后,“第x章 xxx"的显示已经回到粗体效果了。

另外,有几个无关紧要的问题顺便也问一下:)

  1. 官方文档提到除了”第x章“需要加黑,”1.1 概述“这样的\section作为第一级目录也是要加黑的,不知道这个怎么操作。

  2. 上面提到的内容”在模板的 \setCJKmainfont 里,为仿宋字体开启伪粗。模板目前将仿宋粗体设置为 HeiTi,这是不符合《编写规则》的。“, 这里的意思是说, zjuthesis.cls中的\setCJKmainfont[BoldFont={SimHei}, ItalicFont={KaiTi}]{FangSong} 这个使用不是很规范,但暂时仍然可用吗?

  3. 不知道这里说的REAMME是指什么?在zjuthesis.cls里面没有看到相关的内容。删掉无用的字体配置文件具体是怎么操作呢?

thx~

muzimuzhi commented 5 years ago

令「中文加粗」正常的使用建议

\documentclass 这行后面,像下面这样添加两行

\documentclass[anon,doctor,twoside,nocpsupervisor]{zjuthesis}
\setCJKmainfont[AutoFakeBold=1.3, ItalicFont={KaiTi}]{FangSong}
\renewcommand{\fangsong}{\rmfamily}

其中,AutoFakeBold=1.3 里的 1.3 控制加粗的程度,数字越大加粗越多,可以自己调整。

添加上面的两行后,能

  1. 让中文正常加粗
  2. 使用伪粗仿宋作为仿宋的粗体,符合《编写规则》的要求

对 @hairuo 问题的回答

1. ”1.1 概述“这样的\section作为第一级目录也是要加黑的,不知道这个怎么操作。

见上方建议。这个 issue 的预期读者是项目的维护者,所以在描述时,默认了读者具有相当的 latex 使用知识。

2. 这里的意思是说, zjuthesis.cls中的\setCJKmainfont[BoldFont={SimHei}, ItalicFont={KaiTi}]{FangSong} 这个使用不是很规范,但暂时仍然可用吗?

使用「WORD 里的伪粗作为仿宋的粗体」,是《浙江大学研究生学位论文编写规则》里规定的。用黑体代替仿宋伪粗,能不能通过论文验收,是导师、院系老师决定的,模板维护者对此毫不知情,也无从提供建议。从模板的角度,应该在技术可行的范围内,尽可能提供遵守《编写规范》的模板。

3. 不知道这里说的REAMME是指什么?

这里是我把 README 打错为 REAMME 了。README 指的是几乎每个 GitHub 项目都会包含的 README.md 文件,在访问项目主页时,它会出现在项目文件目录下方(见下图)。一般默认,在使用之前,应该通读 README 中的内容。 image