2020年12月28日 星期一

使用 Noto fonts 及 xelatex 製作中文文件

最近才看到 Google 有釋出免費的、開放原始碼的「思源宋體」Noto fonts, 而且 Ubuntu 20.04 內已經能直接安裝,所以來實驗一下如何搭配 xelatex, 只用少少的幾行程式碼就能夠製作中文文件。

如果 Ubuntu 內沒有 Noto 字型的話,使用以下方式安裝:

$ sudo apt install fonts-noto-cjk fonts-noto-cjk-extra
fonts-noto-cjk 有包含宋體 (Serif) 及黑體 (Sans),但每種字體只有 Regular, Bold 2 種 weights

fonts-noto-cjk-extra 則多加其他 5 種 weights。

這個網頁有完整的 7 種 weights 說明。

Serif 由細到粗分別為 ExtraLight, Light, Regular, Medium, SemiBold, Bold, Black。

Sans 由細到粗分別為 Thin, Light, DemiLight, Regular, Medium, Bold, Black。

Noto Serif CJK TC 要設定不同粗細的字體, 直接加在名稱後面加粗細的定義即可, 例如: Noto Serif CJK TC Medium。

使用 xelatex

製作一個 test.tex 檔案如下,這裡完全不使用任何 CJK 相關的套件,僅改變字型。
\documentclass[12pt]{article}
\usepackage{fontspec}
\setmainfont{Noto Serif CJK TC}
\setsansfont{Noto Sans CJK TC}

\title {文件標題 Title}
\author {Foo 張三李四}

\begin{document}
\maketitle

測試使用中文的文件。

\section{第一章}

測試中文文件,並且使用 Noto Serif CJK TC 字型的文件。看看中文能否正確顯示?
大道之行也,天下爲公,選賢與能,講信修睦。
故人不獨親其親,不獨子其子,使老有所終,壯有所用,幼有所長,矜、寡、孤、獨、廢疾者皆有所養,男有分,女有歸。

貨惡其棄於地也,不必藏於己;力惡其不出於身也,不必爲己。
是故謀閉而不興,盜竊亂賊而不作,故外戶而不閉,是謂大同。

\end{document}

使用以下命令將 test.tex 編譯為 test.pdf

$ xelatex test.tex

輸出的 PDF 文件如下:

由此可看出中文顯示正常,但沒有斷句這些功能。為了要正常斷句,需要使用  xeCJK package. 在上述文件中加入一行:
\usepackage{fontspec}
\usepackage{xeCJK}
...
即可發現文字有正常斷句了。
由此可看出斷句正常了,但是文字看起來好像不太正常。而且實際上本來應該「斜體」的英文字 Google 也沒有正常斜體。
使用了 xeCJK package 後,應該用以下的方式設定中文字:
\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK TC}
\setCJKsansfont{Noto Sans CJK TC}
...
這樣設定之後看起來好多了。字體可正常,英文斜體也正常。

LyX 的設定

在 Document Settings 的 Fonts 勾選 Use non-TeX fonts, Language 的部份選擇 Chinese (traditional), LaTeX Preamble 內輸入至少有以下設定:
\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK TC}[ItalicFont={* Black}]
\setCJKsansfont{Noto Sans CJK TC Light}
\setCJKmonofont{Noto Sans Mono CJK TC}
由於中文沒有 ItalicFont, 因此定義更加粗的字體代表斜體字。