Skip to content

日月有常

注意

本方案基於宇浩拆分,爲 25.5 鍵、前綴、五碼、三編、音托、全字集、繁簡通打輸入方案。同傳統定長方案輸入體驗有所不同,請務必充分瞭解、分析、平衡其風險和收益後再決定是否學習使用。

簡介

日月輸入法,又稱大明輸入法明碼,基於宇浩拆分設計製作,是世上第一款純形前綴碼方案,可完全離開空格鍵進行輸入。其名源自尚書大傳之「日月有常,星辰有行」。

本方案的字根大部分爲三編碼,稱爲大碼聲碼韻碼;少部分字根爲雙編碼,稱爲大碼韻碼。其中,聲碼和韻碼對應漢語音節中的聲母和韻母(韻頭+韻腹+韻尾),不考慮聲調。更詳細地:

  1. 大碼在 BCDFGHJKLMNPQRSTVWXY 等 20 個按鍵上半聚類、半亂序分佈。
  2. 聲碼取字根讀音的聲,在 BCDFGHJKLMNPRSTXZ 等 18 個鍵上有序分佈。對於 ZH(ㄓ) CH(ㄔ) SH(ㄕ) 三個聲母,将它們映射到 SRK上。部分字根爲零聲母或近零聲母,則不取聲碼。
  3. 韻碼取字根讀音的韻,在 AEIOU 等 5 個鍵上分佈,如遇多元音或特殊元音,則映射到 AEIOU 上。 例如:的韻是 ,映射到 E 鍵上;的韻是 ,映射到 e 鍵上;的韻是 UEㄩㄝ,映射到 E 鍵上。 R(ㄖ)REN(ㄖㄣ)RU(ㄖㄨ)三個音節較爲特殊,作零聲母處理。

注意

聲碼、韻碼依照的是字根的實際讀音,而不是漢語拼音或者注音符號(事實上,漢語拼音大部分音節都是整體識讀的)。比如:

  1. 的大碼爲F,聲碼爲空,韻碼爲I,全碼爲FI
  2. 的大碼爲S,聲碼爲空,韻碼爲O,是讀音ERㄦ的映射。

另外地:

  1. 如果一個字根有若干讀音,一般取最常用的讀音作爲聲碼韻碼。有時也取不常用的讀音來增加手感,如的聲碼取D
  2. 如果一個字根因為簡化字的歸併和簡化導致了多個讀音,一般取古音,如hǔi虺厂丆ān
  3. 如果一個字根無音、或爲生僻字、或讀音繁雜,則聲碼爲空,韻碼取O

注意到,字根聲碼和韻碼取漢字讀音的目的是為了方便記憶,因此存在作者的一些人為選擇。如果用户不熟悉當代標準漢語,也可以將字根聲碼和韻碼當作無理碼記憶。同時,用户只要記憶有限的字根聲韻,而不是全部漢字的讀音,因此本方案是純形而非形音的。

下表爲漢語拼音的韻母和本方案的韻碼之間的對應表:

AOEIU
ao uo woe êi yiu* wu
erü u*
eiai
ouao
ia yaie yeiao yaoiu you
ua waui weiüe ue yue
anin yinen ian*ian* uan uen
iang yanganging ying
uang wangengiong yong
(sh)ri*renruri*

下表爲注音符號和本方案的韻碼之間的對應表:

AOEIU
ㄛ ㄨㄛㄜ ㄝㄨ*
ㄩ ㄨ*
〡ㄚ〡ㄝ〡ㄠ〡ㄡ
ㄨㄚㄨㄟㄩㄝ
〡ㄣㄣ 〡ㄢ*〡ㄢ* ㄨㄢ ㄩㄢ ㄩㄣ
〡ㄤ ㄨㄤㄤ ㄥ〡ㄥ ㄩㄥ
ㄖㄣㄖㄨ(ㄕ)ㄖ*

下表爲漢語拼音音節、注音符號音節韻碼對應表。表示任何聲母。

拼音音節注音音節韻碼舉例備註
~a~ㄚA
~ai~ㄞE
~an~ㄢA
~ang~ㄤE
~ao~ㄠI
~e~ㄜE
~ei~ㄟO
~en~ㄣE
~eng~ㄥE
~i~ㄧI
~ia~ㄧㄚA
~iao~ㄧㄠI
qian tian dian yanㄑ〡ㄢ ㄊ〡ㄢ ㄉ〡ㄢ 〡ㄢI聲碼在左或無聲碼時
pian jian mianㄆ〡ㄢ ㄐ〡ㄢ ㄇ〡ㄢE聲碼在右時
~iang yang~ㄧㄤO
~ie ye~ㄧㄝE
~iu you~ㄧㄡU
~in yin~ㄧㄣO
~ing ying~ㄧㄥI
~iong yong~ㄩㄥI
~ong~ㄨㄥI
~ou~ㄡE
bu fu du lu gu hu
zhu chu shu zu u
ㄅㄨ ㄈㄨ ㄉㄨ ㄌㄨ ㄍㄨ ㄏㄨ
ㄓㄨ ㄔㄨ ㄕㄨ ㄗㄨ ㄨ
U非mu/pu時
mu, puㄇㄨ ㄆㄨE母 M
~ua wa~ㄨㄚA
~uan wan~ㄨㄢI
~uang wang~ㄨㄤO
~un wen~ㄨㄣI
~uo ~o~ㄨㄛ ~ㄛO𠂇
~üan~ㄩㄢI
~üê yue~ㄩㄝE
~ü yu~ㄩV魚 Be
shiㄕㄭA十 TKashi時
zhi chi zi ci siㄓㄭ ㄔㄭ ㄗㄭ ㄘㄭ ㄙㄭI子 Lzi非shi時
riI日 Ji
ruㄖㄨE入 Ke
renㄖㄣO人 Wo

單字取碼規則如下:

  1. 取首根大碼和聲碼。
  2. 依次取二、三、末字根的大碼;
  3. 不足五碼時,補末根聲碼。
  4. 不足五碼時,補末根韻碼。

注意到,大碼聲碼所在的鍵位(A區)同韻碼所在的鍵位(B區)互斥,故而韻碼可作爲單字的自然分隔符。不滿五碼時,不用空格也可進行連續輸入。

本方案全字集低重、繁簡通打,其關鍵數據如下:

  • GB2312 重碼數 186
  • 國字常用字重碼數 56
  • GBK 重碼數 2658
  • 簡體動態選重率 0.021%
  • 繁體動態選重率 0.032%
  • 繁簡混合動態選重率 0.034%
  • 全碼速度當量 1.239

詳見《常見輸入法重碼數據》

點擊字根可查看例字
切換字根圖和字根表:
更新

20250618 更新

  1. 丂 -> Fki ~ 匚
  2. 丅 = 丁 -> Ddi
  3. 勹 = 冂 -> Ho
  4. 忄 = 心 -> Jxo
  5. 舟 -> Jse
  6. 冖 = ⺈ -> Mo
  7. 䒑丷 -> Xci
  8. 皮 -> Dpi
  9. 丩 = -> Qo

20250622 更新

  1. 丁下 -> K
  2. 咼骨 -> J
  3. 厂丆 -> K
  4. 臣 -> J
  5. 片爿 -> S
  6. 末未 -> B
  7. 甲电 -> F
  8. 廴 -> D
  9.  -> D ~ 口

20250630 更新

  1. -> Gne
  2. -> Lxi ~
  3. -> Dji ~ (避免 ⺔ - 豕 編碼不一致)
  4. 川巛ㄍ -> Jri (同指不位移優先)
  5. -> Jgi (同指不位移優先)
  6. -> Ja (同指不位移優先)
  7. -> GJe ~ (聚類)

20250723 更新

  1. -> L (和同大碼)
  2. shi 的聲韻碼 Ku -> Ka (顯著提高手感和擊鍵速度)
  3. -> VKe (和同碼歸併)

20250811 更新

  1. 凵屮 -> Do ( 字編碼 KcKka -> DDo)
  2. 鸟乌 大碼 H -> X

20250812 更新

  1. Kma -> Cma (和𠃌聚類)

20250813 更新

  1. FKa -> WKa (和聚類)
  2. FKo -> WKo
  3. 厂丆ānKre -> Ga (和广疒鹿麻聚類)
  4. fēnghǔiM -> Q (和几殳聚類)
  5. lǎoVli -> Vo (生僻字,只做首部,此處作無音化處理)
  6. zhúFsu -> Vsu (和土士龶耂聚類)

20250815 更新

  1. Se -> Sji (和歸併,否則書畫盡等字拆分不統一,容易卡頓)

20250816 更新

  1. スマ癶, -> Vo (解决約十個類似「領頷」的靜態重碼)

對比

這裡展示日月方案和兩個經典的漢字輸入法的對比:

倉頡輸入法

相同點:都是五碼定長、全字集、繁簡通打。

不同點:倉頡在不足五碼的情況下,需要使用空格確認,而日月方案可以完全離開空格鍵。倉頡的字根是單編碼,而日月是雙編碼或三編碼。倉頡的字根是有序的,而日月是近亂序的。

鄭碼輸入法

相同點:都是字根雙編碼或三編碼,首根都可能取到兩碼。 不同點:鄭碼首根可能取到三碼,日月最多取兩碼。鄭碼當主根多取一碼的時候會少取一個字根,而日月不管任何情況都會取滿四個字根。鄭碼需要使用空格確認,而日月方案可以完全離開空格鍵。鄭碼的字根是有序的,而日月是近亂序的。

簡碼和碼長

簡碼(此處以簡體方案為例)設置如下:

  • 一碼上屏字,5個:的E、是I、我O、不U、了A。
  • 兩碼上屏字,73個:取首碼和末根韻碼或空格,如:你WI、和CE。等效一級簡碼。
  • 三碼上屏字,600個:前兩碼和末根韻碼,如:段WKU、只DKA、中DKI。等效二級簡碼。
  • 簡詞:部分一碼或二碼加空格。

日月方案的單字平均編碼(簡體文本)長度如下(更多信息參考常見輸入法測評數據——簡碼效率):

  1. 單字全碼:4.352
  2. 使用效率最高的50個簡碼字:3.512
  3. 使用效率最高的100個簡碼字:3.321
  4. 使用效率最高的200個簡碼字:3.151
  5. 使用效率最高的500個簡碼字:2.961

本方案是前綴碼,因此簡碼效率顯著高於一般的四碼定長方案,簡碼設置的邊際效率相對更高。綜上所述,在記憶500個簡碼的情況下,單字平均碼長約爲3。

簡碼調整

簡碼字詞在未來可能會根據社群的反饋和需求進行調整。

下表爲效率排名前500的二碼上屏簡碼字詞,追求極致碼長的用戶必須熟悉。

aueoi空格
b
c
d
f
g
h
j
k
l
m
n
p
q
r
s
t
v
w
x
y

下表爲效率排名前500的三碼上屏簡碼字,追求極致碼長的用戶可考慮熟悉。

三碼上屏簡碼
firstaeiou_
bb
bh
bk
cc
cf
ch
cj
ck
cl
cm
cn
cs
cv
cw
dj
dk
dm
ff
fh
fj
fk
fl
fm
fn
fp
fv
fw
gg
gk
gm
gn
gw
hb
hd
hf
hh
hj
hm
hq
hs
ht
hv
hz
jc
jd
jf
jg
jh
jj
jk
jl
jm
js
jx
kb
kd
kf
kg
kj
kk
kp
kq
kr
ks
kt
kx
lb
lc
lf
lg
lk
ll
ln
ls
lt
lx
lz
mb
mc
md
mf
ml
mq
ms
mv
mx
mz
nd
nf
nr
ns
nv
nw
nz
pd
pf
pq
qf
qj
ql
rd
rf
rh
rk
rl
rx
sc
sd
sh
sj
sk
sl
sm
sn
sp
ss
sw
tb
th
tj
tk
tp
vc
vd
vf
vh
vj
vk
vl
vm
vq
vr
vs
vt
vv
vw
vy
wc
wd
wf便使
wg
wh
wj
wk
wl
wm
wn
wq
wr
ws
ww
wy
xc
xj
xp
xx
yd
yf
yj
ys
yx

詞語

詞語編碼規則如下:

每個詞最多五碼,前四碼同星陳方案。第五碼爲日月特有,如果前四碼已經取到末字末根,則接著往下取聲碼韻碼;如果前四碼尚未取到末字末根,則取末字末根大碼

  • 兩字詞:首字前兩碼 + 次字前兩碼 + 第五碼。注意,首字爲字根的,不設置詞語編碼。
    • 「宇浩」的編碼是DM + CK + D
    • 「白色」的編碼是KB + MJ + B
    • 「一下」首字為字根,故而不設詞語編碼,完整編碼是Fi + KXa
    • 「一些」首字為字根,故而不設詞語編碼,完整編碼是Fi + HSLSo
  • 三字詞:首字第一碼 + 次字第一碼 + 第三字前兩碼 + 第五碼。
    • 「好不好」的編碼是C + M + CN + L
    • 「不知道」的編碼是M + J + XC + L
    • 「一下子」的編碼是F + H + LZ + i
  • 四字詞:首字第一碼 + 次字第一碼 + 第三字第一碼 + 第四字第一碼 + 第五碼。
    • 「不置可否」的編碼是M + G + H + M + D
    • 「自作自受」的編碼是H + W + H + B + C
    • 「洋洋洒洒」的編碼是C + C + C + C + Y
    • 「江河湖海」的編碼是C + C + C + C + D
    • 「骂骂咧咧」的編碼是D + D + D + D + Y
    • 「恍恍惚惚」的編碼是J + J + J + J + J
    • 「魑魅魍魉」的編碼是J + J + J + J + W
  • 五字及以上詞:首字第一碼 + 次字第一碼 + 第三字第一碼 + 第四字第一碼 + 末字第一碼。
    • 「不管三七二十一」的編碼是M + Y + K + M + F
    • 「中华人民共和国」的編碼是D + W + W + J + K

爲字詞一致考量,日月方案的雙字詞使用宇浩千詞極簡詞庫,只收錄極常用詞語(知乎詞頻),並且以下情況一般不設置詞語編碼:

  • 首字是雙編碼的字根字,如:「一个」「二人」「而且」等。這些直接按單字連續輸入即可。
  • 首字是一碼、二碼上屏的簡碼字,如:「你們」「我們」「和平」等。這些直接按簡碼連續輸入即可。

優缺點

本方案爲首款純形前綴碼方案,優缺點都十分突出,故總結如下:

缺點

  • 字根大碼近亂序,初始學習難度較大,同鍵位字根之間的字形關係較星陳方案更弱。
  • 單字平均碼長在378個簡碼情況下爲3.14。如果需要達到這個碼長需要記憶簡碼。
  • 更專注於單字。
  • 簡碼不是全碼的前綴。

優點

  • 首根信息完整,大字集重碼極低,遠超宇浩輸入法其他方案。
  • 本方案不需要按空格,特别適合腱鞘炎患者。
  • 雙手互擊、擊鍵速度當量、用指分佈極佳。
  • 專注於單字,無需記憶詞語,輸入流暢。

難度

更易更難
大碼星陳光華日月卿雲
小碼(聲韻)卿雲星陳日月光華

設計思路

形碼方案中的離散問題,主要在於多根字。多根字的離散問題,主要在於首根和末根。爲什麼這麽講?注意到,通過更換部首或部件,我們可以排列組合出大量漢字,如:「問问吝各束杏回可台呇扣和吉召吕唇知否喜可右启叵釦名占句售告如」,都是由一個部件搭配「口」字根組成的。一旦任意两個首根位於同一鍵位上,則會産生重碼。這個例子中,共有30個字,也就是有30個首根,但按鍵一般是26個,根據抽屜原理,必然會在一個按鍵上有兩個字根,這就説必然會有兩個字的編碼相同。常見的漢字部首大約一百個,爲了避免出現重碼,必須要有足夠的按鍵數量或編碼空間來容納它們。對稱地,末根的離散問題也同樣存在。

如何解决首根和末根的離散問題?在這方面,前人有多種探索:

  1. 漢字結構末筆信息作爲補充編碼。主要解决同拆異形(如「束杏」)、提高末根離散。最早可追溯到五筆。它的缺點是不僅需要知道結構和末筆,還需要進行一次交叉映射,使用時難以形成肌肉記憶。
  2. 减少字根數量和大小。當按鍵數量不變時,通過減少字根數量和大小,將部首繼續分解,可以變相減少編碼衝突的可能。五筆倉頡都是這樣的例子。它的缺點是,不少常見字根被拆分成了多個小字根,不僅不直觀,還會造成複雜漢字中間部分的信息丟失,增加重碼的可能性。
  3. 大字根雙編碼。反其道而行之,通過增加字根編碼的長度,來增加編碼空間。26個按鍵,若每個按鍵有兩個編碼,則可以容納676個字根,兩個部首放到同一個「抽屜」的可能性直線下降,從而明顯減少重碼的可能。這個思路最早可追溯到鄭碼。它的缺點是:
    • 一、打詞的時候,同部首的字會形成大量重碼,如「猫猫」「狗狗」「狼狗」等。鄭碼的解決方案是詞語編碼和單字編碼不一致。徐碼的解決方案是將首根小碼後置。但這樣的設計,會增加學習成本。
    • 二、抽屜增加到了676個,但常用部首只有100個左右,前兩碼的組合空間不少被閒置出來,這樣的設計,造成簡碼效率低下。對此,鄭碼的解決方案是設置主副根,首根是主根則不取小碼,首根是副根則取小碼。由於主根的存在,前兩碼的組合空間不會被浪費。但這樣的設計,會使得規則複雜化,有時取三根、有時取四根,還是增加了學習成本。
  4. 多取字根。在小字根的基礎上,多取一個字根,達到減少重碼的目的。倉頡便是代表。它的問題是碼長較長,簡碼和詞語效率較低。倉頡便不設簡碼,不設詞語,專注於單字輸入。因爲字根和規則簡單,學習成本較低,相比之下,碼長較長的問題就不那麽突出了。

宇浩拆分主要走的是大字根的設計思路,也就是鄭碼一系的策略。因爲這套方案更容易實現大字集低重碼,可以繁簡通打,且碼長可控。關於首根的離散問題,基於宇浩拆分各方案的設計型態是:

  • 光華:字根雙編碼、首根小碼後置、不分主副根且只有雙根字取首根小碼(創新)、字根分區。兩根字編碼:AZza
  • 星陳:字根雙編碼、小碼取聲、首根小碼後置、不分主副根且只有雙根字取首根小碼、字根聚類。兩根字編碼:AZza
  • 卿雲:字根雙編碼、小碼取聲、首根小碼不取、不分主副根、首根分區。兩根字編碼:AZz

以上三個方案都有缺點:

  • 光華、星陳的首根小碼後置,會在輸入時造成一定思考。
  • 卿雲的首根小碼不取,會造成首根分離度變差。常用字集字頻加權選率尚且可控,但一旦字集增大,或更換文本風格,重碼率會大幅上升,且不穩定。
  • 以上方法,輸入時都需要按大量空格鍵,對大拇指不友好。

於是,我一直都在思考一個這樣的方案:

  • 首根小碼永遠取全,大字集重碼更低。
  • 首根小碼不後置,輸入時更流暢。
  • 儘可能减少空格鍵使用,對大拇指友好。

也就是以下的單字編碼方式:Zz AaZz AaBZz AaBCZz 等,且使用全碼連打模式。

那麼問題來了:首根小碼永遠取全,意味着編碼至少是五碼,碼長會變長;首根小碼不後置,意味着簡碼效率降低,不能打詞;儘可能减少空格鍵使用,意味着需要有系統的字間分隔方法。

當然,答案也許就在問題當中。全碼變成五碼,但可以通過連續輸入來減少碼長,這和減少空格鍵使用是相輔相成的。簡碼效率降低,不能打詞,我們就乾脆不打詞,專注打單,提高擊鍵。同時,一旦不用空格鍵,那麽等於簡碼少輸入一碼,抵銷了簡碼效率降低的問題。

歸根結底,問題的核心只有一條:如何减少空格鍵使用

减少空格鍵頻率,一個方式是使用連續輸入,比如全碼連打。但字和字之間的分隔是模糊的,需要用詞庫來進行預測。一般情況比較準確,但有時也會出現分隔錯誤,比如「不二」和「些」在卿雲中都是NBAE,「説一不二」常常被預測為「説一些」。

另一個方法,就是頂功。頂功方案把按鍵分爲兩個區域,A區和B區。輸入時,先輸入若干A區鍵,然後輸入若干B區鍵。A區域鍵和B區域鍵之間形成自然分隔符,一旦輸入B區鍵,再輸入A區鍵,則會自動認爲是下一個字,而不用按空格鍵。(其實定長方案也是一類廣義頂功方案,只不過它的A區是26個字母,B區只有一個空格鍵,且對於編碼結束的判斷是內生的。)

但頂功方案一般需要從某一鍵開始使用小鍵集進行輸入。從形碼的角度來看,小鍵集的自然選擇就是筆畫了。比如逸碼,就是從第三個字根開始使用五筆畫拆分。一旦見到想要的字,直接輸入下一個字,就可以上屏前一個字。從另一個角度説,頂功方案用若干B區鍵,分攤了空格鍵的功能,且B區鍵自帶部分漢字信息。

頂功方法可否拓展到宇浩拆分?似乎可以,比如前三根分別取首根大碼、首根聲碼、次根大碼,後面全部拆成五筆畫。但是這樣的話,會有以下問題:

  • 筆畫拆分後,全碼碼長會變長,最高可能會有六、七碼。如果有人想打全碼會比較累。
  • 將字拆成筆畫,用戶需要對於字形的認識較深,對於筆順較熟。並且,一旦某些字形出現歧義,用戶容易打不出字來。
  • 拆成筆畫,等同於改變了宇浩拆分。

接下來的很長時間,我都在思考如何讓頂功適用於宇浩拆分,並對一些維度進行取捨。最好的情況是,能夠保持目前宇浩各方案的拆分和編碼方式。最後,偶然的機會,我想到了在小碼上做文章。

考慮到,基於首根小碼永遠取全首根小碼不後置的設計,若用空格上屏,雙根字編碼為AaZz_。那麼,可以進行以下步驟:

  1. 第一步,將末尾空格鍵替換為若干B區按鍵的集合 AaZzβ,其中 β 代表B區按鍵。
  2. 第二步,讓B區按鍵β和末根Z有某種內在的聯繫。問題是,如何讓一個字根的小碼能分成兩部分呢?一個自然的思路就是聲母韻母。因為在漢語拼音中,聲母所在的按鍵,和元音所在的按鍵是隔離的。我們只要定義A區的按鍵為BCDFGHJKLNMPQRSTVWXYZ,B區的按鍵為AEIOU,便能自然形成隔離。比如「千」的第一小碼取聲母Q,第二小碼將韻母IAN映射到B區按鍵中的某個按鍵即可。
  3. 第三步,我們將一個字根設置成三碼,大碼Z、聲碼z、韻碼。這樣,雙根字的編碼就變成了AaZzⓩ
  4. 第四步,我們只需要確定的映射規則。

這樣,我們就可以得到一個新的方案,它的編碼最長五碼,有以下可能:

  • 一根字:Zzⓩ
  • 兩根字:AaZzⓩ
  • 三根字:AaBZz
  • 四根以上字:AaBCZ

觀察到,韻碼不僅包含了部分的字根信息,還能夠作爲字根之間的分隔符。一旦用戶輸入了韻碼,這個字就被唯一確定,可以直接上屏。由於取到五碼,且首根聲碼永遠取全(鄭碼、徐碼也是),此設計可以保證大字集極低重碼。碼長方面,雖然最長五碼,但可以通過連續輸入來減少碼長,比倉頡效率更高。最後,我們得到的是一個重碼比倉頡低,碼長比倉頡短,且完全不需要空格鍵的大字集方案。

到此為止,其實可以說,這個方案已經完成了。但我還是覺得有些不夠完美:

  1. 碼長還是太長,從兩根字開始都是五碼。
  2. 首根取大碼、聲碼,會有大量空間浪費,簡碼效率不高。
  3. 手感不會太好,畢竟聲碼出現了Y,比如「一」的編碼是FYⓘ。不論是當量還是鍵位分佈,都不好。

如何解決這些問題?我從卿雲的小碼設計中找到了答案,並且同時解決了以上三個問題。卿雲中,零聲母的yi韻,直接取了小碼I,而不是Y。這個方法可以適用到新方案中。對於部分零聲母的字根,我們可以無視它的聲碼,直接取韻碼。也就是説,這些字根字全碼只有兩碼:Zⓩ。那麼,單字的編碼可行組合明顯增加:

  • 一根字:Zⓩ Zzⓩ
  • 兩根字:AaZzⓩ AaZⓩ AZzⓩ AZⓩ
  • 三根字:AaBZz AaBZⓩ ABZzⓩ ABZⓩ
  • 四根以上字:AaBCZ ABCZz ABCZⓩ

眼尖的你可能看出來了,這和鄭碼徐碼的主副根設計不謀而合。他們當初這樣設計,一者,可以增加前兩碼的編碼空間效率,二者,對於首根為主根的字多取一根,能夠攫取更多的信息。但是,它們的主根和副根小碼取碼不統一,變相增加了小碼的無理性。

而通過省略零聲母字聲碼的方法,我們也可以達到同樣的效果,但小碼的設計邏輯更加統一。可以說,我主觀上沒有分主副根的意圖,但客觀上或許實現了主副根的效果。

至此,碼長得到了降低,簡碼效率得到了提高,手感也得到了改善,方案也就完成了。老傳統,我用《尚書大傳》之「日月有常,星辰有行」將它命名為日月。其實也暗藏着聲碼和韻碼、A區和B區的對立關係。

這個方案,雖然在按鍵區分了A區和B區,但它不同於一般意義上的頂功方案。頂功方案中,只有輸入了下一個字的A區鍵,纔意味著上一個字輸入完畢,可以上屏,它對編碼的分割是外生的。而本方案中,只要出現B區按鍵(韻碼),便意味着這個字已經輸入完畢,可以上屏了,它對編碼的分割是內生的。在這個方案中,A區按鍵,如同珠子一樣串聯在B區按鍵前。任何字的編碼,都不是其他字編碼的前綴。嚴格地說,它應該叫非前綴碼方案。

日月方案,全碼碼長和其他方案對比如下:

方案全碼碼長 簡體文本
光華4.00
星陳4.00
卿雲3.83
日月4.32

做完了全碼,接下來是簡碼的設置。注意到,一個字的全碼一定以A區鍵開始,所以當你第一碼輸入的是B區鍵時,其實是個空碼。我們可以充分利用這個五個空鍵位,將它們設置成簡碼,放入最常用的幾個漢字:的、是、我、不、了。因為一個字一定是以B區鍵結束的,因此當你輸入這些簡碼時,會自動上屏。也就是說,你擁有了五個真正的一碼字。按下E,你直接看到「的」字上屏。這五個簡碼,可以將碼長減少到4.0左右。

其他的簡碼,會有兩種模式:

  • 一種模式,是常規的簡碼,它是全碼的前N碼。你可以像其他方案一樣,通過空格鍵上屏。
  • 另一種模式,是帶有上屏性質的簡碼,它取全碼的前N碼,並且在末尾加上末根韻碼上屏。注意到,這類簡碼的上屏鍵有五種可能aeiou而不是單一的空格鍵,因此需要適應這種簡碼方式。日月方案中,這類簡碼只設置500個。它們將碼長減到了3.4左右。

此兩種簡碼模式,本質上都是全碼的前綴再加上一個上屏碼。因此,對於任意一個簡碼碼位,都有最多六種可能的簡碼字。在輸入當中,你可以根據提示選擇使用空格鍵上屏,或者使用韻碼鍵上屏。

以上就是日月方案的設計思路。它的優點缺點都很突出,特別適合喜歡打單字的用戶、不願打空格的用戶、對重碼要求較高的用戶。

A區B區按鍵數量

由於按鍵需要分爲互不重合的A區和B區,A區或B區的數量必然在1到24之間。具體數量,應當取決於如何讓編碼空間最大化。注意到,依據日月的取碼規則,首根不取Z,因此實際編碼空間數量為:

Y=(A1)A3B+(A1)A2B+(A1)AB+(A1)B+B=A4BA3B+A3BA2B+A2BAB+ABB+B=A4B

這個代數式是優美的,因為中間項可以全部約去。用B=26A進行替換,再對A求一階導,令其等於0:

dYdA=5A4+104A3=0

可以求得:A=1045=20.8, B=5.2。A區和B區的數量就近取整,最後得到A區21個,B區5個的最優分配。

宇浩輸入法官網