考虑以下代码:
% !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
。)
要回答你提出的字面问题,你需要使用\setmathrm
从fontspec
,软件包中包含的内容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
,也不应加载amsfonts
和amssymb
如果您要加载 OpenType 数学字体。