陳家瑋

在 LaTeX 建立中文文件

2023-01-22


引言

目前我在這個寒假裡,不去過年,也不去弄期限即將在即的專研跑來研究 LaTeX,在搜尋引擎搜尋了一番得到的答案是,目前在 LaTeX 文件中使用中文有兩種辦法,一種是引入 xeCJK 套件,另一種方法是使用 cTeX 套件。

xeCJK

xeCJK 雖然可以完美達成使用中文的需求,但是如果要對文件做進階的設定,例如:圖目錄、表目錄、又或是各個階層的字體樣式,需要自行設定的東西實在是太多了,而且網路上能找到的資源較少,不如直接站在開發已久的巨人的肩膀上——cTeX。

cTeX

cTeX 的依賴套件中就包含 xeCJK 而且完美的解決在 LaTeX 中使用中文的問題,我們只需要修改字型與文本內容即可。因為該套件是針對簡體中文的使用者設計,所以只需要將內定的物件名稱(例如「目录」替換成「目錄」)翻譯成繁體中文。還有將 cTeX 使用的字體由簡體中文改成繁體中文,因為字體的不同可能會造成缺字的問題。

繁體中文字體支援

雖然現階段 cTeX 會自動根據作業系統載入對應的字體,不過預設的字體是簡體中文的,這裡我有寫了一個專沒給 XeLaTeX 編譯用的繁體中文的版本。

根據你的作業系統複製對應的程式碼,將檔案儲存成 ctex-fontset-<name>.def 並與要編譯的 tex 檔案放在同一個資料夾。

檔案請命名成第一行 \ProvidesExplFile {} 中的檔案名稱。

展開 windows 版本
展開 mac 版本

添加完成後,因為要使用自訂的字體,所以要先將自動抓取簡體中文字體的功能關閉。我們可以添加 fontset = none 的選項到 cTeX 的 class 中避免字體自動載入。

\documentclass[
    fontset = none,
    % 其他選項...
]{ctexart}

接著用 cTeX 的指令 \ctexset 設定預先定義的字體,一樣是放在 tex 檔案 preamable 的位置:

\ctexset{
    % 曲檔案名稱 ctex-fontset-<name>.def 中 name 的部分為預先定義的字體名稱
    % 例如 ctex-fontset-macnew-tc.def 就取 macnew-tc 為字體名稱
    fontset = macnew-tc,
    % 其他設定...
}

測試用的中文文件,記得要改 <name> 的部分,且使用 XeLaTeX 編譯:

\documentclass[fontset = none]{ctexart}
\ctexset{fontset = <name>}
\begin{document}
繁體中文測試。
\end{document}

cTeX 套件的文件類型

這裡介紹著 cTeX 套件內建的文檔類型,預設文件類型會根據中文重新設定標題名稱、樣式、字體大小等等,可以直接使用它。

使用時,直接在 \documentclass 中設置即可。

如果不使用預設文件類型又想使用 cTeX 套件的話,需要用 \usepackage 手動將套件載入,但是預設不會開啟章節標題設定的功能,需要加入選項 heading = true 開啟。

例如:

\usepackage[ heading = true ]{ctex}

字體大小設定

如果在套用 文件類型 時,沒有指令字體大小的話,預設是使用中國的「五号」字。套用後,文件的基礎字體大小會使用 10.5 pt 作為基礎字體大小,也就是套用下表五号的 \normalsize

指令五号小四10pt11pt12pt
\tiny5.56.5566
\scriptsize6.57.5788
\footnotesize7.598910
\small910.591011
\normalsize10.512101112
\large1215121214
\Large1518141417
\LARGE1822171720
\huge2224202025
\Huge2626252525

如果要將基礎字體大小改為 12pt,要在套用文件類型時加入選項 12pt

\documentclass[ 12pt ]{ctexrep}

如果要使用基礎字體大小為上列 \normalsize 以外的數字,可以搭配套件 extsizes

extsizes

套件中提供了 8pt、9pt、10pt、11pt、12pt、14pt、17pt 與 20pt 可供使用。但,如果要與 extsizes 一起使用,需要使用上面提到的 手動載入 cTeX 套件 的方式,將它載入。

例如我想要讓我整個文件的基礎字體大小為 14pt,我需要這麼做:

\doumentclass[ 14pt ]{extreport}
\usepackage[ heading = true ]{ctex}

文件標題預設值翻譯

這裡會介紹各個中文標題中文化的部分,下表是可以設定的選項。可以根據自己的需求在 \ctexset 中使用 <key> = <value> 的方式設定。

標題位置選項預設值
目錄contentsname目录
圖目錄listfigurename插图
表目錄listtablename表格
圖標號figurename
表標號tablename
摘要abstractname摘要
索引indexname索引
附錄appendixname附录
參考文獻bibname参考文献
證明proofname证明
參考文獻(beamer)refname参考文献
方程式algorithmname算法
接續字樣(beamer)continuation(续)

例如我們想要將目錄與圖目錄翻譯成中文,可以這樣做:

\ctexset{
    contentsname = 目錄,
    listfigurename = 圖目錄
}

文件標題樣式設定

編號

.../name

如過要對章節名稱設定,可以使用上面兩種方式設定。一種是同時設定前綴詞與後綴詞,而另外一種只設前綴詞。name 的父階層需指定章節標題名稱。

預設標題名稱所對應的預設值如下表所示,其中 scheme = chinese 的檔案選項只要套用 cTeX 的文件類型 就會自動套用,而 scheme = plain 是 LaTeX 文件類型的預設值。

標題名稱scheme = chinesescheme = plain
part{第,部分}{\partname\space}
chapter{第,章}{\chaptername\space}
section(beamer){}{\sectionname\space}
section同右{}
subsection(beamer){}{\subsectionname\space}
subsection同右{}
subsubsection同右{}
paragraph同右{}
subparagraph同右{}

補充說明: \partname 原為 Part; \chaptername 原為 Chapter; \sectionname 原為 \translate{Section}\subsectionname 原為 \translate{Subsection}

例如:

\ctexset{
  section = {
    name = {第,節}
  }
}

會使章節階層為 \section 標題套用「第 n 節」的格式設定。

.../number

變更輸出數字的格式。輸出數字的指令可以參考 這裡 。而載入 cTeX 時,也會自動載入 zhnumber 套件,此時新增了一個輸出數字指令 \chinese,可以幫助你輸出對應計數器中的數字用中文表示。例如:

\ctexset{
  chapter = {
    name = {第,章},
    number = \chinese{chapter}
  }
}

假設目前章節的計數器為 3,上面的設定將會輸出「第三章」。

格式

cTex 套件提供了 formatnumbernamenameformattitleformat 這幾個選項用來設定章節標題。下圖是各選項分別的作用區域示意圖。

$$\begin{align*} \underbrace{ \overbrace{ \text{第}\space \underbrace{1}_{{\mathclap{\text{numberformat}}}} \space\text{章} }^{\text{nameformat}} \quad \overbrace{ \text{安裝 \LaTeX} }^{\text{titlename}} }_{\text{format}} \end{align*}$$

.../format

aaa
標題名稱scheme = chinesescheme = plain
part(article)\Large\bfseries\centering\raggedright
part(beamer)同右\centering
part\huge\bfseries\centering\centering
chapter\huge\bfseries\centering\raggedright
section(beamer)同右\centering
section\Large\bfseries\centering\Large\bfseries
subsection(beamer)同右\centering
subsection同右\large\bfseries
subsubsection同右\normalsize\bfseries
paragraph同右\normalsize\bfseries
subparagraph同右\normalsize\bfseries

.../nameformat

標題名稱scheme = chinesescheme = plain
part(article){}\Large\bfseries
part(beamer)同右\usebeamerfont{part name} \usebeamercolor[fg]{part name}
part{}\huge\bfseries
chapter{}\huge\bfseries
section(beamer)同右\usebeamerfont{section name} \usebeamercolor[fg]{section name}
section同右{}
subsection(beamer)同右\usebeamerfont{subsection name} \usebeamercolor[fg]{subsection name}
subsection同右{}
subsubsection同右{}
paragraph同右{}
subparagraph同右{}

.../numberformat

.../titleformat

標題名稱scheme = chinesescheme = plain
part(article){}\huge\bfseries
part(beamer)同右\usebeamerfont{part title}
part{}\Huge\bfseries
chapter{}\Huge\bfseries
section(beamer)同右\usebeamerfont{section title}
section同右{}
subsection(beamer)同右\usebeamerfont{subsection title}
subsection同右{}
subsubsection同右{}
paragraph同右{}
subparagraph同右{}

間距、縮排

.../beforeskip

.../aftereskip

.../fixskip

目錄、附錄

tocdepth