我正在使用fontspec
软件包。我很好奇是否有一种方法可以自动默认将数字设置为小写字母,类似于通过软件包选项或LuaLaTeX
默认将数字设置为 OldStyle/Lowercasefontspec
Numbers=OldStyle
Numbers=Lowercase
注意:并非所有字体都支持小写数字。我在 MWE 中使用了支持小写数字的免费字体。
我问这个问题的动机是,我目前正在测试用小写字母排版数字是否比通常的大写等宽数字更容易阅读或更美观。如果有一种更简单的方法输出小写字母数字就太好了。
\documentclass{article}
\newcommand{\alphabet}{abcdefghijklmnopqrstuvwxyz}
\newcommand{\digits}{0123456789}
\usepackage{fontspec}
\setmainfont{Source Serif Pro}%Available for free on Google Fonts.
[
%Numbers=OldStyle%
%Numbers=Lowercase%
]
\begin{document}
\textbf{Regular letters and digits:}
\par
\alphabet\quad\digits
\par
\textbf{Small caps letters and digits:}
\par
\textsc{\alphabet\quad\digits}
\par
\textbf{Regular letters and Oldstyle digits:}
\par
\alphabet\quad\oldstylenums{\digits}
\end{document}
编辑 2:如果可能的话,我正在寻找一种解决方案,使数字显示为小写字母默认情况下无需使用\textsc
或任何其他文本内宏。因此,\textsc{1234}
和1234
应该看起来相同。当然,如果这不可能,我总是可以依靠制作文本内宏。
答案1
因此,您想要的是与小型大写字母大小匹配的数字(据我所知,小型大写字母实际上并没有名称,因为“小型大写字母”这一术语通常仅用于字母),但您希望以这种样式打印它们,而不管文本周围的样式如何。
fontspec
您可以使用选项选择特定的 OpenType 功能,RawFeature=+xxxx
其中xxxx
是相关 OpenType 功能的缩写。因此,您可以选择RawFeature=+smcp
启用小型大写字母。遗憾的是,Source Sans Pro 不包含允许您仅选择这些小数字而不影响其他字母的功能,另一方面,似乎无法直接使用 仅为数字选择此类功能fontspec
。
但是,您可以使用fonts.handlers.otf.addfeature
自己的自定义 OpenType 功能来使用和增强字体,然后将其与 一起使用fontspec
。在下面的例子中,我创建了用小型大写字母变体替换数字字形的功能xnum
(不过,您需要在字体中查找相关的字形名称):
\documentclass{article}
\usepackage{fontspec}
\directlua{
fonts.handlers.otf.addfeature {
name = "xnum",
type = "substitution",
data = {
["zero"] = "zero.sc",
["one"] = "one.sc",
["two"] = "two.sc",
["three"] = "three.sc",
["four"] = "four.sc",
["five"] = "five.sc",
["six"] = "six.sc",
["seven"] = "seven.sc",
["eight"] = "eight.sc",
["nine"] = "nine.sc",
},
}
}
\setmainfont[RawFeature=+xnum]{Source Serif Pro}
\newcommand{\alphabet}{abcdefghijklmnopqrstuvwxyz}
\newcommand{\digits}{0123456789}
\begin{document}
\textbf{Regular letters and digits:}
\par
\alphabet\quad\digits
\end{document}
另一种方法是combofont
使用同名的包创建一个(基于包提供的机制luaotfload
)。需要注意的是,添加诸如smcp
第二种字体的功能只有在设置时才有效mode=base
。
\documentclass{article}
\usepackage{combofont}
\setupcombofont{sourceserifpro-regular}{
{name:Source Serif Pro-Regular:mode=base;language=DFLT;+tlig} at #1pt,
{name:Source Serif Pro-Regular:mode=base;language=DFLT;+tlig;+smcp} at #1pt
}{
{} ,
0x30-0x39
}
\setupcombofont{sourceserifpro-bold}{
{name:Source Serif Pro-Bold:mode=base;language=DFLT;+tlig} at #1pt,
{name:Source Serif Pro-Bold:mode=base;language=DFLT;+tlig;+smcp} at #1pt
}{
{} ,
0x30-0x39
}
\DeclareFontFamily{TU}{sourceserifpro-combo}{}
\DeclareFontShape {TU}{sourceserifpro-combo}{m}{n} {<->combo*sourceserifpro-regular}{}
\DeclareFontShape {TU}{sourceserifpro-combo}{bx}{n}{<->combo*sourceserifpro-bold}{}
\newcommand{\alphabet}{abcdefghijklmnopqrstuvwxyz}
\newcommand{\digits}{0123456789}
\begin{document}
\fontfamily{sourceserifpro-combo}\selectfont
\textbf{Regular letters and digits:}
\par
\alphabet\quad\digits
\end{document}
输出与上面相同。