中文排版风格

中文文案排版指北

統一中文文案、排版的相關用法,降低團隊成員之間的溝通成本,增強網站氣質。


空格

「有研究顯示,打字的時候不喜歡在中文和英文之間加空格的人,感情路都走得很辛苦,有七成的比例會在 34 歲的時候跟自己不愛的人結婚,而其餘三成的人最後只能把遺產留給自己的貓。畢竟愛情跟書寫都需要適時地留白。

與大家共勉之。」——vinta/paranoid-auto-spacing

中英文之間需要增加空格

正確:

在 LeanCloud 上,數據儲存是圍繞 AVObject 進行的。

錯誤:

在LeanCloud上,數據儲存是圍繞AVObject進行的。

在 LeanCloud上,數據儲存是圍繞AVObject 進行的。

完整的正確用法:

在 LeanCloud 上,數據儲存是圍繞 AVObject 進行的。每個 AVObject 都包含了與 JSON 兼容的 key-value 對應的數據。數據是 schema-free 的,你不需要在每個 AVObject 上提前指定存在哪些键,只要直接設定對應的 key-value 即可。

例外:「豆瓣FM」等產品名詞,按照官方所定義的格式書寫。

中文與數字之間需要增加空格

正確:

今天出去買菜花了 5000 元。

錯誤:

今天出去買菜花了 5000元。

今天出去買菜花了5000元。

數字與單位之間需要增加空格

正確:

我家的光纖入屋寬頻有 10 Gbps,SSD 一共有 20 TB。

錯誤:

我家的光纖入屋寬頻有 10Gbps,SSD 一共有 20TB。

例外:度數/百分比與數字之間不需要增加空格:

正確:

角度為 90° 的角,就是直角。

新 MacBook Pro 有 15% 的 CPU 性能提升。

錯誤:

角度為 90 ° 的角,就是直角。

新 MacBook Pro 有 15 % 的 CPU 性能提升。

全形標點與其他字符之間不加空格

正確:

剛剛買了一部 iPhone,好開心!

錯誤:

剛剛買了一部 iPhone ,好開心!

剛剛買了一部 iPhone, 好開心!

text-spacing to the rescue?

CSS Text Module Level 4 的 text-spacing 和 Microsoft 的 -ms-text-autospace 可以實現自動為中英文之間增加空白。不過目前並未普及,另外在其他應用場景,例如 macOS、iOS、Windows 等用戶介面目前並不存在這個特性,所以請繼續保持隨手加空格的習慣。

標點符號

不重複使用標點符號

雖然中國大陸的標點符號用法允許重複使用標點符號,但是這麼做會破壞句子的美觀性。

正確:

德國隊竟然戰勝了巴西隊!

她竟然對你說「喵」?!

錯誤:

德國隊竟然戰勝了巴西隊!!

德國隊竟然戰勝了巴西隊!!!!!!!!

她竟然對你說「喵」??!!

她竟然對你說「喵」?!?!??!!

全形和半形

不明白什麼是全形(全角)與半形(半角)符號?請查看維基百科條目『全形和半形』。

使用全形中文標點

正確:

嗨!你知道嘛?今天前台的小妹跟我說「喵」了哎!

核磁共振成像(NMRI)是什麼原理都不知道?JFGI!

錯誤:

嗨! 你知道嘛? 今天前台的小妹跟我說 “喵” 了哎!

嗨!你知道嘛?今天前台的小妹跟我說"喵"了哎!

核磁共振成像 (NMRI) 是什麼原理都不知道? JFGI!

核磁共振成像(NMRI)是什麼原理都不知道?JFGI!

例外:中文句子內夾有英文書籍名、報刊名時,不應借用中文書名號,應以英文斜體表示。

數字使用半形字符

正確:

這件蛋糕只賣 1000 元。

錯誤:

這件蛋糕只賣 1000 元。

例外:在設計稿、宣傳海報中如出現極少量數字的情形時,為方便文字對齊,是可以使用全形數字的。

遇到完整的英文整句、特殊名詞,其內容使用半形標點

正確:

賈伯斯那句話是怎麼說的?「Stay hungry, stay foolish.」

推薦你閱讀 Hackers & Painters: Big Ideas from the Computer Age,非常地有趣。

錯誤:

賈伯斯那句話是怎麼說的?「Stay hungry,stay foolish。」

推薦你閱讀《Hackers&Painters:Big Ideas from the Computer Age》,非常的有趣。

名詞

專有名詞使用正確的大小寫

大小寫相關用法原屬於英文書寫範疇,不屬於本 wiki 討論內容,在這裡只對部分易錯用法進行簡述。

正確:

使用 GitHub 登錄

我們的客戶有 GitHub、Foursquare、Microsoft Corporation、Google、Facebook, Inc.。

錯誤:

使用 github 登錄

使用 GITHUB 登錄

使用 Github 登錄

使用 gitHub 登錄

使用 gイんĤЦ8 登錄

我們的客戶有 github、foursquare、microsoft corporation、google、facebook, inc.。

我們的客戶有 GITHUB、FOURSQUARE、MICROSOFT CORPORATION、GOOGLE、FACEBOOK, INC.。

我們的客戶有 Github、FourSquare、MicroSoft Corporation、Google、FaceBook, Inc.。

我們的客戶有 gitHub、fourSquare、microSoft Corporation、google、faceBook, Inc.。

我們的客戶有 gイんĤЦ8、キouЯƧquムгє、๓เςг๏ร๏Ŧt ς๏гק๏гคtเ๏ภn、900913、ƒ4ᄃëв๏๏к, IПᄃ.。

注意:當網頁中需要配合整體視覺風格而出現全部大寫/小寫的情形,HTML 中請使用標準的大小寫規範進行書寫;並通過 text-transform: uppercase;text-transform: lowercase; 對表現形式進行定義。

不要使用不道地的縮寫

正確:

我們需要一位熟悉 TypeScript、HTML5,至少理解一種框架(如 React、Next.js)的前端開發者。

錯誤:

我們需要一位熟悉 Ts、h5,至少理解一種框架(如 RJS、nextjs)的 FED。

爭議

以下用法略帶有個人色彩,即:無論是否遵循下述規則,從語法的角度來講都是正確的。

超連結之間增加空格

用法:

請 提交一個 issue 並分配给相關同事。

訪問我們網站的最新動態,請 點擊這裡 進行訂閱!

對比用法:

提交一個 issue 並分配给相關同事。

訪問我們網站的最新動態,請點擊這裡進行訂閱!

簡體中文使用直角引號

用法:

「老师,『有条不紊』的『紊』是什么意思?」

對比用法:

“老师,‘有条不紊’的‘紊’是什么意思?”

工具

倉庫系列語言
pangu.jspanguJavaScript
pangu-gopanguGo
pangu.javapanguJava
pangu.pypanguPython
pangu.rbpanguRuby
pangu.phppanguPHP
pangu.vimpanguVim
vue-pangupanguVue.js (Web Converter)
intellij-pangupanguIntellij Platform Plugin
autocorrectautocorrectRust, WASM, CLI tool
autocorrect-nodeautocorrectNode.js
autocorrect-pyautocorrectPython
autocorrect-rbautocorrectRuby
autocorrect-javaautocorrectJava
autocorrect-goautocorrectGo
autocorrect-phpautocorrectPHP
autocorrect-vscodeautocorrectVS Code Extension
autocorrect-idea-pluginautocorrectIntellij Platform Plugin
jxlwqq/chinese-typesettingotherPHP
sparanoid/space-loverotherPHP (WordPress)
sparanoid/grunt-auto-spacingotherNode.js (Grunt)
hjiang/scripts/add-space-between-latin-and-cjkotherPython
hustcc/hintotherPython
n0vad3v/TekorrectotherPython

美化中文排版工具-Pangu

pangu 是一个专为中文文本处理设计的 Python 库,旨在自动化地在中文文本和其他语言文字(如英文、数字)之间添加适当的空格,确保文本的排版美观且易读。

Paranoid text spacing for good readability, to automatically insert whitespace between CJK (Chinese, Japanese, Korean) and half-width characters (alphabetical letters, numerical digits and symbols).

Installation

1
$ pip install -U pangu

Usage

In Python

1
2
3
4
5
6
7
import pangu

new_text = pangu.spacing_text('當你凝視著bug,bug也凝視著你')
# new_text = '當你凝視著 bug,bug 也凝視著你'

nwe_content = pangu.spacing_file('path/to/file.txt')
# nwe_content = '與 PM 戰鬥的人,應當小心自己不要成為 PM'

In CLI

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ pangu "請使用uname -m指令來檢查你的Linux作業系統是32位元或是[敏感词已被屏蔽]位元"
請使用 uname -m 指令來檢查你的 Linux 作業系統是 32 位元或是 [敏感词已被屏蔽] 位元

$ python -m pangu "為什麼小明有問題都不Google?因為他有Bing"
為什麼小明有問題都不 Google?因為他有 Bing

$ echo "未來的某一天,Gmail配備的AI可能會得出一個結論:想要消滅垃圾郵件最好的辦法就是消滅人類" >> path/to/file.txt
$ pangu -f path/to/file.txt >> pangu_file.txt
$ cat pangu_file.txt
未來的某一天,Gmail 配備的 AI 可能會得出一個結論:想要消滅垃圾郵件最好的辦法就是消滅人類

$ echo "心裡想的是Microservice,手裡做的是Distributed Monolith" | pangu
心裡想的是 Microservice,手裡做的是 Distributed Monolith

$ echo "你從什麼時候開始產生了我沒使用Monkey Patch的錯覺?" | python -m pangu
你從什麼時候開始產生了我沒使用 Monkey Patch 的錯覺?

简易中文简繁转换

文档

zhconv 提供基于 MediaWiki 和 OpenCC 词汇表的最大正向匹配简繁转换,支持地区词转换:zh-cn, zh-tw, zh-hk, zh-sg, zh-hans, zh-hant。Python 2、3通用。

简单使用

若要求高精确度,参见 OpenCC 和 opencc-python

1
2
3
4
5
>>> from zhconv import convert
>>> print(convert(u'我幹什麼不干你事。', 'zh-cn'))
我干什么不干你事
>>> print(convert(u'人体内存在很多微生物', 'zh-tw'))
人體內存在很多微生物

其中,zh-hans, zh-hant 仅转换简繁,不转换地区词。

完整支持 MediaWiki 人工转换语法:

1
2
3
4
5
6
7
8
>>> print(convert_for_mw(u'在现代,机械计算-{}-机的应用已经完全被电子计算-{}-机所取代', 'zh-hk'))
在現代機械計算機的應用已經完全被電子計算機所取代
>>> print(convert_for_mw(u'-{zh-hant:資訊工程;zh-hans:计算机工程学;}-是电子工程的一个分支,主要研究计算机软硬件和二者间的彼此联系。', 'zh-tw'))
資訊工程是電子工程的一個分支主要研究計算機軟硬體和二者間的彼此聯繫
>>> print(convert_for_mw(u'張國榮曾在英國-{zh:利兹;zh-hans:利兹;zh-hk:列斯;zh-tw:里茲}-大学學習。', 'zh-sg'))
张国荣曾在英国利兹大学学习
>>> print(convert_for_mw('毫米(毫公分),符號mm,是長度單位和降雨量單位,-{zh-hans:台湾作-{公釐}-或-{公厘}-;zh-hant:港澳和大陸稱為-{毫米}-(台灣亦有使用,但較常使用名稱為毫公分);zh-mo:台灣作-{公釐}-或-{公厘}-;zh-hk:台灣作-{公釐}-或-{公厘}-;}-。', 'zh-cn'))
毫米(毫公分)符号mm是长度单位和降雨量单位台湾作公釐或公厘

和其他高级字词转换语法

转换字典可下载 MediaWiki 源码包中的 includes/ZhConversion.php,使用 convmwdict.py 可转换成 json 格式。

代码授权协议采用 MIT 协议;转换表由于来自 MediaWiki,为 GPLv2+ 协议。

在Spark集群中使用该项目

在分布式集群中,也许受环境限制,不便于在每台机器上安装该项目。 那么你可以从driver机器中单独上传该项目的egg文件,不需要依赖于其它的项目。

1
2
3
4
# python setup.py bdist_egg

# ls dist
zhconv-1.2.2-py2.7.egg

如果在本地,则可以直接执行sys.path.append('PATH_TO_ZHCONV/zhconv-1.2.2-py2.7.egg')后使用。

小工具

EPUB 电子书简繁转换:python3 epubzhconv.py 输入.epub 输出.epub zh-{cn,tw}

Open Chinese Convert 開放中文轉換

Open Chinese Convert 開放中文轉換

Open Chinese Convert (OpenCC, 開放中文轉換) is an opensource project for conversions between Traditional Chinese, Simplified Chinese and Japanese Kanji (Shinjitai). It supports character-level and phrase-level conversion, character variant conversion and regional idioms among Mainland China, Taiwan and Hong Kong. This is not translation tool between Mandarin and Cantonese, etc.

中文簡繁轉換開源項目,支持詞彙級別的轉換、異體字轉換和地區習慣用詞轉換(中國大陸、臺灣、香港、日本新字體)。不提供普通話與粵語的轉換。

Discussion (Telegram): https://t.me/open_chinese_convert

Features 特點

  • 嚴格區分「一簡對多繁」和「一簡對多異」。
  • 完全兼容異體字,可以實現動態替換。
  • 嚴格審校一簡對多繁詞條,原則爲「能分則不合」。
  • 支持中國大陸、臺灣、香港異體字和地區習慣用詞轉換,如「裏」「裡」、「鼠標」「滑鼠」。
  • 詞庫和函數庫完全分離,可以自由修改、導入、擴展。

installation 安裝

See Download.

Usage 使用

Online demo 線上轉換展示

Warning: This is NOT an API. You will be banned if you make calls programmatically.

https://opencc.byvoid.com/

Python

PyPI pip install opencc (Windows, Linux, Mac)

1
2
3
import opencc
converter = opencc.OpenCC('s2t.json')
converter.convert('汉字')  # 漢字

C++

1
2
3
4
5
6
7
#include "opencc.h"

int main() {
  const opencc::SimpleConverter converter("s2t.json");
  converter.Convert("汉字");  // 漢字
  return 0;
}

C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include "opencc.h"

int main() {
  opencc_t opencc = opencc_open("s2t.json");
  const char* input = "汉字";
  char* converted = opencc_convert_utf8(opencc, input, strlen(input));  // 漢字
  opencc_convert_utf8_free(converted);
  opencc_close(opencc);
  return 0;
}

Document 文檔: https://byvoid.github.io/OpenCC/