ElegantLaTeX/ElegantBook

elegantbook 文类 chinesefont 和 ctex 文类的 fontset 选项存在不兼容

XiangyunHuang opened this issue · 5 comments

在系统已经有 adobe 中文字体的情况下,在 elegantbook 文类中设置 chinesefont=adobe 会报错,在 ctex 文类中设置 fontset=adobe 不会报错,前者对 ctex 文类的 fontset 选项做了一些阉割,代码见

ElegantBook/elegantbook.cls

Lines 127 to 151 in 6ab10be

\ifdefstring{\ELEGANT@lang}{cn}{
\ifXeTeX
\ifdefstring{\ELEGANT@chinesefont}{founder}{
\RequirePackage[UTF8,scheme=plain,fontset=none]{ctex}
\setCJKmainfont[BoldFont={FZHei-B01},ItalicFont={FZKai-Z03}]{FZShuSong-Z01}
\setCJKsansfont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZHei-B01}
\setCJKmonofont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZFangSong-Z02}
\setCJKfamilyfont{zhsong}{FZShuSong-Z01}
\setCJKfamilyfont{zhhei}{FZHei-B01}
\setCJKfamilyfont{zhkai}{FZKai-Z03}
\setCJKfamilyfont{zhfs}{FZFangSong-Z02}
\newcommand*{\songti}{\CJKfamily{zhsong}}
\newcommand*{\heiti}{\CJKfamily{zhhei}}
\newcommand*{\kaishu}{\CJKfamily{zhkai}}
\newcommand*{\fangsong}{\CJKfamily{zhfs}}}{\relax}
\ifdefstring{\ELEGANT@chinesefont}{nofont}{
\RequirePackage[UTF8,scheme=plain,fontset=none]{ctex}}{\relax}
\ifdefstring{\ELEGANT@chinesefont}{ctexfont}{
\RequirePackage[UTF8,scheme=plain]{ctex}}{\relax}
\else
\ifdefstring{\ELEGANT@chinesefont}{ctexfont}{
\RequirePackage[UTF8,scheme=plain]{ctex}}{\relax}
\fi

不兼容的意思是指是否可以直接传递 fontset 选项给 elegantbook,让中文字体的设置问题由 ctex 去解决,用户也少了很多配置的不便,比如配置 adobe 字体,ctex 已经设置好了,但是在 elegantbook 里需要类似如下的定义

\setCJKmainfont[BoldFont={FZHei-B01},ItalicFont={FZKai-Z03}]{FZShuSong-Z01}
\setCJKsansfont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZHei-B01}
\setCJKmonofont[BoldFont={FZHei-B01},ItalicFont={FZHei-B01}]{FZFangSong-Z02}
\setCJKfamilyfont{zhsong}{FZShuSong-Z01}
\setCJKfamilyfont{zhhei}{FZHei-B01}
\setCJKfamilyfont{zhkai}{FZKai-Z03}
\setCJKfamilyfont{zhfs}{FZFangSong-Z02}
\newcommand*{\songti}{\CJKfamily{zhsong}}
\newcommand*{\heiti}{\CJKfamily{zhhei}}
\newcommand*{\kaishu}{\CJKfamily{zhkai}}
\newcommand*{\fangsong}{\CJKfamily{zhfs}}

毕竟 ctex 已经包含了很多常用的字体设置,做的很好了,常用字体的设置完全可以用 ctex 提供的。

嗯 ,可以是可以,而且也很简单,就像 natbib 的选项一样直接放进去就行了。不过我自己用 fontset=founder 时会出错,ctex 里面方正字体用到的并不是标准的四款免费字体,还有其他字体。所以可能我还是会保留这个选项。

一些补充:增加这个 chinesefont 选项,其实也是出于传到 latexstudio.net 的考虑,他们那边网站安装了方正系列字体,为了让在线能够使用方正系列字体(GBK),特意增加了这个选项。因为 3.x 版本的设计想法就是不让用户接触到字体,所以之前一直没开过这个口子,所用到的字体都是 texlive 自带的。既然你提出,想要兼容 ctex 字体设置的话,我下个版本改一下吧。但是需要在文档对这部分说更加清楚点了,最早的版本是不管用户选什么选项,用 pdflatex/xelatex 都能出来结果(虽然中文我们会推荐使用 xelatex)。

这样的一个好处是,他们不用关心太多东西,坏处是,模板用户好像 latex 技术和学习能力退化了...

我群里偶尔还有人在非模板环境下问到:

记不起用哪个命令然后可以中文
怎么设置可以使用中文?我忘了
还是中文编译错误,已经使用 cjk 了

 ̄□ ̄||

  1. 非常赞同 chinesefont 选项,而且你还考虑到 ctex 文类在设置 fontset=founder 的不足,我觉得 chinesefont 选项可以一方面修复原有的fontset=founder 的不足,一方面又兼容已有的选项,比如 chinesefont=adobe 也能用,只是 fontset=adobe 的包裹而已
  2. 非常赞同不让用户接触自定义字体的想法,默认情形下用户不用管字体,另一方面的现实是方正字体系统不一定自带(比如 MacOS/Windows/Linux),对新手来说安装字体配置刷新字体是一件麻烦事,我倾向于用户用就好了,别像我一样去各种自定义
  3. 用户 LaTeX 技术退化就退化吧,制作模版的目的就是让用户专注内容创作和输出
3. 用户 LaTeX 技术退化就退化吧,制作模版的目的就是让用户专注内容创作和输出

过于退化了...设置中文都不会...讲真,专注内容不如用 markdown

欢迎:https://liam.page/2020/03/30/writing-manuscript-in-Markdown-and-typesetting-with-LaTeX/

昨天看过发在 latexstudio 上的文档,我看看