Overleaf 中的 CJK 字体设置

前言

Overleaf 是在线 LaTeX\LaTeX 编译平台,上面有很多可以用的 CJK 字体

但由于 CTeX 宏集的「开箱即用」太舒服了,很多人不知道如何设置字体,很多人从开始用到弃坑都是由 CTeX 宏集根据系统去自动指定字库,因此他们在使用 Overleaf 时会遇到一些缺字、出现 warning 的问题。

这些问题有几个原因:

因此如果要舒服的在 Overleaf 中使用中文,可以写一个 ctex-fontset-⟨name⟩.def 来方便的调用 CJK 字体。

正文

在查阅了 Overleaf 中存在的 CJK 字体后,我写了一份 def 文件方便自己使用。

字体设置

  • \rmfamily:思源宋体 Regular(Noto Serif CJK SC Regular)
    • \bfseries:思源宋体 Bold(Noto Serif CJK SC Bold)
    • \itshape:文鼎 PL 简中楷(AR PL KaitiM GB)
  • \sffamily:思源黑体 Regular(Noto Sans CJK SC Regular)
    • \bfseries:思源黑体 Bold(Noto Sans CJK SC Bold)
  • \ttfamily:思源等宽 Regular(Noto Sans Mono CJK SC Regular)
    • \bfseries:思源等宽 Bold(Noto Sans Mono CJK SC Bold)
  • \songti:思源宋体 Regular(Noto Serif CJK SC Regular)
  • \heiti:思源黑体 Regular(Noto Sans CJK SC Regular)
  • \kaishu:文鼎 PL 简中楷(AR PL KaitiM GB)
  • \fangsong:Fandol 仿宋(FandolFang R)

def 文件代码

文件名为 ctex-fontset-overleaf.def

\GetIdInfo$Id: ctex.dtx 81d4c90 2020-10-19 20:24:58 +0800 Qing Lee <sobenlee@gmail.com> $
{Overleaf fonts definition (CTEX)}
\ProvidesExplFile{ctex-fontset-overleaf.def}
{\ExplFileDate}{2.5.5}{\ExplFileDescription}
\ctex_fontset_case:nnnn
{ \ctex_fontset_error:n { ubuntu } }
{
\ctex_zhmap_case:nnn
{
\setCJKmainfont { :2:NotoSerifCJK-Regular.ttc }
[ BoldFont = :2:NotoSerifCJK-Bold.ttc, ItalicFont = gkai00mp.ttf ]
\setCJKsansfont { :2:NotoSansCJK-Regular.ttc }
[ BoldFont = :2:NotoSansCJK-Bold.ttc ]
\setCJKmonofont { :2:NotoSerifCJK-Regular.ttc }
[ BoldFont = :2:NotoSerifCJK-Bold.ttc ]
\setCJKfamilyfont { zhsong } { :2:NotoSerifCJK-Regular.ttc }
[ BoldFont = :2:NotoSerifCJK-Bold.ttc ]
\setCJKfamilyfont { zhhei } { :2:NotoSansCJK-Regular.ttc }
[ BoldFont = :2:NotoSansCJK-Bold.ttc ]
\setCJKfamilyfont { zhkai } { gkai00mp.ttf }
\ctex_punct_set:n { ubuntu }
\ctex_punct_map_family:nn { \CJKrmdefault } { zhsong }
\ctex_punct_map_family:nn { \CJKsfdefault } { zhhei }
\ctex_punct_map_family:nn { \CJKttdefault } { zhsong }
\ctex_punct_map_itshape:nn { \CJKrmdefault } { zhkai }
\ctex_punct_map_bfseries:nn { \CJKsfdefault, zhhei } { zhheib }
\ctex_punct_map_bfseries:nn
{ \CJKrmdefault, \CJKttdefault, zhsong }
{ zhsongb }
}
{
\ctex_load_zhmap:nnnn { rm } { zhhei } { zhsong } { ubuntu }
\ctex_punct_set:n { ubuntu }
\ctex_punct_map_family:nn { \CJKrmdefault } { zhsong }
\ctex_punct_map_bfseries:nn { \CJKrmdefault } { zhhei }
\ctex_punct_map_itshape:nn { \CJKrmdefault } { zhkai }
}
{ \ctex_fontset_error:n { ubuntu } }
}
{
\ctex_set_upmap_unicode:nnn { upserif }
{ :2:NotoSerifCJK-Regular.ttc } { :2:NotoSerifCJK-Bold.ttc }
\ctex_set_upmap_unicode:nnn { upsans }
{ :2:NotoSansCJK-Regular.ttc } { :2:NotoSansCJK-Bold.ttc }
\ctex_set_upmap_unicode:nnn { upmono }
{ :2:NotoSansMonoCJK-Regular.ttc } { :2:NotoSansMonoCJK-Bold.ttc }
\ctex_set_upmap:nnn { upserifit } { gkai00mp.ttf } { }
\ctex_set_upfamily:nnn { zhsong } { upzhserif } { upzhserifb }
\ctex_set_upfamily:nnn { zhhei } { upzhsans } { upzhsansb }
\ctex_set_upfamily:nnn { zhfs } { upzhmono } { }
\ctex_set_upfamily:nnn { zhkai } { upzhserifit } { }
}
{
\setCJKmainfont { Noto~Serif~CJK~SC } [ ItalicFont = AR~PL~KaitiM~GB ]
\setCJKsansfont { Noto~Sans~CJK~SC }
\setCJKmonofont { Noto~Sans~Mono~CJK~SC }
\setCJKfamilyfont { zhsong } { Noto~Serif~CJK~SC }
\setCJKfamilyfont { zhhei } { Noto~Sans~CJK~SC }
\setCJKfamilyfont { zhkai } { AR~PL~KaitiM~GB }
\setCJKfamilyfont { zhfang } { FandolFang }
}
\NewDocumentCommand \songti { } { \CJKfamily { zhsong } }
\NewDocumentCommand \heiti { } { \CJKfamily { zhhei } }
\NewDocumentCommand \kaishu { } { \CJKfamily { zhkai } }
\NewDocumentCommand \fangsong { } { \CJKfamily { zhfang } }
%%
%%
%% End of file `ctex-fontset-overleaf.def'.

使用

ctex-fontset-overleaf.def 放在工作目录下,然后通过文档类选项 fontset=overleaf 调用,用 xelatex/lualatex(用 lualatex 编译,Overleaf 会显示「超时」,因为思源字体太大了) 编译即可。

测试代码如下:

\documentclass[fontset=overleaf]{ctexart}
\begin{document}
宋体\textbf{加粗}\textit{楷体}

\textsf{黑体\textbf{加粗}}

\texttt{等宽\textbf{加粗}}

{\fangsong 仿宋}
\end{document}
文章作者: sikouhjw
文章链接: https://sikouhjw.github.io/2021/02/14/2021-02-14-fontset-overleaf/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 sikouhjw.github.io
支付宝捐赠
微信捐赠