我的目标是编写一个\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
仅适用于lualatex
。xelatex
您可以使用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}