[Tex/LaTex] \varmathbb and package txfonts restricted to math mode

computer-modernfontsmath-mode

This question is related to this one: What are all the font styles I can use in math mode?

I would like to know if it is possible to use the command \varmathbb{}, that according to the accepted answer needs either the package txfonts or the package pxfonts (I am using the former), without extending the usage of the font to the entire document (thus leaving computer modern as the standard font).

Thanks a lot in advance for any feedback.

Best Answer

Use the font defined by newtxmath, with some help (the characters are not in the standard font position).

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

% from newtxmath
\DeclareFontFamily{U}{ntxmia}{}
\DeclareFontShape{U}{ntxmia}{m}{it}{<-> ntxmia }{}
\DeclareFontShape{U}{ntxmia}{b}{it}{<-> ntxbmia }{}
\DeclareSymbolFont{lettersA}{U}{ntxmia}{m}{it}
\SetSymbolFont{lettersA}{bold}{U}{ntxmia}{b}{it}

\AtBeginDocument{\let\mathbb\varmathbb}

\ExplSyntaxOn
\NewDocumentCommand{\varmathbb}{m}
 {
  \tl_map_inline:nn { #1 }
   {
    \use:c { varbb##1 }
   }
 }
\cs_new_protected:Nn \__mathbb_define:Nn
 {
  \DeclareMathSymbol{#1}{\mathord}{lettersA}{#2}
 }
\cs_generate_variant:Nn \__mathbb_define:Nn {ce}
\tl_map_inline:nn { ABCDEFGHIJKLMNOPQRSTUVWXYZ }
 {
  \__mathbb_define:ce { varbb#1 } { \int_eval:n { `#1+67 } }
 }
\tl_map_inline:nn { abcdefghijklmnopqrstuvwxyz }
 {
  \__mathbb_define:ce { varbb#1 } { \int_eval:n { `#1+61 } }
 }
\DeclareMathSymbol{\varbbimath}{\mathord}{lettersA}{'270}
\DeclareMathSymbol{\varbbjmath}{\mathord}{lettersA}{'271}
\ExplSyntaxOff

\begin{document}

$\mathbb{A}\mathbb{B}\mathbb{C}\mathbb{R}\mathbb{Z}\mathbb{k}\mathbb{l}\mathbb{m}$

$\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZklmn}$

$\varbbimath\varbbjmath$

\end{document}

enter image description here

Old answer (kept for those who still run TeX Live 2018)

\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}

% from newtxmath
\DeclareFontFamily{U}{ntxmia}{}
\DeclareFontShape{U}{ntxmia}{m}{it}{<-> ntxmia }{}
\DeclareFontShape{U}{ntxmia}{b}{it}{<-> ntxbmia }{}
\DeclareSymbolFont{lettersA}{U}{ntxmia}{m}{it}
\SetSymbolFont{lettersA}{bold}{U}{ntxmia}{b}{it}

\AtBeginDocument{\let\mathbb\varmathbb}

\ExplSyntaxOn
\NewDocumentCommand{\varmathbb}{m}
 {
  \tl_map_inline:nn { #1 }
   {
    \use:c { varbb##1 }
   }
 }
\tl_map_inline:nn { ABCDEFGHIJKLMNOPQRSTUVWXYZ }
 {
  \exp_args:Nc \DeclareMathSymbol{varbb#1}{\mathord}{lettersA}{\int_eval:n { `#1+64 }}
 }
\exp_args:Nc \DeclareMathSymbol{varbbk}{\mathord}{lettersA}{169}
\ExplSyntaxOff

\begin{document}

$\mathbb{A}\mathbb{B}\mathbb{C}\mathbb{R}\mathbb{Z}\mathbb{k}$

$\mathbb{ABCDEFGHIJKLMNOPQRSTUVWXYZk}$

\end{document}

enter image description here