中英文之間的空格處理

中英文之間的空格處理

第一次使用 markdown 開始,中英文之間的空格就是讓我頭疼的一個問題。在使用 latex 時,中英文之間的空格會自動處理。這讓我以爲撰寫其它格式的文檔時也會有相同的處理方式,可我最終發現這不過是我自己一廂情願的想法罷了。

今天,我開始嘗試解決這個問題。經過一系列的努力發現我其實可以通過半角與全角的切換來完成。

以前我一直使用全角標點,這樣造成的問題是在進行中英文混排時,中英文的切換頻繁,效率低下。中英文之間的空格也讓我頭疼不已。

今天我發現,可以通過將符號調整爲半角來提高輸入的效率。當使用半角符號時,輸入的空格爲標準空格,在中文模式下也可以直接輸入英文。當使用全角時,中文輸入模式下的空格爲全角空格,輸入一個半角空格需要切換輸入模式爲英文。這算是一大改善吧!

我也嘗試使用 sed 來解決這個問題。不過由於 sed 對於 unicode 的匹配支持的相對薄弱,我無法找到一個直接的方式來處理中英文之間的空格。多次嘗試無果後,我決定換一種思路,使用反向選擇的方式來解決這個問題。

既然我不能直接匹配到中文字符,那麼我能不能通過反向匹配除了中文之外的字符來達成呢?事實證明這一點能夠做到。依靠 POSIX 字符類我就能使用反向匹配來匹配到中文字符。

這裏我首先將自己已經排版好的文章轉換爲缺少空格的內容。使用的sed命令如下

s/\([[:upper:][:lower:][:digit:][:punct:]]\+\)[  ]\+\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)/\1\2/g
s/\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)[  ]\+\([[:upper:][:punct:][:lower:][:digit:]]\+\)/\1\2/g

添加空格的命令如下:

 s/\([[:upper:][:lower:][:digit:]]\+\)\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)/\1 \2/g 
  2 s/\([^[:upper:][:lower:][:space:][:punct:][:digit:]]\)\([[:upper:][:lower:][:digit:]]\+\)/\1 \2/g

由於 [:punct:] 會匹配半角與全角符號,在中文環境中全角符號後不需要添加空格,半角符號前後需要添加空格。對半角符號前後空格的添加無法使用 POSIX 字符類完成。可以使用普通字符類完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章