我在序言中添加了以下几行黑板粗体字。(灵感来自 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
、、已加载。)amsmath
amssymb
答案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,因为我们想要一个普通符号,所以我们需要乘以\symlettersA
256 并添加槽。由于黑板字母相对于其通常位置有 64 个位置的偏移,因此我们将 64 添加到参数的 ASCII 码中。
答案2
黑板上的粗体字母(仅大写)位于正常 ascii 范围“上方”的区域。正如您所发现的,正常的大写区域被 fraktur 占据。
确定特定字形位置的一个简单方法是生成相关字体的字体图表,并将其与规范进行比较cmr10
。您可以从命令行以交互方式执行此操作,使用以下说明:
tex testfont
txmia at 10pt
\table\vfill\eject\init
cmr10
\table\bye
(第一行之后的每一行都会有一个提示。)
比较两页上的图表,您将很容易看到相对位置。
毫无疑问,有一种优雅的方式来表达 ASCII 大写区域和黑板粗体区域之间的“偏移量”,以便txmia
可以重新定义,但你所做的很简单而且可靠。但是,如果我这样做,我可能会用十六进制( )而不是十进制()\mathbb
来表示位置。"201 - "232
129 - 154