XeLaTeX:对于没有粗体字体的字体,在数学粗体模式下强制使用内衬数字(而不是旧式数字)

XeLaTeX:对于没有粗体字体的字体,在数学粗体模式下强制使用内衬数字(而不是旧式数字)

考虑以下代码:

% !TeX program = xelatex
\documentclass[12pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{amsmath,amsthm,amssymb,amsfonts}

% STIX Two font
\usepackage[math-style=ISO]{unicode-math}
\usepackage{xltxtra}
\setmainfont[Numbers=OldStyle]{STIX Two Text}
\setmathfont{STIX Two Math}

\begin{document}

\begin{tabular}{lll}
    text   & A = 1              & \textit{B = 0}          \\
    textbf & \textbf{A = 1}     & \textbf{\textit{B = 0}} \\
    math   & $A = 1$            & $\mathit{B = 0}$        \\
    mathbf & $\mathbf{A = 1}$   & $\mathbf{B = 0}$        \\
    symbf  & $\symbf{A = 1}$    & $\symbf{B = 0}$
\end{tabular}

\end{document}

结果:

在此处输入图片描述

如您所见,在正常的数学环境中(即 之间$$),数字是直线样式(参见第 3 行)。但如果数字在 或 中\mathbf\mathit则它们具有旧样式(参见第 3 行和第 4 行),这对我来说很丑陋。我猜原因是 STIX Two Math 字体没有粗体或斜体。

我可以使用\symbf\symit来代替,但是如果我切换回 LaTeX(而不是 XeLaTeX),我的代码将无效。

我的问题是:如何强制\mathbf使用衬线式数字?(仅限数字,不含字母。)

非常感谢您的帮助!

答案1

一种解决方案是使用\symbfup而不是\symbf。这样可以得到粗体直立符号,而不是 ISO 样式的粗体斜体。这可能就是您想要的。(如果您一直想使用直立字母,请考虑设置math-style为 以外的其他值ISO。)

要回答你提出的字面问题,你需要使用\setmathrmfontspec软件包中包含的内容unicode-math。为其提供BoldFont=BoldFeatures=选项,就像 一样\newfontfamily

% !TeX program = xelatex
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}

% STIX Two font
\usepackage[math-style=ISO]{unicode-math}
\setmainfont[Numbers=OldStyle]{STIX Two Text}
\setmathfont{STIX Two Math}
\setmathrm{STIX Two Text}[
  UprightFeatures={Numbers=OldStyle},
  BoldFont = STIX Two Text Bold,
  BoldFeatures={Numbers=Lining}]
\setboldmathrm{STIX Two Text Bold}[Numbers=Lining]

\begin{document}

\begin{tabular}{lll}
    text   & A = 1              & \textit{B = 0}          \\
    textbf & \textbf{A = 1}     & \textbf{\textit{B = 0}} \\
    math   & $A = 1$            & $\mathit{B = 0}$        \\
    mathbf & $\mathbf{A = 1}$   & $\mathbf{B = 0}$        \\
    symbf  & $\symbf{A = 1}$    & $\symbf{B = 0}$
\end{tabular}

\end{document}

示例文本

我继续设置\setboldmathrm\mathrm粗体数学字体)。您将收到一些无害的警告消息,说明字体不支持大写数字。您可以通过删除BoldFeatures={Numbers=Lining}和来抑制这些消息[Numbers=Lining]

我还删除了几个您未在本示例中使用的包。请注意:您不应加载inputenc支持 的 TeX 引擎unicode-math,也不应加载amsfontsamssymb如果您要加载 OpenType 数学字体。

相关内容