txmia 字体的黑板粗体字符

txmia 字体的黑板粗体字符

我在序言中添加了以下几行黑板粗体字。(灵感来自 txfonts.sty)

\let\mathbb\relax
\DeclareSymbolFont{lettersA}{U}{txmia}{m}{it}

\DeclareMathSymbol{\m@thbbch@rA}{\mathord}{lettersA}{129}
\DeclareMathSymbol{\m@thbbch@rB}{\mathord}{lettersA}{130}
\DeclareMathSymbol{\m@thbbch@rC}{\mathord}{lettersA}{131}
\DeclareMathSymbol{\m@thbbch@rD}{\mathord}{lettersA}{132}
\DeclareMathSymbol{\m@thbbch@rE}{\mathord}{lettersA}{133}
\DeclareMathSymbol{\m@thbbch@rF}{\mathord}{lettersA}{134}
\DeclareMathSymbol{\m@thbbch@rG}{\mathord}{lettersA}{135}
\DeclareMathSymbol{\m@thbbch@rH}{\mathord}{lettersA}{136}
\DeclareMathSymbol{\m@thbbch@rI}{\mathord}{lettersA}{137}
\DeclareMathSymbol{\m@thbbch@rJ}{\mathord}{lettersA}{138}
\DeclareMathSymbol{\m@thbbch@rK}{\mathord}{lettersA}{139}
\DeclareMathSymbol{\m@thbbch@rL}{\mathord}{lettersA}{140}
\DeclareMathSymbol{\m@thbbch@rM}{\mathord}{lettersA}{141}
\DeclareMathSymbol{\m@thbbch@rN}{\mathord}{lettersA}{142}
\DeclareMathSymbol{\m@thbbch@rO}{\mathord}{lettersA}{143}
\DeclareMathSymbol{\m@thbbch@rP}{\mathord}{lettersA}{144}
\DeclareMathSymbol{\m@thbbch@rQ}{\mathord}{lettersA}{145}
\DeclareMathSymbol{\m@thbbch@rR}{\mathord}{lettersA}{146}
\DeclareMathSymbol{\m@thbbch@rS}{\mathord}{lettersA}{147}
\DeclareMathSymbol{\m@thbbch@rT}{\mathord}{lettersA}{148}
\DeclareMathSymbol{\m@thbbch@rU}{\mathord}{lettersA}{149}
\DeclareMathSymbol{\m@thbbch@rV}{\mathord}{lettersA}{150}
\DeclareMathSymbol{\m@thbbch@rW}{\mathord}{lettersA}{151}
\DeclareMathSymbol{\m@thbbch@rX}{\mathord}{lettersA}{152}
\DeclareMathSymbol{\m@thbbch@rY}{\mathord}{lettersA}{153}
\DeclareMathSymbol{\m@thbbch@rZ}{\mathord}{lettersA}{154}

\DeclareRobustCommand*{\mathbb}[1]{\csname m@thbbch@r#1\endcsname}

现在我想知道是否有更优雅的方法来实现这个目标。但是用

\let\mathbb\relax
\DeclareMathAlphabet{\mathbb}{U}{txmia}{m}{it}

产生典型的\mathfrak-字符。

(我应该提到,包fourier、、已加载。)amsmathamssymb

答案1

\DeclareSymbolFont{lettersA}{U}{txmia}{m}{it}
\renewcommand{\mathbb}[1]{\mathchar\numexpr\symlettersA*256+64+`#1\relax}

当然,您必须在的参数中只使用一个字符\mathbb

解释:LaTeX 将一个数学组分配给 ,lettersA并在内部将此数学组编号引用为\symlettersA。因此,我们必须将 mathchar 代码构建为四字节十六进制数

<class><mathgroup><two bytes for the character's slot>

这里<class>是 0,因为我们想要一个普通符号,所以我们需要乘以\symlettersA256 并添加槽。由于黑板字母相对于其通常位置有 64 个位置的偏移,因此我们将 64 添加到参数的 ASCII 码中。

答案2

黑板上的粗体字母(仅大写)位于正常 ascii 范围“上方”的区域。正如您所发现的,正常的大写区域被 fraktur 占据。

确定特定字形位置的一个简单方法是生成相关字体的字体图表,并将其与规范进行比较cmr10。您可以从命令行以交互方式执行此操作,使用以下说明:

tex testfont
txmia at 10pt
\table\vfill\eject\init
cmr10
\table\bye

(第一行之后的每一行都会有一个提示。)

比较两页上的图表,您将很容易看到相对位置。

毫无疑问,有一种优雅的方式来表达 ASCII 大写区域和黑板粗体区域之间的“偏移量”,以便txmia可以重新定义,但你所做的很简单而且可靠。但是,如果我这样做,我可能会用十六进制( )而不是十进制()\mathbb来表示位置。"201 - "232129 - 154

相关内容