将符号(例如 \alpha)映射到字体 + char-id(在 ams/foobar.pfb 中)

将符号(例如 \alpha)映射到字体 + char-id(在 ams/foobar.pfb 中)

更新:

根据 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 以下数字以十六进制形式表示):

  1. 0表示\alpha被视为普通符号,用于数学公式中的间距;

  2. 1表示字形将取自数学系列数字 1

  3. 0B表示字形位于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代表0letters是的符号名称1"0B表示相同的插槽。这是\sum

\DeclareMathSymbol{\sum}{\mathop}{largesymbols}{"50}

largesymbols将被翻译成和3)。\mathop1

故事还没有结束。我们必须为数学系列分配字体。这在 中再次完成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将翻译内容放入文件中,其中有如下几行.pfbpdftex.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 部分

相关内容