cht電腦資訊文書排版TeX
adm Find login register

LuaLaTeX 排版中文(二):字型設定

qtnez

joined: 2016-10-14
posted: 92
promoted:
bookmarked:
台灣‧屏東
1subject: LuaLaTeX 排版中文(二):字型設定Promote 0 Bookmark 02020-11-16quote  

目前 LuaTeX(LaTeX) 的中文排版,是靠 luatexja 這個 package,這是日本人寫的,當然第一重點是處理日文,但在斷行及字體處理上,中日文其實差不多,可以沿用,就是小部份排版慣例上的不同而會有不同。像日文絕少使用問號及驚嘆號,中文就用得很多。

中文字型的設定,可以使用 luatexja-zhfonts 這個 package。已經定義好許多中文字型定義,但繁體中文只有一種,那就是 cwttf(這是由 cwTeX Type 1 字型轉成的 TrueType 字型)。要修改或者增加的話,把這個檔案 copy 到你的工作目錄,再來修改,編譯時會優先選用工作目錄的同名檔案(依樣畫葫蘆增加就可以了)。文稿中使用上也很簡單,以 cwttf 為例:

\usepackage[cwttf]{luatexja-zhfonts}

只要這一行就行了,就會調用 cwttf(當然,你的系統上要安裝好這些字型)。這樣就不會在文稿上布滿了一堆字型定義。

有了 luatexja-zhfonts 就不必再引入 luatexja-fontspec 或者是 luatexja package 了,會自動引入。

如果不選用定義好的字型,那麼系統預設(luatexja 的預設)會使用 Harano 字型(安裝 TeX Live 的話,這些字型會安裝上去)。這是日本的字型,雖然有漢字,但形狀和我們有小差異,但基本上能用,但像「喩」和「喻」的話,是會選用前者。而且,標點符號是在左下底線(baseline)上的,而不是在中央。


註(2020.11.16):
cwttf 可以在此下載:
或者需要標點符號左下底線的字型的話,可以考慮 cwTeX Q 字型(修改自 cwttf):
https://github.com/l10n-tw/cwtex-q-fonts  (字型的名稱要自行更改,和原 cwttf 不一樣)

-- 
Do not feed the troll, please.

edited: 2
guest
2subject: Promote 0 Bookmark 02020-11-16quote  

感謝分享。luacode那一段確實有大用,也還需要加入一些符號(例如頓號)否則可能會出現在列首。

qtnez

joined: 2016-10-14
posted: 92
promoted:
bookmarked:
台灣‧屏東
3subject: Promote 0 Bookmark 02020-11-16quote  

luatexja 本身有避頭點的功能,因此不會出現在行首。不過,那段 lua code 是暫時性的,

正常應該是從原始碼去修改,或者另一套的機制來處理,例如 xeCJK 及 ctex 的做法,這

裡只是簡單的介紹可以不必透過其他套件就就可以處理中文。

 

會這麼處理是因為 luatexja 不知道為什麼在 lualatex 文稿時,問號及驚嘆號後面會多留空

白。plain luatex 則不會如此。因此只修正問號及驚嘆號的部份。

-- 
Do not feed the troll, please.

edited: 1
guest
4subject: Promote 0 Bookmark 02020-11-17quote  

qtnez

luatexja 本身有避頭點的功能,因此不會出現在行首。

我滿肯定對頓號還沒有加入避頭點的功能,但利用您提供的luacode把頓號取代成「頓號加空白鍵」即可解決,亦沒有多餘不自然的空白,供您參考。

可能是日文不用頓號所以luatexja沒有處理好的關係?整體來看,xecjk的解決方案對中文文稿還是成熟非常多。

qtnez

joined: 2016-10-14
posted: 92
promoted:
bookmarked:
台灣‧屏東
5subject: Promote 0 Bookmark 02020-11-17quote  

guest
我滿肯定對頓號還沒有加入避頭點的功能,但利用您提供的luacode把頓號取代成「頓號加空白鍵」即可解決,亦沒有多餘不自然的空白,供您參考。

可能是版本的問題?我用的是 TeX Live 2020。

$ lualatex -v
This is LuaHBTeX, Version 1.12.0 (TeX Live 2020/W32TeX)

我測試的結果頓號(U+3001)是會避頭點。能舉個不會避頭點的小例子嗎?謝謝!

可能是日文不用頓號所以luatexja沒有處理好的關係?整體來看,xecjk的解決方案對中文文稿還是成熟非常多。

因為日文用的頓號和我們的不一樣,就像他們絕少使用問號及驚嘆號一樣。

-- 
Do not feed the troll, please.

edited: 2
qtnez

joined: 2016-10-14
posted: 92
promoted:
bookmarked:
台灣‧屏東
6subject: Promote 0 Bookmark 02021-03-04quote  

附件(ltj-zhfonts.sty)是我從 luatexja-zhfonts.sty 修改來的,有需要的朋友可以拿來修改後使用。

可以放目前工作目錄,或放在 texlive/texmf-local/tex/latex/local 目錄下,texhash 後就可以使用。

選項有一個預設,就是 myfont,因此不加參數的話,預設就是 myfont

由於明體的粗體是用黑體字(明、宋體的粗體視覺上並不明顯),因此已經自動載入 titlesec pacakge,並設定在章節標題是用黑體字。

 

註:myfont 所需要的字型可以在這裡下載:

luatexja-template/fonts at main · qtnez/luatexja-template (github.com)

 

【補充說明】 Wed Mar 3 20:50:00 CST 2021

基本上 myfont 中文字體的配置如下:

字族的部份:

Roman(\textrm{}) 明體
sans serif(\textsf{}) 黑體
Typewriter(\texttt{}) 仿宋體

字序(series)的部份:

Medium(\textmd{}) 各依上述設定
Boldface(\textbf{}) 一律用黑體(Italic 除外)

字形(shape)的部份:

Italic/Slant(\textit{}, \textsl{}) 一律使用楷體(其粗體使用顏楷體)
※原因是不管中英文都屬於書寫體。

另外,如果編譯超大型文件(例如二、三千頁以上),最好設在本文裡頭,不要 引用字型的 package。這裡頭 luatex 引擎對記憶體的配置還有問題,會產生記 憶體不夠的情況。


-- 
Do not feed the troll, please.

edited: 1

cht電腦資訊文書排版TeX
adm Find login register
views:12287