預設將數字設定為小型大寫字母

預設將數字設定為小型大寫字母

我正在使用fontspec帶有LuaLaTeX.我很好奇是否有一種方法可以預設自動設定小寫字母中的數字,類似於預設情況下透過套件選項設定 OldStyle/小寫字母中的fontspec數字Numbers=OldStyleNumbers=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}

編輯 1:我新增了一張顯示小寫字母數字的照片。 在此輸入影像描述

編輯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}

輸出與上面相同。

相關內容