如何解決漢歐間距

在文字編輯器或排版軟體裡用 regular expression(正規表示式,regex)在搜尋與取代裡,找出所有相鄰或有一個空格間隔的漢字與拉丁字元:

([a-zA-Z0-9])(?! )\h?([一-龥])

另一個方向:

([一-龥])(?! )\h?([a-zA-Z0-9])
  • [a-zA-Z0-9] 是搜尋所有拉丁與數字字元。
  • 後面的 [一-龥] 是所有漢字字元。
  • () 是把包起來的值變成變數(但 (?!) 不是)。這樣才可以在「取代」的部分回來取用。
  • \h 指的是非換行的空白字元,包括 tab。我其實不想找 tab 但找不到對應的尋找方法(除非直接用 Unicode 去找)。後面的 ? 指的是這個空白字元可以有也可以沒有。
  • (?! ) 是指在後面的 \h? 前面不要有 tab。

然後在「取代為」輸入框裡:

\1 \2

或者

$1 $2
  • \1$1 代表取用變數一,也就是前面用 () 框起來的第一個變數。

如此一來,就可以找到文中所有漢歐間距的存在,並且直接插入或替換喜歡的空白字元。我自己是喜歡用 thin space(),大概是 1/6 em 到 1/5 em 寬。它比一般空白(通常是 1/4 em 寬)窄,不會讓漢字句中出現太大的間隔而又斷裂感,但也還是跟完全沒有間隔不一樣。

我喜歡使用特殊空白字元來處理漢歐間距,因為首先有無間隔是關於語義的,拉丁書寫系統裡的字就是用間隔來表示字(詞)的開始與結束。今天如果我要用漢歐混合的書寫方式來表達一個詞,比如說「耶su」,那它就不適合加上間隔。

另一個原因是,使用字元的解決方案是支援度最廣的,並且不用針對每個排版環境去重新設定。它甚至可以從最初打字的時候就加進去,一直到最後網頁或排版軟體都留在裡面不動。更不用說直接解決了不同瀏覽器的排版差異。

雖然常常說「不要用空白來排版」什麼的,但各種特殊空白字元本來也就是 typography 的一部分。尤其是處理語義上的字元間距的時候,用空白字元來處理是最合適的。

許立衡

許立衡

作者。敘事鋸創辦人。
Taiwan