lualatex 数字样式

lualatex 数字样式

我正在使用 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}

在此处输入图片描述

答案2

\documentclass{article}
\usepackage{unicode-math}
\usepackage{libertine}
\setmathfont{Neo Euler}
\setmathfont{Linux Libertine O}[range=up/{num}]% 0..9 from Libertine

\begin{document}    
ABC$0123$0123abc

\setmathfont{Neo Euler}% overwrite old definition
ABC$0123$0123abc    
\end{document}

在此处输入图片描述

相关内容