更新:
根据 Yan 的建议,目前正在阅读:ctan.tug.org/ctan/macros/latex/doc/encguide.pdf
设置
当我在 LaTeX 中输入 $\alpha$ 时,这个 \alpha 会映射到某个 foobar.pfb 文件中的某个字符。
问题
这个映射存储在哪里?
语境
这是对以下内容的跟进: 生成所有 LaTeX 数学符号的字体
我已经弄清楚了:
* I want *.pfb, not *.ttfs
* I can load *.pfbs into my Java display code and they work perfectly fine
现在,我需要一种方法将 ams math 中的各种定义映射到各种 *.pfb 文件中的各种字符。
优雅的解决方案
鉴于映射可能不是易于解析的格式,有没有办法让 TeX 帮我查询它?例如,我非常乐意定义一些形式的宏:
\magicmacro{符号名称}
然后将 *.pfb 文件和符号名称映射到的字符转储到 output.log。
谢谢!
答案1
到字形的映射\alpha
并不容易。我们首先看看\alpha
在 Plain TeX 中是如何定义的
\mathchardef\alpha="010B
首先,这意味着\alpha
只能在数学模式下使用。然后 TeX 解释四个十六进制数字("
前缀告诉 TeX 以下数字以十六进制形式表示):
0
表示\alpha
被视为普通符号,用于数学公式中的间距;1
表示字形将取自数学系列数字 10B
表示字形位于0B
该字体中的位置(TeX 字体有 256 个插槽,编号从"00
到"FF
)。
让我们看一下\sum
,以便比较:
\mathchardef\sum="1350
1
是“运算符类型”,3
是数学系列,50 是插槽。
TeX 维护多达 16 个数学家族,从 0 到 3 的家族具有特殊含义:家族 0 包含数字(因此分配给它的字体应该与文档的主字体匹配)、函数名称的字母(如“sin”)和大写希腊字母;在家族 1 中,我们可以找到数学斜体字母和小写希腊字母;在家族 2 中,包含大多数符号(如\times
或 )\sim
;在家族 3 中,包含大运算符(如 )\sum
和\int
可扩展分隔符。
当然,LaTeX 是基于相同的方案构建的,但增加了一些层以简化编程和切换字体。其定义\alpha
可以在以下位置找到fontmath.ltx
:
\DeclareMathSymbol{\alpha}{\mathord}{letters}{"0B}
这与前一个非常相似:\mathord
代表0
,letters
是的符号名称1
,"0B
表示相同的插槽。这是\sum
:
\DeclareMathSymbol{\sum}{\mathop}{largesymbols}{"50}
(largesymbols
将被翻译成和3
)。\mathop
1
故事还没有结束。我们必须为数学系列分配字体。这在 中再次完成fontmath.ltx
:
\DeclareSymbolFont{operators} {OT1}{cmr} {m}{n}
\DeclareSymbolFont{letters} {OML}{cmm} {m}{it}
\DeclareSymbolFont{symbols} {OMS}{cmsy}{m}{n}
\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
将字体分配给上述主要数学系列。当要求 LaTeX 排版\alpha
(系列中的letters
字体)时,它会查找系列中的 OML 编码字体cmm
,中等粗细和斜体形状;因此它会在文件的定义中查找omlcmm.fd
找到的字体
\DeclareFontShape{OML}{cmm}{m}{it}%
{<5><6><7><8><9>gen*cmmi%
<10><10.95>cmmi10%
<12><14.4><17.28><20.74><24.88>cmmi12%
}{}
大致来说,如果符号必须是 10 号大小,那么它必须使用 字体cmmi10
。然后,需要通过文件pdftex
将翻译内容放入文件中,其中有如下几行.pfb
pdftex.map
cmmi10 CMMI10 <cmmi10.pfb
存在;第一个cmmi10
表示 TeX 字体,CMMI10
是它的 Postscript 名称,然后cmmi10.pfb
是实际的 Postscript 字体文件。
恐怕这不适合胆小的人:它涉及许多来自 TeX 基础的低级概念和数百个定义。但毕竟不是无法管理的。
答案2
我相信我想要的是:
/usr/local/texlive/2011/texmf-dist/source/latex/amsfonts/*.dtx
特别是 DeclareMathSymbol 部分