在 fontspec 中設定小型大寫字母後備字體

在 fontspec 中設定小型大寫字母後備字體

我的 Mac 中的 Times New Roman 字體沒有小型大寫字母形狀。所以我想將 TeX Gyre Termes 設定為小型大寫字母後備字體。

使用 TeX Gyre Termes 作為主要字體

\documentclass{article}
\usepackage{fontspec}
\setmainfont{texgyretermes}%
  [
    Extension      = .otf,
    UprightFont    = *-regular,
    BoldFont       = *-bold,
    ItalicFont     = *-italic,
    BoldItalicFont = *-bolditalic
  ]
\begin{document}

hello
\textsc{hello}
\textbf{\textsc{hello}}
\textit{\textsc{hello}}

\end{document}

結果是令人滿意的,如下所示:

在此輸入影像描述

使用Times New Roman作為主要字體

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\begin{document}

hello
\textsc{hello}
\textbf{\textsc{hello}}
\textit{\textsc{hello}}

\end{document}

如日誌所示,字體 shape m/scb/scm/scit全部遺失。

在此輸入影像描述

使用 TeX Gyre Termes 作為後備

根據fontspec手冊,我們可以設定小型大寫字母回退,如下所示:

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}%
  [
    SmallCapsFont     = TeX Gyre Termes,
    SmallCapsFeatures = {Letters=SmallCaps}
  ]
\begin{document}

hello
\textsc{hello}
\textbf{\textsc{hello}}
\textit{\textsc{hello}}

\end{document}

上面的例子只能透過編譯lualatex(因為macOS使用者在使用時不能透過字體名稱使用texmf樹中的字體xelatex)。然而,lualatex也無法給出令人滿意的結果:

在此輸入影像描述

在我的系統中安裝 TeX Gyre Termes 字體後,xelatex也可以使用,但結果與上面的螢幕截圖相同。

問題

無需將 TeX Gyre Termes 安裝到系統中,如何在macOS 使用者xelatexlualatexmacOS 使用者下正確設定小型大寫字母後備字體?

答案1

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}%
  [
   BoldFeatures = 
     {SmallCapsFont={TeX Gyre Termes Bold},
      SmallCapsFeatures = {Letters=SmallCaps}} ,
   ItalicFeatures = 
    {SmallCapsFont={TeX Gyre Termes Italic},
     SmallCapsFeatures = {Letters=SmallCaps}} ,
  ]
\begin{document}

hello
\textsc{hello}
\textbf{\textsc{hello}}
\textit{\textsc{hello}}
\textbf{\textit{\textsc{hello}}}
\end{document}

在此輸入影像描述

在無法透過檔案名稱找到 texmf 樹中的字體的系統中,這可以工作(未經測試)

\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}%
  [
   BoldFeatures = 
     {SmallCapsFont={texgyretermes-bold},
      SmallCapsFeatures = {Extension=.otf,Letters=SmallCaps}} ,
   ItalicFeatures = 
    {SmallCapsFont={texgyretermes-italic},
     SmallCapsFeatures = {Extension=.otf,Letters=SmallCaps}} ,
  ]
\begin{document}

hello
\textsc{hello}
\textbf{\textsc{hello}}
\textit{\textsc{hello}}
\textbf{\textit{\textsc{hello}}}
\end{document}

相關內容