前言
Overleaf 是在线 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 } }
|
使用
将 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}
|