豎排消失中?現代數位裝置的困境

豎排消失中?現代數位裝置的困境

傳統的漢字書寫方向一直以來大多採用垂直形式。從以前的書法、刻本,再到現代的照排、鉛字,都多以這種形式與大家見面。

豎排/縱書

傳統的漢字書寫方向一直以來大多採用垂直形式。從以前的書法、刻本,再到現代的照排、鉛字,都多以這種形式與大家見面!

不過,這一切在進入數位時代後,開始發生變化,豎排開始漸漸消失,取而代之的是橫排文字,從電子文書到社群軟體絕大多,皆已改為橫式。

早期刻本多以豎排/縱書為主。以康熙字典為例。TwinType
早期刻本多以豎排/縱書為主。以康熙字典為例

來自技術的侷限。

這一切的濫觴要從1973說起,當時美國Xerox公司,推出了Xerox Alto,這是世界上最早成熟的圖形化作業系統(是的,最早的GUI操作系統不是Microsoft、IBM或Apple推出的)。

再往前推的貝爾實驗、AT&T,甚至回朔到艾倫·圖靈......等人,這些公司、研究者絕大多數都來自歐美,或在歐美國家進行開發,所以他們用自己熟悉的語言開發在合理不過。

從技術層面來說,英文的組成也比中文等語系少得多,透過少數的字母符號組合不同結果,這在當時記憶體珍貴的硬體條件下,是最經濟的考量。

基於這樣的原因,自然的就會以拉丁為優先,或具體來說,是優先支援ASCII編碼的文字、習慣,而這些文種的書寫系統本生就是以橫排為主的。造就了現在以橫排

也沒這麼絕望?

講到電子裝置上的豎排,其實「電子書」就是最佳案例,目前主流的電子書裝置,大多可支援豎排模式。不是說逐漸消失嗎?

電子書豎排示意圖。TwinType
電子書豎排示意圖

要回答這問題,要先掉書袋一下,如果你是電子書讀者,可能聽過電子書是使用 epub 格式,這種格式其實底層就是網頁技術,基於HTML 與 CSS,再加入配置文件等封裝成以.zip為編碼的文件。

既然是基於HTML 與 CSS,那當然是用瀏覽器解析囉!大多數的電子書軟體在你閱讀文章時,都會透過內嵌的小瀏覽器(通常是以Chromium為主,因為原生移動端Webview可能存在CSS兼容、效能等問題),進行解析。

沒錯!瀏覽器是支援的!這最早是在大約在2010年底時,由日本的專家學者提出相關草案,後被負責維護CSS的W3C組織正式支援。(這之中要感謝W3C團隊與特邀專家,這是個長故事,未來有機會也能在分享)。

瀏覽器是種選擇,但不是唯一。

只有瀏覽器支援豎排遠遠不夠。因為WebAPI的崛起,瀏覽器愈發強大,不僅可以編輯文件、剪輯排版,甚至是建模。即便如此,許多時候軟體還是需要深度與硬體、系統交互,我們不會所有的軟體都基於瀏覽自開發, 因為存在安全、效能以及使用者體驗之問題。

就像是instagram即便網頁版功能十分強大,但手機端應用依然採用React Nnative開發(編譯後元素元件會變編譯成平台原生)這樣可以有更棒的用戶體驗,以及一些需要與操作手勢相關的行為。

所以,瀏覽器並非所有,即便將它包成APP或是PWA,也無法避免一些缺點。例如:銀行APP需要安全隔離。

又或是你今天打算做一款離線使用的記帳APP(大Vibe Coding時代,大家不知道為何都喜歡做這個),想使用資料庫保存資料,如果使用基於瀏覽器的PWA技術,那選擇可能剩下不多,最常見是使用 indexedDB,以類似Json形式存入,但這樣不僅有容量問題,如果備系統清除快取,可能資料就不復存在,不力資料持久化,退一萬步使用SQLite WASM還是有穩定性問題。這再次證明,框架或原生應用必須存在的現實。

除了瀏覽器以外的選擇

剛才舉證了瀏覽器並不能取代所有APP。接下來要談談還有甚麼做法。最好理解的就是原生平台iOS用SwiftUI,Android用Jetpack Compose,這是最直接的方法。

當然所謂的跨平台框架,也十分盛行,最有名的非React Nnative莫屬,由Meta團隊開源(請注意此處提及的是React Nnative非React!)。以及後起之秀Flutter,這是由Google維護超級具有野心的框架,目前可以編譯成iOS、Android、Windows、Web端。

講了這麼多,困境在哪?

困境在於除了瀏覽器外,其他框架、平台,無一支援垂直排版。是的,很遺憾無一支援。

豎排/縱書難在哪?

聽起來只是將文字方塊換方向排列,但事實上CJKV排印充滿著玄機,舉凡:避頭尾、日文假名、諺文、標點擠壓,還有地區差異,以及多文種混排的問題。光是母語用戶,要將這些規則描述成規格文件,就要花上許多時間,更別提大多來自非CJKV母語者的開發團隊要將規則轉換程式碼實踐。

W3C不是成功了嗎?其他團隊不跟進?可能沒這麼樂觀!瀏覽器最早就是為數位文字顯示而生,看看HTML的全名就知道「HyperText Markup Language」。所以開發小組有深厚的相關經驗與願景。

然而其他框架、SDK初衷並非如此,他們還必須要關注、編譯、效能、硬體橋接、大大小小兼容性的問題。在Flutter中有人提交了相關問題,而Flutter團隊則回應了,在一開始就並不打算支援該功能。

在Flutter #15710 issue提交中,官方人員回覆
在Flutter #15710 issue提交中,官方人員回覆

沒有替代方案?

可能有人會想說使用圖片、PDF形式,但這樣治標不治本,首先這樣鑲嵌的文件無法做到響應式,也無法動態更新,容量、效能也不盡然理想。

也許......我們能做點什麼?

TwinType身為文字的使用者,中文字的使用者,漢字的使用者;身為設計者,字體的設計者,程式的設計者。我們或許能做點甚麼;我們或許要做點甚麼?

既然沒有輪子,那就造一個,我們決來編寫開源套件,解決該問題。我們決定先以Flutter為試驗,開發一個套件處理CJKV中文排版的套件。

會選擇Flutter的原因?根據Appfigures統計數據,Flutter在兩大移動端中都是僅次原生框架的開發套件,同時也是TwinType常用的技術棧,有較多調試經驗,故選用。

隆重介紹Bambook:Flutter豎排版套件

這是一款針對 Flutter 的套件。可你提供您垂直排版能力,為 CJK 語種提供另一種選項(甚至在蒙古文中是唯一選項)。該文字排版引擎,支援垂直書寫、縱中橫、避頭尾與標點視覺修正等功能。

您可以透過pub.dev使用,也可以至Github查看原始碼。也歡迎回報、提出問題!

文件說明:https://bambook-doc.twintype.co/

目前版本為0.0.4(2026.02.01),我們將持續擴充功能包括,更好的支援蒙文、注音以及標擠壓、OpenType等特性。期待看到以豎排/縱書設計的UI應用遍地開花。

基於垂直排版應用的想像
https://l.twinty.pe/6PZwXu 分享文章
CC BY-NC 4.0
此授權條款要求再使用者必須對創作者進行署名。它允許再使用者以任何媒介或格式,出於非商業目的,分享、重混、改編及依原作品進行創作。唯重製後之作