将数字的 `symbfit` 映射到 `symbf`

将数字的 `symbfit` 映射到 `symbf`

目标是使用命令使矢量变为粗体斜体\symbfitLucidaBrightMathOT.otf

但是,\symbfit对于数字不起作用,如下例所示。

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont[]{LucidaBrightMathOT.otf}
\renewcommand{\vec}[1]{\symbfit{#1}}
\begin{document}
\(x\), \(\vec{x}\)

\(0\), \(\vec{0}\), want: \(\symbf{0}\)
\end{document}

在此处输入图片描述

是否有可能以某种方式映射symbfitsymbf数字?例如,使用rangefontspec 选项?

答案1

按情况选择。

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}

\ExplSyntaxOn
\AtBeginDocument{\RenewCommandCopy{\vec}{\schmidt_vec:n}}

\cs_new_protected:Nn \schmidt_vec:n
 {
  \str_case:nnF { #1 }
   {
    {0}{\symbf{0}}
    {1}{\symbf{1}}
    {2}{\symbf{2}}
    {3}{\symbf{3}}
    {4}{\symbf{4}}
    {5}{\symbf{5}}
    {6}{\symbf{6}}
    {7}{\symbf{7}}
    {8}{\symbf{8}}
    {9}{\symbf{9}}
   }
   {\symbfit{#1}}
 }

\ExplSyntaxOff

\begin{document}

\(x\), \(\vec{x}\)

\(0\), \(\vec{0}\), want: \(\symbf{0}\)

\end{document}

不过,我猜你实际上只希望 0 得到特殊处理。

在此处输入图片描述

相关内容