stone-zeng / stone-zeng.site

Personal website of Xiangdong Zeng
https://stone-zeng.site
Creative Commons Attribution Share Alike 4.0 International
12 stars 5 forks source link

在 LaTeX 中使用 OpenType 字体(三) | stone-zeng.github.io #20

Closed stone-zeng closed 9 months ago

stone-zeng commented 4 years ago

https://stone-zeng.github.io/2020-05-02-use-opentype-fonts-iii/

之前两篇文章介绍了 LaTeX 中使用 fontspec 等宏包设置字体、选择样式的基本方式。但是,在这近万字的篇幅中,我们始终都回避了数学字体的问题。排版数学公式是 TeX 设计的初衷,也是 LaTeX 最为人所称道的功能。

sikouhjw commented 4 years ago

字母表里的字符名是什么意思?没看懂这里

muzimuzhi commented 4 years ago

字母表里的字符名是什么意思?没看懂这里

某个字符对应的命令,参考 texdoc unimath-symbols 表格里的 Macro 一列。

sikouhjw commented 4 years ago

某个字符对应的命令,参考 texdoc unimath-symbols 表格里的 Macro 一列。

  • 之前,字符-命令的一一对应,主要针对非字母符号,例如 \lbrace 对应 (\bot 对应

  • unicode-math 把这种对应关系拓展到了所有字母,例如 \mitvarepsilon 对应 𝜀\mscrD 对应 𝒟。这些命令的命名有规律,m-<style>-<char name>m-it-varepsilonm-scr-D。文章中表述的就是这种命名规律。

  • 注意 unicode-math 提供的字符命令是样式无关的,不受 \mathxxx/\symxxx 的影响。例如 \mscrD\mathfrak{\mscrD}\symfrak{\mscrD} 都得到 script style "D"。

懂了,谢谢

syvshc commented 3 years ago

@muzimuzhi

字母表里的字符名是什么意思?没看懂这里

某个字符对应的命令,参考 texdoc unimath-symbols 表格里的 Macro 一列。

  • 之前,字符-命令的一一对应,主要针对非字母符号,例如 \lbrace 对应 (\bot 对应
  • unicode-math 把这种对应关系拓展到了所有字母,例如 \mitvarepsilon 对应 𝜀\mscrD 对应 𝒟。这些命令的命名有规律,m-<style>-<char name>m-it-varepsilonm-scr-D。文章中表述的就是这种命名规律。
  • 注意 unicode-math 提供的字符命令是样式无关的,不受 \mathxxx/\symxxx 的影响。例如 \mscrD\mathfrak{\mscrD}\symfrak{\mscrD} 都得到 script style "D"。

我发现我没有办法使用 \mupbeta 得到直立的 beta, 但是通过 \upbeta 却可以, 这是什么原因呢, 已经在 TEX.SE 上提问: https://tex.stackexchange.com/questions/583177/i-cant-get-an-upright-greek-letter-with-mup-but-i-can-do-it-with-up-in

muzimuzhi commented 3 years ago

@syvshc 不要以「在介绍一般性内容的文章下评论」的方式提问。可以发到 https://github.com/CTeX-org/forum

stone-zeng commented 3 years ago

我发现我没有办法使用 \mupbeta 得到直立的 beta, 但是通过 \upbeta 却可以, 这是什么原因呢

现在 unicode-math 采用的策略是先做 normalization,然后根据语义(math-style)来自动选择字母的样式。\mupbeta\mitbeta 分别等价于字符 β𝛽,它们都会在 normalization 阶段被统一,与 \beta(=\mitbeta)一致(当然具体实现可能未必这么做,但结果是一样的,没看代码)。这与拉丁字母的通常处理是一致的:我们都是直接在代码里面输 a,但得到的输出却是意大利体的 𝑎。

如果明确要使用直立或者意大利体的字母,则需要加上 \symup\symit 这样的标记,它们会忽略 math-style 的设置。

如果要绕开 normalization,可以使用 math-style=literal,然后就会按照字面意思解析输入的代码,这时 \mupbetamitbeta 就会真的输出 β 和 𝛽,但同时 a 也会输出 a 而非 𝑎。

至于 \upbeta\itbeta,它们是为了兼容性和一致性而定义的,等价于 \symup{\beta}\symit{\beta},根据上面的解释,不受 math-style 的影响。

注意 unicode-math 提供的字符命令是样式无关的,不受 \mathxxx/\symxxx 的影响。例如 \mscrD\mathfrak{\mscrD}\symfrak{\mscrD} 都得到 script style "D"。

因此这段话目前看起来好像就不太正确了。

参见:unicode-math 文档 5.1 节(好像我就是把它翻译了一遍 233)

syvshc commented 3 years ago

参见:unicode-math 文档 5.1 节(好像我就是把它翻译了一遍 233)

了解了,谢谢曾老师

sikouhjw commented 3 years ago

手写体和哥特体里面的字重写错了,写成了都是「正常」

stone-zeng commented 3 years ago

手写体和哥特体里面的字重写错了,写成了都是「正常」

Fixed

HuangXiaoKai commented 2 years ago

请问一下,KpMath一共提供了五种风格的otf,但是安装后,在word中只显示一种:KpMath-regular。如果想要选取KpMath-sans,应当如何设置?

sikouhjw commented 2 years ago

文档 unimath-symbols.pdf 中找到

这里的链接过时了,最新的是 http://mirrors.ctan.org/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf,而不是 http://mirrors.ctan.org/macros/latex/contrib/unicode-math/unimath-symbols.pdf

stone-zeng commented 2 years ago

文档 unimath-symbols.pdf 中找到

这里的链接过时了,最新的是 http://mirrors.ctan.org/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf,而不是 http://mirrors.ctan.org/macros/latex/contrib/unicode-math/unimath-symbols.pdf

Fixed

SwitWu commented 1 year ago

博主你好,问一个偏离文意的问题,请问在您的博客 md 文件中是如何做到支持 $\XeTeX$$\LuaTeX$ 的?

stone-zeng commented 1 year ago

博主你好,问一个偏离文意的问题,请问在您的博客 md 文件中是如何做到支持 $\XeTeX$$\LuaTeX$ 的?

https://github.com/stone-zeng/stone-zeng.github.io/blob/51e50b779151894b68d3e590aaf43ac197fbcbf0/js/script.js#L7-L9

https://github.com/stone-zeng/stone-zeng.github.io/blob/51e50b779151894b68d3e590aaf43ac197fbcbf0/js/script.js#L47-L106

Bobo-alcazar commented 1 year ago

請問大佬,unicode-math 包對 Unicode 數學符號的支持是不是還不太全呢?比如 U+25A0 這類控制符似乎並不能正常使用,還是得用 LaTeX 風格的指令來控制。
謝謝!

muzimuzhi commented 1 year ago

比如 U+25A0 這類控制符似乎並不能正常使用,還是得用 LaTeX 風格的指令來控制。

具体是怎么用的?

% !TeX TS-program = xelatex
\documentclass{article}
\usepackage{unicode-math}

\begin{document}
content $■$ % U+25A0 Black Square
\end{document}

image

Bobo-alcazar commented 1 year ago

比如 U+25A0 這類控制符似乎並不能正常使用,還是得用 LaTeX 風格的指令來控制。

具体是怎么用的?

% !TeX TS-program = xelatex
\documentclass{article}
\usepackage{unicode-math}

\begin{document}
content $■$ % U+25A0 Black Square
\end{document}

image

unicode plain text math 的用法見於 UTN #28,關於符號「■」是用於控制矩陣的,具體用法見於 UTN #28 §3.9,一個最簡單的範例是 ■(𝑎&𝑏@𝑐&𝑑),效果如:$\begin{array}{l}a&b\\c&d\end{array}$ 。還有不少類似的控制符。

據測試,Microsoft Word 目前是支持該格式的。

muzimuzhi commented 1 year ago

@Bobo-alcazar 就我所知,

Bobo-alcazar commented 1 year ago

@Bobo-alcazar 就我所知,

* `unicode-math` 宏包支持的是「用 literal (unicode) character 代替 LaTeX 数学符号命令」,提高源文件的可读性。比如,可以直接输入 `■` 代替命令 `\mdlgblksquare`,直接输入 `𝛼` 代替 `\alpha/\mitalpha`。整体依然只支持 LaTeX 风格的公式标记方式,比如分式用 `\frac`,矩阵用 `array` 等环境。

* 你提到的 UTN #28 UnicodeMath, A Nearly Plain-Text Encoding of Mathematics 介绍的是另一种公式标记方式(encoding of mathematics),LaTeX 里不支持这种标记方式。

* `unicode-math` 和 UnicodeMath 只是命名相似,在支持「用 literal (unicode) character 输入数学符号」上恰好有相同的支持/规定,但在公式标记方式上依然不同。`unicode-math` 没有实现 UTN #28 UnicodeMath。

感謝回答,看來是我誤解了。之前我誤以爲 unicode-math 是以在 LaTeX 中實現 UnicodeMath 爲目標的。

muzimuzhi commented 1 year ago

unicode-math 的目标是提供调用和配置 opentype 数学字体的 LaTeX2e 用户接口。允许 literal unicode character 输入算是副产品。可以阅读 unicode-math 包文档的 abstract 部分了解更多。