UnicodeMath编码教程

Posted 1024th

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UnicodeMath编码教程相关的知识,希望对你有一定的参考价值。

参考UnicodeMath官方文档,原文看这
word插入公式不自动斜体的解决办法
微软官网Word 中使用 UnicodeMath 和 LaTeX 的线性格式公式
本文持续更新。

1. 简介

用UnicodeMath写数学表达式很简单,而且编码非常易读,比较接近手写的数学表达式。因此这种编码叫做“近纯文本格式”。

后文中近纯文本格式称为 线性格式 ,将构建的表示格式称为 构建格式

线性格式比[La]TeX或MathML更紧凑、易读。来个对比:

公式:(frac{(a+c)}{d})

线性格式:((a + c))/d

[La]Tex:$frac{(a+c)}{d}$

MathML:

<mfrac>
    <mrow>
        <mi>a</mi>
        <mo>+</mo>
        <mi>c</mi>
    </mrow>
    <mi>d</mi>
</mfrac>

大多数数学表达式可以用线性格式明确表示,线性格式也可导出为[La]TeX、MathML格式。线性格式借用了部分TeX的符号,用来表示自己表示不了的东西,例如矩阵。

2. 编码简单数学表达式

2.1 分数

表示分数可以用LaTeX的frac{numerator} {denominator}。但天天打frac{}符号好累。

在线性格式中:输入a/b,再敲个空格,完事。比Tex快多了。

给几个例子:

[frac{abc}{d}] 线性格式是abc/d。要强制显示正常大小的线性分数(横着写),可以使用 /(反斜杠后跟斜杠)。

线性格式(a + c)/d显示为(frac{a+b}{d})
那问题来了,怎么才能输入(frac{(a+b)}{d})?很简单,再打一对括号:((a + b))/d

另外,分数线样式有三种:

  1. “分数斜线”U+2044(可以通过sdiv输入)
  2. “除法斜线”U+2215(ldiv
  3. 带圆圈的斜线(U+2298, div
    三种分别显示成
    技术图片

相同的符号语法“堆栈”,其类似于没有分数条的分数。堆栈用于创建二项式系数,堆栈运算符为“|”(atop)。例如,二项式定理

[(a+b)^n=sum_{k=0}^nleft(egin{array}{c}n\\ kend{array} ight)a^{k}b^{n-k}]

的线性格式为(参见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)
[alpha_2^3overeta_2^3+ gamma_2^3]
线性格式文本可以为(α_2^3/(β_2^3+γ_2^3)),而标准的TeX版本为$$alpha_2^3 over eta_2^3 + gamma_2^3$$
线性格式文本是合法的数学表达式,而TeX版本与数学表达式没有任何相似之处。

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] ]

它的线性格式版本为
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 讨论了这种自动间距)。但是,空格字符对于分隔线性格式表示法的操作数非常有用。当空格扮演这个角色时,它会在构建时消除。因此,如果您输入alphaUnicode数学编码后跟一个空格来获得α,当α替换alpha时,空格被消除。类似地,Unicode数学编码a_1 b_2会显示(a_1b_2)(中间没有空格)。

另一个例子是消除了分数分母后面的空格,因为它会导致分数增加。如果空格位于分数的分子之前,则空格被消除,因为可能需要分隔分子的开始。类似地,如果在函数应用构造之前使用空格(参见节 3.5)或在上/下标之前(参见节 3.3),则它将被删除,因为它将界定这些构造的开始。

在嵌套的下标/上标表达式中,空格一次构建一个上/下标。例如,要用编码a^b^c建立(a^{b^c}),需要两个空格。像+这样的其他运算符会构建整个表达式,因为这些运算符明确地终止了操作。

以上是关于UnicodeMath编码教程的主要内容,如果未能解决你的问题,请参考以下文章

UnicodeMath数学公式编码_翻译(Unicode Nearly Plain - Text Encoding of Mathematics Version 3)

UnicodeMath数学公式编码_翻译(Unicode Nearly Plain - Text Encoding of Mathematics Version 3).md

markdown 打字稿...编码说明,提示,作弊,指南,代码片段和教程文章

Onenote中调用latex命令输入公式

Pycharm首次使用教程

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片