Re: 'text-spacing' 有關中英間隔部份的問題探討(原: 中英文字中的間隔)

大家好,我是梁海(Twitter: @lianghai),这几天重返兴趣组了。

一、為什麼至今沒有人用 'text-autospace'?  

呃,我弱弱地表示自己也真的从来不知道这个属性……
中文互联网倒是也能找到一些介绍这个属性的文字,但确实都不入流的样子。
为什么这个属性一直被忽视(以至在 [1] 这样深入的讨论中都无人提起)呢?我能想到的是:

1) 会特意在中西文间留出空格的人确实很少。(「這種需求還是相當的邊緣」)
2) 这些人通常都很在意排版细节,在视觉方面很敏感——而这样的人通常不用 IE。(「別的瀏覽器不支援」)
3) 对很在乎中西文间空格的人来说,仅仅为自己都不用的浏览器 IE 去提供 progressive enhancement 是不够的,所以必须手动留空格来保证自己期望的样式在任何地方都效果一致。
4) 内容与样式分离的思路在这里并不紧要——中西文间空格可以理解为西文词间空格的自然延伸。
5) 手动加空格的效果已经很不错了,没什么大问题,更没有动力去尝试一个不成熟的 CSS 属性了。
6) IE 和目前逐渐兴起的数字阅读领域也没什么交集——大家都用 WebKit。
7)「對 IE 的實作不滿意」这一条,因为我暂时还没用过这个属性,不知效果如何,也就不知其他人的想法了。
8) 甚至我现在得知了这条属性也想不出什么时候能用上它(IE-only……)。
9) 类似的,曾经只有 IE 支持为汉字应用 text-align: justify,这也没能阻止人们认为「不要给中西文混排的文本用 text-align: justify」。

[1] 中英文混排时中文与英文之间是否要有空格? http://www.zhihu.com/question/19587406

二、屬性本身的命名

我觉得还不错,算是很精到的概括了。
相比之下,Adobe InDesign 的相关功能是归入「标点挤压」的,很怪异(中西文间空格、段首空格也都由「标点挤压」管理)。
Text 意义也很适合中文和日文,因为我们没有明确的 letter 和 word。
不过 text 给人的感觉确实是成串的文本,但这个属性还处理标点挤压——text 和标点的关系确实有点别扭。
但总体还是相当不错,我暂时想不到什么更好的。

三、屬性取值的命名

难不难拼这个事情我倾向于不考虑……(「覺得 'integer' 都很難拼了」…… Kenny 你又在卖萌了……)
之所以用「ideograph」,应该主要是为了和 Unicode 术语一致吧。Unicode 当初选这个词可能就已经着重考虑了「政治正确」的问题——「ideograph」这词从学术上讲也是不太恰当的。

我理解「alpha」指的是广义的「alphabet」(拼音文字),这是从 script(文字)角度做的分类,和「ideograph」(表意字)相对。这个措词相当严谨。
「latin」不行,因为「latin」只是 Latin/Roman alphabet,不包括该 character class 同样包含的 Greek、Cyrillic 等狭义 alphabet,也不包含 Arabic、Devanagari 等广义 alphabet。

「numeric」确实比较奇怪,不知是不是 Unicode 术语。平常确实都说「numeral」。不过「number」肯定不行,它指的是「10」这样的数字,不是「1」、「0」这样的数字符号/字符。

我基本支持现在的取值命名,仅仅觉得「numeric」似乎该改成「numeral」。「ideograph」这个,为了和 Unicode 协调(这个属性和 Unicode 的关系非常密切,如果术语不统一,会更麻烦),现在这样就挺好了。

四、'cjk-mode'?

「我覺得 'ideograph-alpha' 跟 'ideograph-numeric' 同時使用的可能性比單獨使用一個高」——这个假设不一定对,参见 [1](链接在上文里)。在数字两侧留空格的必要性比较弱,不少人不在数字两侧留空格(最典型的例子就是:「2012年1月1日」vs「2012 年 1 月 1 日」)。
我认为为此提供这样的等价取值不太必要。取值选项平实一些比较好。

四之一、'cjk-puntuation'?

Kenny 习惯在属性名两侧用的这个「引号」是 U+0027 APOSTROPHE('),相关的还有一个 U+0022 QUOTATION MARK("),这两个(又称「直引号」、「straight quote」等)是纯粹的西文标点,中文是不用它们的。中文用弯引号(“ ‘ ’ ”)或直角引号(「『』」)。所以我把「'alpha'」这样的写法理解为在文字/语言边界上随内侧习惯使用引号,目前的规范草案中确实也是把 U+0027 APOSTROPHE 和 U+0022 QUOTATION MARK 这两个 [M*] 归入 non-ideographic letters class 的。这样,中文文本中混杂的「' " ( ) .」等标点都能和西文字母有一样的行为,似乎就满足需求了?
但有个问题:中文标点里,弯引号(“ ‘ ’ ”)、省略号(……)、间隔号(·)、破折号(——)等标点所用的 Unicode code point 和西文是共享的。弯引号(“ ‘ ’ ”)和间隔号(·)都已经特地加入各 fullwidth * punctuation class 了;但省略号(……)和破折号(——)似乎没有得到处理,于是它们就被分到 non-ideographic letters class 了,似乎需要修正。

「Ubuntu 的翻譯指引」有个错:弯引号(“ ”)并非它所说的「全角双引号」,这一对标点不是全角字符。我觉得它对「( )」的要求不太好:这一对西文括号不适合与汉字搭配使用(因为它们两个是为西文设计的);「翻譯指引」中要求用「( )」又要求不留空格,感觉上是为了尽量节省空间,又无法在介面文本上使用标点挤压或 proportional fullwidth punctuation glyph;实际上 Ubuntu 最好的解决方案是用全角括号「()」,然后制作专门的带有 proportional 全角括号「()」的字体用于介面文案。半宽的全角括号在专业的书籍排版中也会用到,但都是通过标点挤压实现的(也就是说 text-spacing 属性或许可以考虑加入这一特性)。

所以我觉得「' " ( )」这些西文标点都应该是 ideograph-alpha 这一取值的工作。

IE9 的行为我改天仔细看看吧……

呃,[S*] 的事情……确实让问题更加复杂了,我想想……

五、原來就有空格的網頁如何處理?

不赞成自动校正,自动校正波及面太广,使用户难以过渡到使用这个 CSS 属性。「force」可以考虑。

六、1/4em 是不是好的預設間隔?

中西文间空格样式有两种思路:

1) 空格宽度为 1/4 em。
2) 空格宽度与当前字体的空格宽度一致——也就是中西文间空格的样式与与当前字体的空格的样式一致。目前大家习惯的手动空格就是这样的效果。我也更偏好这一种。

如果「覺得 1/4em 有點窄」,那说明当前字体(可能是 font-family 列表里靠前的西文字体,也可能没有西文字体、就是中文字体)的空格比 1/4 em 宽(比如宽到 1/3 em 左右)。但大多数西文字体(比如 Arial、Helvetica)的空格确实都很接近 1/4 em。
如果遇到空格很宽的西文字体,比如 monospace 字体,1/4 em 的中西文间空格会很难看。这也是我为什么第换第 2 种思路(空格宽度与当前字体的空格宽度一致)。
所以我在想,应当根据当前字体来决定 ideograph-alpha 等取值增添的额外间距量。

七、適用的元素

「若额外间距应用至某一个字形,则间距由包含该字形的最内侧元素决定。」(原文为「If the extra spacing is applied to a particular glyph, then the spacing is determined by the innermost element containing that glyph.」)——其实我不太明白这句话指的是什么情况……似乎就是说任何一个 glyph 的间距调整都由最内侧的元素决定?前面「在元素边界……」那句话说的就是元素边界上的间距由边界外侧的元素决定?
「這其實是矛盾的」指的是什么呢?

我确实也觉得应该允许在 inline 上应用这个属性,不知目前限定在 block container 是为什么。

八、字符類別

「也就是在 'ideograph-alpha' 中混有韓文的中文網頁會有這些空格,這是合理的嗎?」——我认为是合理的。
韩文是和西文一样用空格分词的书写系统,与中文、日文混排时也应该像西文一样有空格。而且韩文确实是 alphabet(拼音文字)。IE9 的实作可能不合理。

注音符号的问题得由港台的朋友辨别了。

Non-ideographic numerals 的问题,如果只简化为 0–9,就会在罗马数字以及其他文字的数字上遇到问题。

* * *

天哪终于写完回复了……
从 GitHub 把翻译移过来没有问题,我每次翻译完一部分就告诉你一声。
好的,我有空再看看两年前那个讨论串。

梁海(LIANG Hai)


On 2012年4月27日Friday at 20:13, Kang-Hao (Kenny) Lu wrote:

> 原來的討論串:http://lists.w3.org/Archives/Public/public-html-ig-zh
> /2010Oct/subject#msg20
>  
> 很殘塊的說兩年前沒有參與這個討論,這個禮拜梁海兄翻了 'text-spacing' 的前
> 三分之一,我翻了後三分之一[1],因此就規範的一些內容上的問題做一些探討。
> 分成現有規範上的部份(CSS4)和下一個等級可能再加入的功能(CSS4+),照個
> 人認為的重要順序排列。
>  
> [1] http://www.w3.org/html/ig/zh/wiki/Css4-text#text-spacing-prop
>  
> == CSS4 ==
>  
> 一、最根本的問題 — 為什麼至今沒有人用 'text-autospace'?
>  
> 'text-autospace' 是這個屬性在 CSS3 Text 以前版本的名稱,似乎 IE5.5 開始
> 就有了,IE8 開始用 '-ms-' 前輟也可以,但是還是支援沒有前輟的 'text-auto-
> space'。這個屬性都存在那麼久了,為什麼教學什麼的網路上搜不到?(似乎代表
> 沒什麼人在用?)
>  
> 這個需求對使用者應該是存在的(有「為什麼你們就是不能加個空格呢?」這種瀏
> 覽器套件[2]),所以沒有人用的原因是什麼呢?
>  
> 1) 別的瀏覽器不支援
> 2) 這種需求還是相當的邊緣
> 3) 對 IE 的實作不滿意(間隔太小、在不該有空隔的兩個字符之間錯加空格等等)
>  
> [2] https://github.com/gibuloto/paranoid-auto-spacing
>  
> 二、屬性本身的命名
>  
> 目前是叫做 'text-spacing',這個名稱夠好了嗎?個人是覺得這個的確比
> 'text-autospace' 好,因為跟 'letter-spacing' 和 'word-spacing' 相應,是
> 一串文字和一串文字的間距。
>  
> 三、屬性取值的命名
>  
> 這個我就很有意見,目前規範上的是:
>  
> # 取值: ... ideograph-alpha || ideograph-numeric ...
>  
> 首先,我覺得 'ideograph' 這個字太難拼(不過我覺得 'integer' 都很難拼了,
> 所以不能說我個觀感很正常),再來就是 'alpha' 感覺是一個過度 geeky 的字,
> 我也不知道在這個情景使用這個字是不是對的,另外 'numeric' 也不怎麼好記
> (第一次打打成 'ideograph-numeral')。我的建議是:
>  
> | 取值: ... cjk-latin || cjk-number ...
>  
> 不然就是 'cjk' 用 'han' 取代,代表「漢字」,至少跟 'chinese' 之類的比起
> 來是一個比較語言中立的字眼。大家怎麼想?有支持現在命名的嗎?
>  
> 四、'cjk-mode'?
>  
> 我覺得 'ideograph-alpha' 跟 'ideograph-numeric' 同時使用的可能性比單獨使
> 用一個高(這個假設對嗎?),所以有一個同時啟動兩個的值應該比較好用一點。
>  
> 四之一、'cjk-puntuation'?
>  
> 可能有人注意到我打字或是翻譯的習慣都是引號(一個 Unicode [P*])跟中文字
> 中間也有空格,這個目前規範有的 'alpha'([L*] 和 [M*])和
> 'numeric'([Nd]),所以是不是該加一個 'punctuation' 滿足這個需求?又這個
> 值應該是 'cjk-mode' 的預設嗎?(我猜日文需求的文件應該是說預設要有
> 'ideograph-puntuation',不過這個部份要考證一下)
>  
> 相關的細節問題:
>  
> * 這個要不要排除誇號「(」、「)」,比如說 Ubuntu 的翻譯指引是說要排除[3]。
> * 這該不該直接併到 'ideograph-alpha'?
>  
> 測試了一下我發現 IE9 的 'alpha' 有包括單引號「'」但是沒有包括雙引號「"」
> 還有「‘」(U+2018)這些,這合理嗎?
>  
> [3]
> http://wiki.ubuntu.org.cn/TranslatorsGuideline#.E5.85.B3.E4.BA.8E.E7.A9.BA.E6.A0.BC
>  
> * 要不要包括 [S*] 類別,包括「+」「-」?要的話是不是把 'punctuation' 更
> 名成 'symbol' 更好?
>  
> 五、原來就有空格的網頁如何處理?
>  
> 很多人現在都有插入半形空格,而現在規範是比較兩個相間的字符所以不會碰到這
> 些。fantasai 有提過一種的新的想法是讓 'text-spacing' 去主動校正這些,也
> 就是先拿掉那個半形(大約 1/3em)再填空格(目前規範是說 1/4em)。
>  
> 所以大家對於 'ideograph-alpha'/'cjk-mode' 自動做這個校正讚不讚同?還是該
> 有一個新的關鍵字('force' 之類的)來啟動這個功能?
>  
> 六、1/4em 是不是好的預設間隔?
>  
> 老實說,因為打半形空格有點習慣了,測試 IE9 的時候還真覺得 1/4em 有點
> 窄、、、這裡 1/4em 是符合日文排版標準,不過我更在乎使用者的觀感問題。
>  
> 我也還沒仔細量過 IE 是不是真的是 1/4em。
>  
> 七、適用的元素
>  
> 目前規範是說
>  
> # 適用於: 块容器
>  
> 但是又說
>  
> # 在元素边界,字符间引入的额外间距量由包含该边界的最内侧元素决定且在该
> # 元素内部渲染。若额外间距应用至某一个字形,则间距由包含该字形的最内侧
> # 元素决定。
>  
> 這其實是矛盾的。後面這句話類似CSS3 'letter-spacing' 的模型,意思是說,在
> 下面這個例子裡:
>  
> <p>請點下面連結<a>Hello:歡迎來到public-html-ig-zh</a></p>
>  
> p { text-spacing: ideograph-alpha;}
> a { text-spacing: normal;}
>  
> 「結」和「H」間有空格(包含這個邊界的最內側元素是 <p>),但是「到」和
> 「p」沒有。我覺得這個功能蠻有用的,特別是在維基百科中有些標題的空格可能
> 不應該改變,所以我的意見是把規範改成。
>  
> | 適用於: 所有元素
>  
> (塊容器不包括 'inline')
>  
> 但是這個進階功能我覺得往後移到下一個版本也無妨。
>  
> 八、字符類別
>  
> 這個部份非常、、雜亂,目前 'ideograph' 和 'alpha' 的定義分別是
>  
> # 方塊文字
> #
> # 包含下面所有字符:
> # * 所有在範圍 U+3041 到 U+30FF 裡除了 Unicode 標點 [P*] 以外的字
> # 符。
> # * CJK 筆劃(U+31C0 到 U+31EF)。
> # * 片假名語音擴展(U+31F0 至 U+31FF)。
> # * 所有屬於 Unicode 漢文字(Han)屬性的字符 [UAX24]。
>  
> 和
>  
> # 非方塊字母
> #
> # Unicode 字母類別 [L*] 與標記類別 [M*] 裡,不滿足任何以下條件的字符:
> # * 是一個方塊文字。
> # * 被 [UAX11] 歸為東亞全形(F)。
> # * 在豎排中透過 ‘text-orientation’ 屬性或 ‘text-combine’ 屬性為
> # 直立。
>  
> 首先,韓文(Hangul)不在方塊文字裡,這不合 IE9 的實作,不過這個到底好不
> 好可能要去韓文興趣小組問一下。不過這個對中文為主的網頁的影響是:韓文不是
> 東亞全形(而是東亞寬字符(W)),所以韓文被歸在 'alpha' 裡,也就是在
> 'ideograph-alpha' 中混有韓文的中文網頁會有這些空格,這是合理的嗎?
>  
> 我感覺這裡的非方塊字母的條件之一的「被 [UAX11] 歸為東亞全形(F)」應該改
> 成「被 [UAX11] 歸為東亞全形(F)或東亞寬字符(W)」,這裡該做的是是把所
> 有是東亞寬字符(W)但是不是方塊文字的字符都拿出來想一下、測一下。
>  
> 再來,方塊文字目前不包括注意符號(因為注意符號屬於注意符號文字
> (Bopomofo),不是漢文字),這其實符合 IE9 的實作(中文和注音符號中間在
> 'ideograph-alpha' 的時候有空隔),不過這合理嗎?
>  
> 我感覺 IE9 的實作比較接近把方塊文字解讀成「被 [UAX11] 歸為東亞全形(F)
> 或東亞寬字符(W)的 Unicode 標點 [P*] 以外的字符,但是拿掉注音符號。」,
> 這個定義好像不符合日文需求文件的要求[4],但是這也要考證一下。
>  
> (歡迎用 CSSOM 的 API 把 IE9 整個跑一遍了解 IE9 到底怎麼分類字符的!)
>  
> 另外,'numeric' 的定義是:
>  
> # 非方塊數字
> #
> # Unicode 數字-十進位數字類別 [Nd],不滿足任何以下條件的字符:
> # * 被 [UAX11] 歸為東亞全形(F)。
> # * 在豎排中透過 ‘text-orientation’ 屬性或 ‘text-combine’ 屬性為
> # 直立。
>  
> 但是我看 IE9 根本沒支援 0-9 以外的數字,老實說有沒有支援那些應該已經到沒
> 有人會在意的程度了,還是簡化成 0-9 就好了吧、、、
>  
> [4]
> http://lists.w3.org/Archives/Public/public-html-ig-jp/2011Jan/thread#msg139
>  
> == CSS4+ ==
>  
> 本來想提一些新想法的,但是已經打這麼多了,先作罷。
>  
>  
> 梁海兄:
>  
> 首先跟你確認一下把我把你在 GitHub[5] 上的翻譯移過來這件事有沒有問題?你
> 可以繼續在 GitHub 上翻譯,我再定期搬過來。
>  
> 其實兩年前的那個討論串我沒有讀完,可以麻煩你有空的時候整個看一遍看看有哪
> 些部份是可以用 'text-spacing' 解決的,然後回一下文嗎?
>  
> 多謝!
>  
> [5] http://lianghai.github.com/html-ig-zh/
>  
>  
>  
> 此致
>  
> 呂 康豪(Kenny), 中文興趣小組W3C連絡人
> 新浪微博: http://t.sina.com.cn/1950042164
> Google+: https://plus.google.com/112088462407783855918/posts
>  
>  

Received on Friday, 27 April 2012 18:40:52 UTC