← 文章列表

中文和英文之間要不要空格?

中西文之間留一個空格是排版慣例,手動補卻很煩。這篇說明 ZingIME 怎麼自動處理、數字為什麼現在也加,以及哪些交界它刻意不加。

先看這句:

今天 review onboarding flow,下午再跟 Jason 確認 API 文件。

中文和英文之間那幾個空格,有人叫它「盤古之白」。中文排版慣例、多數中文技術文件的規範,都要求這個空格。理由不是潔癖 —— 方塊字和拉丁字母的視覺密度差很多,緊貼在一起時兩邊的邊界會糊掉。把上面那句的後半段空格拿掉看看:

下午再跟Jason確認API文件

中文和英文黏成一整條,眼睛得自己找出 Jason 和 API 從哪裡開始、到哪裡結束。

問題是這東西手動補很累。一句話裡中英交錯三四次,就要按三四次空白鍵,而且每一次都要先意識到「我現在跨語言了」。多數人撐不久,最後就不補了。

ZingIME 直接幫你補。打「你好」接著打 hello,出來就是「你好 hello」;反過來打 hello 接著打中文,也一樣。

數字也加

下午 3 點做 4 個28 號:2.5 起,數字和中文之間也會自動加空格,跟排版規範一致。

之前的版本刻意不加。大千鍵盤的數字鍵同時是注音鍵,打中文時手滑按到一個數字,它會被當成字面送出,兩側各補一個空格;等你把那個數字刪掉,兩個空格就留在兩個中文字中間。多出來的空格比少一個空格難發現得多,所以當時寧可全部不加。

現在能加,是因為有了「整句打完再送出」。句子送出之前,空格還沒真的寫進 App,每打一個字都重新算一次。手滑的數字自成一段,按 Backspace 刪掉它,兩側的空格跟著消失,沒有東西會留下來。

只剩一種情況要自己收拾:句子已經送出之後才回頭刪數字,那兩個空格就是 App 裡的普通文字了。

難的不是加,是知道哪裡不該加

如果規則只是「中文碰到英文就塞一個空格」,那五分鐘就寫完了。實際上有兩類交界刻意不加

一、黏住後面那個東西的符號,不加

( [ { < " ' - _ / \ $ @ # 這一類是「開頭」或「連接」性質的符號 —— 它們修飾的是後面那個東西,中間塞空格會把它們拆開。所以直接接中文時不會加:

(中文)     @某人     #中文標籤

收尾性質的就會加。Hello. 中文50% 中文,句點和百分號都是話講完了,後面接中文自然要分開。

全形標點完全不用管。 「你好,hello」不會多出空格 —— 全形逗號本身就是分隔符,它已經把兩邊隔開了。

二、你自己已經打過空格

輸入法會去問應用程式「游標前面那個字是什麼」,再決定加不加。所以你自己按的空白鍵、貼上的文字結尾、把游標移到某個位置之後 —— 這些它都看得到,不會重複補。

這也表示它讀的是真正的上下文,不是它自己的記憶。剛切到另一個 App、游標停在一段既有的中文後面,接著打英文,一樣會加空格。

中英文之間的空格,跟英文字之間的空格是兩回事

英文單字之間的空格不歸這個開關管。helloworld 中間要有空格,那是英文的拼寫規則,不是中英混排的美觀問題,所以就算你把自動加空格關掉,它還是會分開。

不想要的話

偏好設定 → 基本設定 →「自動在中英文之間插入空格」,預設是開的。

關掉之後就是完全照你打的出字,一個空格都不會自己冒出來。

順帶一提

這是那種做對了沒人會注意,做錯了很煩的功能。上面每一條例外都是踩過之後才長出來的,數字那條更是先拿掉、等到有辦法處理手滑,才又加回來。

完整的規則列在中英自動加空格那頁。如果你遇到判斷得很怪的情況,歡迎寫信到 [email protected] —— 這個功能的例外清單就是這樣長出來的。