強烈推薦本文簡明版UnicodeMath編碼教程
本文為UnicodeMath官方文檔的翻譯,原文看這。翻譯如有不准還請諒解!
由於我個人只想學習在word中使用UnicodeMath,故可能不會翻譯整個文檔。
word插入公式不自動斜體的解決辦法
微軟官網Word 中使用 UnicodeMath 和 LaTeX 的線性格式公式
本文持續更新。
完整目錄
- 簡介
- 編碼簡單的數學表達式.
- 分數
- 上標和下標
- 空白 (空格) 字符的使用
- 編碼其他數學表達式
- 分隔符
- 文字運算符
- Prescripts 以及Above/Below Scripts
- n元運算符
- 數學函數
- 根式
- 外框
- 可伸長的字符
- 矩陣
- 重音運算符
- 微分,指數,虛數符號
- Unicode 上標和下標
- 連接運算符
- 逗號、句號和冒號
- 數學區里面的普通文本
- 空格字符
- Phantoms and Smashes(幻影和粉碎?)
- 任意分組
- 方程組
- math zone 數學區
- 公式編號
- 字符和運算符的線性格式
- 方程分解和對齊
- 大小覆蓋
- 輸入方法
- 字符翻譯
- 數學鍵盤
- 十六進制輸入
- 下拉菜單、工具欄、上下文菜單
- 宏
- 自動更正數學線性格式
- 手寫輸入
- 數學表達式的識別
- 在編程語言中使用線性格式
- 程序中線性格式的優點
- 編程符號的比較
- 導出到 TeX
- 總結
- 致謝
- 附錄 A. 線性格式語法
- 附錄 B. 字符關鍵字和屬性
- 版本差異
- 參考資料
1. 簡介
讓計算機理解人類語言對於提高計算機的實用性非常重要。自然語言翻譯,語音識別和生成以及編程是這種機器理解發揮作用的典型方式。這種理解越好,計算機就越有用,因此自20世紀60年代初以來,目前在這些領域投入了大量精力。具有諷刺意味的是,在這方面往往被忽視的一種真正的國際人類語言是數學本身。
通過一些約定, Unicode(The Unicode Standard, Version 5.0, (Reading, MA, Addison-Wesley, 2006. ISBN 0-321-18578-1) or online as http://www.unicode.org/versions/Unicode5.0.0/) 可以在可讀的近乎純文本中編碼許多數學表達式。從技術上講,這種格式是“輕微標記的格式”;因此使用“近乎”。格式是線性的,但可以以組合的演示形式顯示。為了區分本文中的兩種格式,我們將近純文本格式稱為 線性格式
,將構建的表示格式稱為 構建格式
。此線性格式可與基於Unicode數學屬性的啟發式一起使用,以在不借助顯式數學開/關命令的情況下識別數學表達式。 Unicode的強大促進了對這種數學符號的認可。或者,線性格式可以在用戶明確控制的“數學區域”中使用,或者使用TeX中使用的開關字符,或者使用富文本環境中的字符格式屬性。使用數學區域是可取的,因為識別啟發式不是絕對可靠的。
線性格式比[La]TeX或MathML更緊湊、易讀。然而,與這些格式不同,它並不試圖包括所有的印刷裝飾。相反,我們認為處理更高級別層中的一些裝飾是有用的,這些裝置處理文本和背景顏色,字體大小,腳注,注釋,超鏈接等豐富的文本屬性。原則上,可以擴展符號以包含屬性更高級別的層,但代價是降低了可讀性。因此,嵌入在富文本環境中,線性格式可以忠實地表示豐富的數學文本,而嵌入在純文本環境中,它缺乏大多數富文本屬性和一些數學印刷屬性。線性格式主要與表示有關,但它有一些似乎只是面向內容的語義特征,例如, n-aryands和函數應用參數(見Secs 3.4 和 3.5)。這些已被包括在內以幫助顯示具有適當排版的組合功能,但它們也有助於與數學導向程序進行互操作。
大多數數學表達式可以用線性格式明確表示,從中可以將它們導出到[La]TeX,MathML,C++和符號操作程序。線性格式借用了TeX的符號,表示數學對象不能很好地用於數學線性表示法,例如矩陣。
多種語法選擇可用於線性格式。本文中的選擇偏好了許多標准:數學公式的有效輸入,支持高質量數學排版的充分通用性,至少在富文本環境中顯示優雅數學文本的能力,以及類似於真正的數學符號的格式。顯然,必須在這些目標之間做出妥協。
線性格式用於:
- 輸入數學表達式
- 顯示數學表達式
- 計算機程序
對於數學感知程序之間的數學表達式的更一般存儲和交換,優選MathML和其他更高級語言。
第2節 介紹線性格式中的 分數、下標和上標,並討論如何使用ASCII space U+0020
構建數學表達式。
第3節 總結了其他結構的用法及其相對優先級,這些優先級用於簡化表示法。
第4節 討論了輸入法。
第5節 給出了識別嵌入普通文本中的數學表達式的方法。
第6節 解釋了Unicode純文本如何在編程語言中起作用。
第7節 給出了總結。
附錄提供了簡化的 線性格式語法 和部分 運算符 列表。
2. 編碼簡單數學表達式
Unicode比ASCII有對數學更強的支持,那么Unicode近純文本數學編碼長什么樣?最着名的ASCII數學表達式編碼是TeX的編碼,因此我們將其用於比較。 MathML比TeX更冗長,一些比較也適用於它。
盡管TeX在科學和工程領域取得了巨大的成功,但瀏覽其編碼時,它們看起來並不像它們所代表的式子。使用TeX的符號直接手工進行代數計算並不容易。使用Unicode,人們可以更容易地表示數學表達式,且編碼的可讀性和易用性更強。通過在能夠以組合形式顯示和編輯數學表達式的系統中使用線性格式可以顯着增強此功能。
本節介紹帶有分數,下標和上標的線性格式。最后是關於如何使用ASCII空格字符U+0020
一次構建一個構造的小節。這是使線性格式成為輸入數學公式的理想選擇。通常,在進行語法和語義選擇的情況下,輸入便利性被賦予高優先級。
2.1 分數
表示分數的一種方法是LaTeX的\frac{numerator} {denominator}
。編譯后“{}
”並不會被顯示。這些簡單的規則立即給出一個明確的“純文本”,但看起來與相應的數學符號完全不同,從而使其更難閱讀。
相反,我們定義了一個簡單的操作來包括所有連續的字母和十進制數字,即字母數字字符的跨度,那些屬於長的x和Nd總分類(參見 Unicode標准 5.0,表4-2。普通類)。(Instead we define a simple operand to consist of all consecutive letters and decimal digits, i.e., a span of alphanumeric characters, those belonging to the L\(x\) and Nd General Categories(see The Unicode Standard 5.0,Table 4-2. General Category). )
因此,一個簡單的分子或分母由大多數非字母數字字符終止,包括例如 算術運算符,空白(U+0020),U+2200..U+23FF,U+2500..U+27FF,U+2900..U+2AFF范圍內的Unicode字符。
分數運算符由通常的斜杠/(U+002F)給出。所以簡單的構建分數 $$\frac{abc}{d}$$ 以線性格式顯示為 abc/d
。要強制顯示正常大小的線性分數,可以使用\ /
(反斜杠后跟斜杠)。
對於更復雜的分數(例如包含運算符),可以使用小括號()
,方括號[]
或大括號{}
來包含所需的字符組合。如果使用括號並且最外面的括號前面和后面是運算符,那么這些括號不會以組合形式顯示,因為通常不希望看到這樣的括號。因此純文本(a + c)/d
顯示為
的線性格式為(參見3.4節 關於“膠水” ▒ 的討論)(a+b)^n=Σ_(k= 0)^n▒(n|k)a^k b^(n-k)
,
其中(n|k)
是組合的二項式系數的第\(n\)項系數\(ķ\)。求和符號使用了下一小節中討論的下標/上標符號。
由於二項式系數非常常見,因此TeX為它們選擇了控制字。在線性格式版本3中,它使用n\choose k
(c)運算符而不是\atop
運算符|
。因此,假設你在\(k\)之后鍵入一個空格,上面二項式定理中的二項式系數可以寫成“n\choose k
”。包含此快捷方式主要是為了與TeX兼容,因為(n|k)
非常容易鍵入。
當/
后跟着運算符,顯然不是想要輸入分數。因此/
號還被賦予了別的含義:輸入像≠
這樣的否定運算符,只需鍵入/=
就可得到≠
。這種通過帶/
來表示否定運算符在 4.1節 詳細介紹。要輸入≠
,您還可以鍵入TeX的名稱\ne
,但/=
更簡單一些。而 4.1節 中其他否定運算符的TeX名稱更難記住。
分數的另一個技巧是兩個數字之間或斜杠和數字之間的句點或逗號被認為是數字的一部分,而不是終結符。例如,1/3.1416
為 \(\frac{1}{3.1416}\),而不是\(\frac{1}{3}.1416\)。
2.2 上標和下標
上標下和上標有點棘手,但它們仍然具有可讀性。具體來說,我們通過下標運算符引入下標(在TeX中將其顯示為ASCII下划線_)。一個簡單的下標操作數由一個或多個字符的字符串組成,其中包含 通用類別Lx(字母)和Nd(十進制數字),以及不可見的逗號。例如,諸如 \(\delta_{\mu\nu}\) 的一對下標被寫為δ_μν
。類似地,上標運算符實現上標(在TeX中顯示為ASCII ^)。所以 a^b
表示 \(a^b\) 。具有構建功能的文本處理系統的一個很好的增強功能是將_
顯示為一個小的下標向下箭頭,將^
顯示為一個小的上標向上箭頭,以便將這些構建運算符的語義顯示在數學語境。
復合下標和上標包括括號內的表達式,方括號和大括號。因此 \(\delta_{\mu+\nu}\) 寫為δ_(μ+ν)
。此外,以特殊方式處理另外兩個運算符(逗號和句號)是值得的。具體來說,如果下標操作數后面直接跟一個逗號或一個句點,后面依次是空格,則逗號或句點出現在行上,即被視為終止下標的運算符。(Specifically, if a subscript operand is followed directly by a comma or a period that is, in turn, followed by whitespace, then the comma or period appears on line,i.e., is treated as the operator that terminates the subscript. )但是,后跟字母數字的逗號或句點將被視為下標的一部分。這種改進消除了對許多重寫括號的需要,從而產生更易讀的線性格式文本(請參見 第3.14節 有關逗號和句點的更多討論)。
關於上/下標的嵌套:a_b_c
代表\(a_{b_c}\)。類似地,a^b^c
代表\(a^{b^c}\)
編寫像 \(a^{b_c}\) 這樣式子的需要括號: a^(b_c)
,因為a^b_c
(或a_c^b
)顯示為\(a^b_c\)。構建程序負責確定下標或上標基數。通常,基數只是一個數學斜體字符,就像 \(a\) 。但它可能是一個括號內的表達式或者像 \(\sin^2{x}\) 中的sin
這樣的數學函數的名稱(請參見 第3.5節 有關此案例的更多討論)。它也可以是運算符,如+
和=
。在印度語和其他面向集群的腳本中,默認情況下,基數是下標或表示運算符之前的集群。
作為一個稍微復雜的例子,想想這個表達式怎么寫?
\(W^{3\beta}_{\delta_1\rho_2\sigma_3}\)
其線性格式為W^3β_δ1ρ1σ2
。而在TeX中,需要這樣輸入
$W^{3\beta}_{\delta_1\rho_1\sigma_2}$
若使用Unicode作為符號,TeX版本看起來將會更簡單,即$W^{3β}_{δ_1ρ_σ_2}$
或$W^{3β}_{δ1ρ1σ2}$
,由於Unicode有全套十進制上標和下標。實際上,數字下標通常使用下划線輸入,數字后跟空格或運算符,因此主要的簡化是需要更少的括號。
對於比(ratio)
線性格式文本可以為\(α_2^3/(β_2^3+γ_2^3)\),而標准的TeX版本為$$\alpha_2^3 \over \beta_2^3 + \gamma_2^3$$
。
線性格式文本是合法的數學表達式,而TeX版本與數學表達式沒有任何相似之處。
TeX變得更長更笨重諸如
它的線性格式版本為
W_δ1ρ1σ2^3β=U_δ1ρ1^3β+ 1/8π^2 ∫_α1^α2▒dα'2 [(U_δ1ρ1^2β-α'-2U_ρ1σ2^1β)/U_ρ1σ2^0β]
而標准的TeX版本為
$$W_{\delta_1\rho_1\sigma_2}^{3\beta}=
U_{\delta_1\rho_1}^{3\beta}+ {1 \over 8\pi^2}
\int_{\alpha_1}^{\alpha_2} d\alpha_2’ \left[
{U_{\delta_1\rho_1}^{2\beta}-\alpha_2’
U_{\rho_1\sigma_2}^{1\beta}\over
U_{\rho_1\sigma_2}^{0\beta}} \right] $$
2.3 空白(空格)字符使用
由於運算符周圍的間距應由數學顯示引擎自動提供,因此很少需要ASCII空格字符(U+0020)來顯式構建文本間距(節 3.16 討論了這種自動間距)。但是,空格字符對於分隔線性格式表示法的操作數非常有用。當空格扮演這個角色時,它會在構建時消除。因此,如果您輸入\alpha
Unicode數學編碼后跟一個空格來獲得α,當α替換\alpha
時,空格被消除。類似地,Unicode數學編碼a_1 b_2
會顯示\(a_1b_2\)(中間沒有空格)。
另一個例子是消除了分數分母后面的空格,因為它會導致分數增加。如果空格位於分數的分子之前,則空格被消除,因為可能需要分隔分子的開始。類似地,如果在函數應用構造之前使用空格(參見節 3.5)或在上/下標之前(參見節 3.3),則它將被刪除,因為它將界定這些構造的開始。
在嵌套的下標/上標表達式中,空格一次構建一個上/下標。例如,要用編碼a^b^c
建立\(a^{b^c}\),需要兩個空格。像+
這樣的其他運算符會構建整個表達式,因為這些運算符明確地終止了操作。
以下未翻譯
在TeX中,空格字符也用於分隔控制字,如 \alpha
,並且不以組合形式出現。 TeX的使用和線性格式之間的區別在於,在TeX中,空白在組合顯示中總是被消除,而在線性格式中,不分隔操作數或關鍵字的空格確實會產生間距。其他間距字符在Sec。中討論。 3.16。
空間的一個顯示用途是覆蓋算法,該算法決定像+或 - 這樣的模糊一元/二元運算符是一元的。如果后跟空格,則認為操作符是二進制的,並且不顯示空格。空間也用於在各種情況下獲得逗號,句號和冒號周圍的正確間距(參見第節 3.14)。
3. 編碼其他數學表達式
上一節描述了我們如何以線性格式編碼分數,上/下標,並給出了對該格式的感覺。當前部分描述了我們如何使用這種方法編碼其他數學結構,並以更正式的線性格式討論結束。
3.1 分隔符
方括號[],大括號{}和括號()在Unicode純文本中表示自己,並且能夠顯示構建公式的文字處理系統應該能夠放大它們以適應它們內部的內容。一般來說,我們將這些字符稱為 分隔符。分隔對不需要由相同類型的分隔符組成。例如,可以使用[和close with}打開,並且可以在某些數學文檔中看到這種用法。結束定界符可以有下標和/或上標。分隔符中稱為 圍欄 在MathML。
這些選擇足以滿足大多數感興趣的案例。但是為了允許使用沒有匹配分隔符的分隔符並且否定分隔符的打開/關閉字符,可以使用特殊關鍵字\ open和\ close。這些分別轉換為框圖字符├和┤。制表字符用於
8 Unicode技術說明28
的Unicode數學的幾乎純文本編碼
開/關分隔符,因為他們不太可能被用作數學符號和他們在字體一應俱全。如果在任何不是相反意義的分隔符的字符之前使用,則打開/關閉分隔符充當不可見的分隔符,定義分隔表達式的相應末尾。這種情況的常見用法是“案例”等式,例如
| x | = {-x x如果 如果 X X≥<0
0,
其具有線性格式“| X | = {█(&x“if”x≥0@ - &x“if”x <0)(“(見節 3.19 關於方程式數組運算符█的討論)。
因為案例構造相當常見,TeX有它的\ case控制字。這可以用帶有\ case操作符C的線性格式版本3來實現。這樣,上面的等式可以寫成“| x | = C(&x”if“x≥0 @ - &x“if”x <0)“,這仍然有點奇怪,但你不必輸入開口大括號和\ close。
打開/關閉定界符可用於否決定界符作為公認奇怪的正常打開/關閉字符,但盡管如此,有時使用的,表達“]A + B[”,其具有線性格式“├]A+B┤[”。請注意,打開或關閉分隔符后面的空白被“吃掉”。這是為了允許開放分隔符后跟正常分隔符,而不將該對分解為單個分隔符。另見Sec。 3.18 關於如何進行任意分組。如果在出現像分隔符這樣的分隔符之前,需要將├視為空的開放分隔符或者],按照空格來強制開放分隔符解釋。
為了抑制自動調整大小和選擇特定尺寸,├后跟一個數字'0' - '4',含義如下表所示
數字含義
0不生長1 TeX big 2 TeX Big 3 TeX bigg 4 TeX Bigg
它是如果顯示系統可以在括號內的表達式中打破方程,則很少需要使用顯式大小。
線性格式中的開放和閉合分隔符的使用無疑是TeX的顯性特性與對合法數學符號的期望之間的折衷,但靈活性值得妥協,特別是在與通常構建的文本交互時如此就像在WYSIWYG數學系統中一樣。為此,TeX使用\ left和\ right代替\ open和\ close。我們使用后者,因為它們適用於許多阿拉伯語語言環境中使用的從右到左的數學以及通常的從左到右的數學。
絕對值由ASCII垂直條|表示(U + 007C)。其數量在任何給定支架嵌套層次均勻度通常決定了是否
Unicode技術注意28 9
的數學的Unicode幾乎純文本編碼
豎線是接近|。具體而言,第一次出現被認為是open | (除非下標或上標),下一個關閉| (除非跟隨操作員),下一個打開|,依此類推。
通過丟棄絕對值內最外面的括號,可以明確地處理嵌套絕對值。例如,建立表達式 ||x| - |y|| 可以具有線性格式|(|x| - |y|)|。通過注意垂直條|,可以在沒有澄清括號的情況下解析某些情況,例如這個情況直接跟隨運營商是開放的|。但是例子|a|b-c|d|需要澄清的解釋,因為它可以被解釋為(|a|b) - (c|d|)或|a(|b-c|)d|。通常的算法給出前者,所以如果想要后者沒有內括號,可以輸入|(a|b-c|d)|。
我們對待的另一個案例如果它后跟一個空格(U + 0020),則作為一個接近的分隔符。這處理狄拉克符號中胸罩矢量的重要情況。例如,量子力學密度操作者 ρ 具有定義
ρ=ΣPψ|ψ⟩⟨ψ|
ψ
,
10 Unicode技術說明28
其中可以使用ASCII垂直條輸入垂直條。
如果是|后跟下標和/或上標,並且沒有相應的open |,它被視為腳本基本字符,即 不是 分隔符。其組合尺寸應為當前顯示/內聯模式中積分符號的高度。
Unicode范數定界符U + 2016(‖或\ norm)具有與絕對值字符相同的打開/關閉定義。除了它總是被認為是一個分隔符。
分隔符也可以在其中包含分隔符。線性格式的版本2沒有形式化函數參數的逗號分隔符(MathML確實如此),但它支持垂直條分隔符\ vbar,它由框圖畫光垂直字符│(U + 2502)表示。我們嘗試使用ASCII | (U + 007C)也是為了這個目的,但是由此產生的模糊性通常是不可克服的。使用U + 007C作為可被解密的分隔符的一種情況是形式(a|b),其中 a 和 b 是數學表達式。但是(a|b|c)將垂直條解釋為絕對值。人們可能想要解釋|在(a|b)中作為開放分隔符)作為相應的緊密分隔符,而(尚未匹配。如果是,則取代|by├,即(├|b)。垂直條分隔符大小增加以匹配周圍括號的大小。在版本3中,其他運算符可以被視為分隔符,在它們之前加上\ middle(║-U + 2551)。
另一個常見的分隔符是\ mid字符|(U +2223),常用於像{x | f(x)= 0}這樣的表達式。這個分隔符的大小也與周圍的括號相匹配,並且作為關系運算符間隔開