我正在使用 LuaLaTeX 和 fontspec 以及 unicode-math 包。数字 0-9 并不总是以与字母数字相同的样式(斜体、粗体等)显示。由于名称可以包含多个字母,并且可以包含数字,因此数字样式应与字母样式相匹配。unicode-math 文档指出这是故意的——但没有提供更改它的方法。较旧的 mathspec 包可能(我不完全确定),但它明确指出与 unicode-math 不兼容。
如果我的普通字体或 sans 字体没有样式,那么后备是合理的。但是,如果有的话 - 就像我明确提供这些字体变体时一样,我期望,例如,当我使用 symsfit 或 mathsfit 时,我会得到我所要求的。如果我想要 symsfup 或 mathsfup,那么我会使用它。
有没有办法改变这种默认行为?
我认为这不需要示例,但根据要求,我添加了一个示例。我明确选择了 GNU 免费字体,以便我可以明确指定四种字体变体中的每一种。我可以在 FontLab 中打开这些字体并验证它们是否具有所需的字形变体。请注意,对于无衬线示例,斜体/粗体不仅不匹配,而且它实际上使用衬线字体进行替换
\documentclass{amsart}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont{FreeSerif}[
ItalicFont = FreeSerifItalic,
BoldFont = FreeSerifBold,
BoldItalicFont = FreeSerifBoldItalic]
\setsansfont{FreeSans}[
ItalicFont = FreeSansOblique,
BoldFont = FreeSansBold,
BoldItalicFont = FreeSansBoldOblique]
\begin{document}
\setlength{\parindent}{0em}
$ \mathsfup{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathsfup{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathsfup{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
$ \mathsfit{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathsfit{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathsfit{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
$ \mathbfsfup{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathbfsfup{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathbfsfup{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
$ \mathbfsfit{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathbfsfit{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathbfsfit{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
$ \mathup{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathup{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathup{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
$ \mathit{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathit{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathit{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
$ \mathbfup{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathbfup{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathbfup{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
$ \mathbfit{0 1 2 3 4 5 6 7 8 9} $ \\
$ \mathbfit{a b c d e f g h i j k l m n o p q r s t u v w x y z} $ \\
$ \mathbfit{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z} $ \\
\end{document}
答案1
unicode-math 仅将少数数学字母命令映射到文本字体(我认为整个列表是 mathrm/mathup、mathit、mathbf、mathsf 和 mathtt)。所以\mathsf
会使用它,但\mathsfup
不会\mathsfit
,他们反而使用来自 mathplane 的数学符号。由于那里没有斜体/倾斜数字,所以你会得到直立的数字。
如果您想要倾斜的“文本”数学字母,您将必须定义一个新的数学字母:
\documentclass{article}
\usepackage{unicode-math}
\setsansfont{FreeSans}
\setmathfontface\mymathsfit{FreeSansOblique}
\begin{document}
\noindent\textsf{0aA} text\\
\textsf{\textsl{0aA}} text, slanted\\
$ \mathsf{0aA} $ mathsf \\
$ \mathsfup{0aA} $ mathsfup\\
$ \mymathsfit{0aA} $ mymathsfit
\end{document}