[心得] CJK 全型標點符號「對齊」行尾

看板LaTeX (論文排版)作者 (Myrmarachne)時間17年前 (2008/02/23 00:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
過去在網路上有些人為了使 CJK 中的中文全型標點符號更美觀, 以自定義新命令來取代標點符號,如下例: \def\pe{% \nolinebreak[4]% A \hspace{-0.25em}% B \raise -0.75em\hbox{。}% C \hspace{0.4em}% D } 其中 A 列表示句點前不可斷行;B 列使文字往左移;C 列使文 字下降後輸出句點;而 D 列代表文字後之距離。 之後再將文中所有之句點以 \pe 來取代,即可得到貼近基線及 左側並可避頭點之中文全型句點,非常美觀。 (很抱歉我並不知道這個方法是誰先提出來的,在此向原創者 至上感謝之意。) 不過這個方法似乎有些問題,而且仍不及吳老師等人之 cwTEX 的效果。以下列出幾點。 1. 由於使用了 \nolinebreak[4] 達到避頭點,但其效力仍 貫穿了整個 \pe 命令,故使句號無法在行末出現。 2. 中文的全型句點基乎都沒有所謂的 kerning 設定,故即 使某行之行未為句點,且 LATEX 也貼心地做到左右對齊, 但句點的右邊仍留下了原本的小小空間。 所以我想了一些方法,可以修正這二項問題,一樣也是以中文 全型句點為例: \def\pe{% {% \nolinebreak[4]% A \hspace*{-0.25em}% B \raise-0.75ex\hbox{。}% C \hspace*{-0.25em}% D }% \allowbreak% E \hspace{0.5em plus 0.1em}% F \ignorespaces% G }% 其中與以往不同之處在下列表說明。 1. 我特別為句點之後加了「必須執行」的負水平伸縮距離 (B 與 D 列),使句點的左右兩邊空白都被迫減少。這 二個伸縮距離就是該中文句點「字」本身左右所占據的 空白水平長度。如此一來,B、C、D 三列可以使你得到 一個「沒有左右空白」的中文句點。「必須執行」的用 意在於就算行末是個句點,也必須執行 \hspace*。若僅 使用 \hspace ,在行末的句點輸出後,LATEX 不理會 \hspace。 2. 在輸出句號(C 列)及去除句號本身左右空白(B 與 D 列)之前,為了避頭點,一樣不可以斷行(A 列),但 這四列已被群組,表示不可斷行之功能僅限於這四列。 這樣就可以達成句點後斷行。 3. 在不可斷行之群組功能失效後,即容許斷行(但並非要 求斷行,E 列)。這只是鼓勵 LATEX 可以在此斷行。 4. F 列的「不必須執行」水平拉伸是指「非行末」之句點 右方之空白空間。基於 LATEX 的精神,句子結束又不斷 行的情況下,水平空白應該比較大,所以在 F 列我給予 了較大的空白。 5. 至於 G 列,只是個習慣,必不必要我就不清楚了。 所以我把我的想法寫成一個模型,來表示類似句點這類必須避 頭點之自定命令(如逗號及問號等,但左括號或左引號則不適 用): \def\yourcmd{% {% \nolinebreak[4]% \hspace*{length1}% \raise length2 \hbox{×}% \hspace*{length3}% }% \allowbreak% \hspace{length4}% \ignorespaces% }% 其中 yourcmd 為取代後的 LATEX 命令;length1 為該標點符 號「文字本身」左方空白長度,應為負值,不過若你覺得文字 與之後的標點符號太近了,可以自行修正一下;length2 為該 標點符號往下降的長度,應為負值;length3 為該標點符號「文 字本身」右方空白長度,應為負值;length4 為該標點符號若 並非出現於頁尾的情況下,後之後文字的距離;×為原來的中 文全型標點符號。 這項方法的缺點,是真的挺煩人的。要先抓到不同字體中每個 標點符號的數值,還要記得在文中以新命令取代原本的符號。 此外,吳老師等人也提到,像『「謝謝你。」』中有二個以上 標點符號前後連續出現時,我的方法也還是會有失誤。 此外,我也正在想「避尾點」的標點符號的模式。 我練習 LATEX 並不久,文中若有任何錯誤,望版友們多多指教。 -- http://apansharing.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.128.117.83 ※ 編輯: andrew43 來自: 140.128.117.83 (02/23 01:01) ※ 編輯: andrew43 來自: 140.128.117.83 (02/23 22:30)
文章代碼(AID): #17ll-94Z (LaTeX)
文章代碼(AID): #17ll-94Z (LaTeX)