unicode-math + 粗体直立符号 + 粗体抑扬符

unicode-math + 粗体直立符号 + 粗体抑扬符

我的目标是编写一个\unitvector命令,生成带有粗体抑扬符的粗体直立符号。这是我的 MWE:

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Bonum}
\setmathfont{texgyrebonum-math.otf}

\newcommand\unitvectorA[1]{\symbfup{\hat{#1}}}
\newcommand\unitvectorB[1]{\text{\textbf{\^{#1}}}}

\begin{document}
% Text versions for reference.
\textbf{\^{x}}
\textbf{\^{ρ}}

% First attempt: circumflex accent is not bold.
$\unitvectorA{x}$
$\unitvectorA{\rho}$

% Second attempt: missing \rho.
$\unitvectorB{x}$
$\unitvectorB{\rho}$
\end{document}

输出如下:

在此处输入图片描述

这里还有其他问题与此问题类似,但据我所知,它们要么不使用unicode-math,要么不提供粗体抑扬符。(如果我错了,我很想知道。)

我相信我明白为什么\symbfup不做“正确”的事情:Unicode 没有定义“数学粗体抑扬符”(这对我来说似乎是一个疏忽)。我也没有使用具有相应粗体数学字体的数学字体(例如 XITS Math)的奢侈,我相信这也可以提供一种解决方案。因此,尝试使用\text它的解决方法不幸的是,它根本不是解决方法,因为它不起作用。

我尝试以某种巧妙的方式使用该range功能来unicode-math切换字体,但我未能找到有效的方法。

更新:

我修改了马塞尔·克鲁格的通过将 XITS Math Bold 替换为 TeX Gyre Bonum Bold 来回答,结果如下:

在此处输入图片描述

似乎应该有一种方法可以改变重音,但我还不明白它是如何\Umathaccent工作的。

答案1

您可以直接跳过unicode-math并加载XITS Math Bold为 LaTeX Symbol 字体:

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Bonum}
\setmathfont{texgyrebonum-math.otf}

% We could use fontspec to load these but I am not a big fontspec fan:
\DeclareFontFamily{TU}{xitsmath}{}
\DeclareFontShape{TU}{xitsmath}{bx}{n}
  {<-> \UnicodeFontName{XITS Math Bold}{mode=base;script=math;language=DFLT}}{}

% Declare \symboldaccent:
\DeclareSymbolFont{boldaccents}{TU}{xitsmath}{bx}{n}
% Now we just need a nice name for the accent: (If you prefer a `\widehat`, just omit `fixed`)
\newcommand\boldhat{\Umathaccent fixed 7\symboldaccents"0302\relax}

\newcommand\unitvector[1]{\symbfup{\boldhat{#1}}}

% If we are using LuaTeX, we can also modify our text font to include the placement information for math accents:
\directlua{
  fonts.constructors.features.otf.register{
    name = 'mathcircumflex',
    description = 'Add math accent treatment to circumflex',
    manipulators = {
      base = function(tfm, v)
        tfm.nomath = false
        tfm.characters[0x2C6].top_accent = tfm.characters[0x2C6].width/2
      end
    }
  }
}
\DeclareFontFamily{TU}{bonumsemimath}{}
\DeclareFontShape{TU}{bonumsemimath}{bx}{n}
{<-> \UnicodeFontName{TeX Gyre Bonum Bold}{mode=base;+mathcircumflex;script=DFLT;language=DFLT}}{}
\DeclareSymbolFont{boldtextaccents}{TU}{bonumsemimath}{bx}{n}
\newcommand\boldtexthat{\Umathaccent fixed 7\symboldtextaccents"02C6\relax}

\newcommand\unitvectorB[1]{\symbfup{\boldtexthat{#1}}}

\begin{document}
% Text versions for reference.
\textbf{\^{x}}
\textbf{\^{ρ}}

$\unitvector{x}$
$\unitvector{\rho}$

$\unitvectorB{x}$
$\unitvectorB{\rho}$
\end{document}

在此处输入图片描述

答案2

仅适用于lualatexxelatex您可以使用FakeBold选项。

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmainfont{TeX Gyre Bonum}
\setmathfont{texgyrebonum-math.otf}
\usepackage[bold=0.8]{xfakebold}
\newcommand\unitvectorA[1]{\setBold\ensuremath{\hat{#1}}\unsetBold}
\begin{document}
    \unitvectorA{x} $\hat{x}$
    \unitvectorA{\rho}$\hat{\rho}$      
\end{document}

在此处输入图片描述

相关内容