字体包改变整个外观

字体包改变整个外观

我当前的序言定义了以下字体设置

\usepackage{beton}
\usepackage[T1]{fontenc}
\usepackage[T1,euler-digits]{eulervm}
\DeclareFontSeriesDefault[rm]{bf}{sbc}

txfonts现在我对包通过命令生成的符号很感兴趣\varmathbb,但是,导入包时它也会更改默认的数学和文本字体。我该如何避免这种情况并仍然获得使用该\varmathbb命令的能力?

答案1

我们txfonts.sty发现

\DeclareMathSymbol{\m@thbbch@rA}{\mathord}{lettersA}{129}
\DeclareMathSymbol{\m@thbbch@rB}{\mathord}{lettersA}{130}
[...other similar lines...]
\DeclareMathSymbol{\m@thbbch@rY}{\mathord}{lettersA}{153}
\DeclareMathSymbol{\m@thbbch@rZ}{\mathord}{lettersA}{154}

\DeclareMathSymbol{\varBbbk}{\mathord}{lettersA}{171}

\long\def\DoLongFutureLet #1#2#3#4{%
   \def\@FutureLetDecide{#1#2\@FutureLetToken
      \def\@FutureLetNext{#3}\else
      \def\@FutureLetNext{#4}\fi\@FutureLetNext}
   \futurelet\@FutureLetToken\@FutureLetDecide}
\def\DoFutureLet #1#2#3#4{\DoLongFutureLet{#1}{#2}{#3}{#4}}
\def\@EachCharacter{\DoFutureLet{\ifx}{\@EndEachCharacter}%
   {\@EachCharacterDone}{\@PickUpTheCharacter}}
\def\m@keCharacter#1{\csname\F@ntPrefix#1\endcsname}
\def\@PickUpTheCharacter#1{\m@keCharacter{#1}\@EachCharacter}
\def\@EachCharacterDone \@EndEachCharacter{}

\DeclareRobustCommand*{\varmathbb}[1]{\gdef\F@ntPrefix{m@thbbch@r}%
  \@EachCharacter #1\@EndEachCharacter}

我们还发现

\DeclareSymbolFont{lettersA}{U}{txmia}{m}{it}
\SetSymbolFont{lettersA}{bold}{U}{txmia}{bx}{it}
\DeclareFontSubstitution{U}{txmia}{m}{it}

那是什么? 的字母表\varmathbb不在标准 ASCII 位置(它们是为 Fraktur 字母保留的),因此该包定义了一个例程,用于将类似于的内容转换\varmathbb{ABC}为从右侧插槽中获取的符号序列。

可以使用更先进的工具来简化设置。插槽相对于 ASCII 码有 64 的偏移量,对于参数中的每个字母,我们需要生成数学码,该数学码的第一个十六进制数字是\symlettersA,后面跟着 64 加上字母的 ASCII 码(同样是十六进制)。

\documentclass{article}

\usepackage{beton}
\usepackage[T1]{fontenc}
\usepackage[T1,euler-digits]{eulervm}
\DeclareFontSeriesDefault[rm]{bf}{sbc}

\DeclareSymbolFont{lettersA}{U}{txmia}{m}{it}
\SetSymbolFont{lettersA}{bold}{U}{txmia}{bx}{it}
\DeclareFontSubstitution{U}{txmia}{m}{it}

\DeclareMathSymbol{\varBbbk}{\mathord}{lettersA}{171}

\ExplSyntaxOn

\NewDocumentCommand{\varmathbb}{m}
 {
  \tl_map_function:nN { #1 } \richard_varmathbb:n
 }

\cs_new_protected:Nn \richard_varmathbb:n
 {
  \mathchar \int_eval:n { \symlettersA * "100 + `#1 + 64 } \scan_stop:
 }

\ExplSyntaxOff

\begin{document}

Abc $a+b=c$

$\varmathbb{ABC}+\varmathbb{D}+\varmathbb{EFGHIJKLMNOPQRSTUVWXYZ}$

\end{document}

在此处输入图片描述

相关内容