强烈推荐本文简明版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中,它使用nchoose k
(c)运算符而不是atop
运算符|
。因此,假设你在(k)之后键入一个空格,上面二项式定理中的二项式系数可以写成“nchoose k
”。包含此快捷方式主要是为了与TeX兼容,因为(n|k)
非常容易键入。
当/
后跟着运算符,显然不是想要输入分数。因此/
号还被赋予了别的含义:输入像≠
这样的否定运算符,只需键入/=
就可得到≠
。这种通过带/
来表示否定运算符在 4.1节 详细介绍。要输入≠
,您还可以键入TeX的名称
e
,但/=
更简单一些。而 4.1节 中其他否定运算符的TeX名称更难记住。
分数的另一个技巧是两个数字之间或斜杠和数字之间的句点或逗号被认为是数字的一部分,而不是终结符。例如,1/3.1416
为 (frac{1}{3.1416}),而不是(frac{1}{3}.1416)。
2.2 上标和下标
上标下和上标有点棘手,但它们仍然具有可读性。具体来说,我们通过下标运算符引入下标(在TeX中将其显示为ASCII下划线_)。一个简单的下标操作数由一个或多个字符的字符串组成,其中包含 通用类别Lx(字母)和Nd(十进制数字),以及不可见的逗号。例如,诸如 (delta_{mu
u}) 的一对下标被写为δ_μν
。类似地,上标运算符实现上标(在TeX中显示为ASCII ^)。所以 a^b
表示 (a^b) 。具有构建功能的文本处理系统的一个很好的增强功能是将_
显示为一个小的下标向下箭头,将^
显示为一个小的上标向上箭头,以便将这些构建运算符的语义显示在数学语境。
复合下标和上标包括括号内的表达式,方括号和大括号。因此 (delta_{mu+
u}) 写为δ_(μ+ν)
。此外,以特殊方式处理另外两个运算符(逗号和句号)是值得的。具体来说,如果下标操作数后面直接跟一个逗号或一个句点,后面依次是空格,则逗号或句点出现在行上,即被视为终止下标的运算符。(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^{3eta}_{delta_1
ho_2sigma_3})
其线性格式为W^3β_δ1ρ1σ2
。而在TeX中,需要这样输入
$W^{3eta}_{delta_1
ho_1sigma_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 eta_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
ho_1sigma_2}^{3eta}=
U_{delta_1
ho_1}^{3eta}+ {1 over 8pi^2}
int_{alpha_1}^{alpha_2} dalpha_2’ left[
{U_{delta_1
ho_1}^{2eta}-alpha_2’
U_{
ho_1sigma_2}^{1eta}over
U_{
ho_1sigma_2}^{0eta}}
ight] $$
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}这样的表达式。这个分隔符的大小也与周围的括号相匹配,并且作为关系运算符间隔开