为同一字体系列的所有字体选择光学尺寸

为同一字体系列的所有字体选择光学尺寸

XeTeX 和 LuaTeX 能够在提供字体时为其分配光学尺寸。在 XeTeX 或 LuaTex 无法正确分配光学尺寸的情况下,我可以指定它们,但仅限于常规字体,而不是斜体、粗体或粗斜体。我正在寻找一种方法来分配所有这些。

我使用的具体示例是针对 Minion Pro 的,并且我知道它有一个包,但我正在寻找一个通用解决方案,当再次出现类似问题时,我可以作为普通用户应用它。

这是MWE:

\documentclass[openleft,12pt]{memoir}
\usepackage{fontspec}
\setmainfont[ItalicFont={MinionPro-It},BoldFont={MinionPro-Bold},BoldItalicFont={MinionPro-BoldIt}]{Minion Pro}

\begin{document}
Regular\\
\textit{Italic}\\
\textbf{Bold}\\
\textit{\textbf{Bold Italic}}\
{\tiny tiny}\\     
{\normalsize normal}\\ 
{\Large Large}\\       
{\LARGE LARGE}\\       
{\HUGE HUGE}\\         

{\tiny{
  \textit{tiny italic} \textbf{tiny bold} \textbf{\textit{tiny bold italic}}}}\\
{\Large{
\textit{Large italic} \textbf{Large bold} \textbf{\textit{Large bold italic}}}}\\
{\HUGE{
\textit{HUGE italic} \textbf{HUGE bold} \textbf{\textit{HUGE bold italic}}}}

\end{document}

XeLaTeX 和 LuaLaTeX 都需要声明斜体、粗体和粗体斜体字体。之后,XeLaTeX 会使用本示例的所有正确光学尺寸。LuaLaTeX 不使用任何尺寸(除了之前的常规字体)。

如果您将该\setmainfont部分更改为如下所示:

\setmainfont[ItalicFont={MinionPro-It},BoldFont={MinionPro-Bold},BoldItalicFont={MinionPro-BoldIt},
SizeFeatures={ 
{Size={-8.4},OpticalSize=8},
{Size={8.4-13},OpticalSize=11},
{Size={13-19.9},OpticalSize=19},
{Size={19.9-},OpticalSize=72}}
]
{Minion Pro}

然后一切仍然适用于 XeLaTeX,现在光学尺寸(Caption、Regular、SubHeader、Display)可与 LuaLaTeX 一起使用常规字体,但不适用于斜体、粗体和粗斜体。

我原本以为也许是这样的:

\setmainfont[ItalicFont={MinionPro-It},BoldFont={MinionPro-Bold},BoldItalicFont={MinionPro-BoldIt},
SizeFeatures={ 
{Size={-8.4},OpticalSize=8,ItalicFont={MinionPro-ItCapt},
{Size={8.4-13},OpticalSize=11},
{Size={13-19.9},OpticalSize=19,ItalicFont={MinionPro-ItSubH},
{Size={19.9-},OpticalSize=72,ItalicFont={MinionPro-Disp}}} 
] 
{Minion Pro}

可以工作(显然要填充粗体和粗斜体字体以及其他大小),但会导致错误。我尝试了这个想法的几种变体,但都不起作用。我不断阅读 fontspec 和 luaotfload 手册,但找不到关于如何具体执行此操作的任何信息(我确实找到了对 ConTeXt 的“goodies”文件的引用,但无法弄清楚如何将其加载到 LuaLaTeX 文档中)。

更新对 Adob​​e 字体进行更多实验。我刚刚对 Garamond Premier Pro(也有光学尺寸)进行了同样的实验。结果类似。LuaLaTeX 不会加载 Italic/Bold/Bold Italic 的 Caption/Subheading/Display 版本,尽管它可以处理 Regular 字体,甚至无需指定光学尺寸(这要感谢我之前专门就 Garamond 提出类似问题时提供的修复)。XeLaTeX 会使用 SemiBoldItalic 版本来处理不同的光学尺寸,而不仅仅是 BoldItalic。

答案1

您必须指定字体每个功能。请参阅 fontspec 手册的第 5.1.2 节。

XeTeX MWE:

\documentclass[12pt]{memoir}
\usepackage{fontspec}
\setmainfont[%
    UprightFeatures={
        SizeFeatures={ 
            {Size={-8.4},Font=MinionPro-Capt},
            {Size={8.4-13},Font=MinionPro-Regular},
            {Size={13-19.9},Font=MinionPro-Subh},
            {Size={19.9-},Font=MinionPro-Disp}
        },
    },
    BoldFeatures={
        SizeFeatures={ 
            {Size={-8.4},Font=MinionPro-BoldCapt},
            {Size={8.4-13},Font=MinionPro-Bold},
            {Size={13-19.9},Font=MinionPro-BoldSubh},
            {Size={19.9-},Font=MinionPro-BoldDisp}
        },
    },
    ItalicFeatures={
        SizeFeatures={ 
            {Size={-8.4},Font=MinionPro-ItCapt},
            {Size={8.4-13},Font=MinionPro-It},
            {Size={13-19.9},Font=MinionPro-ItSubh},
            {Size={19.9-},Font=MinionPro-ItDisp}
            },
    },
    BoldItalicFeatures={
        SizeFeatures={ 
            {Size={-8.4},Font=MinionPro-BoldItCapt},
            {Size={8.4-13},Font=MinionPro-BoldIt},
            {Size={13-19.9},Font=MinionPro-BoldItSubh},
            {Size={19.9-},Font=MinionPro-BoldItDisp}
        },
    },
]
{Minion Pro}

\begin{document}
\noindent
Regular\\
\textit{Italic}\\
\textbf{Bold}\\
\textit{\textbf{Bold Italic}}\\

\noindent
{\tiny tiny}\\     
{\normalsize normal, not \textbf{\textit{HUGE bold italic}}}\\ 
{\Large Large}\\       
{\LARGE LARGE}\\       
{\HUGE HUGE}\\         

\noindent
{\tiny{
  \textit{tiny italic} \textbf{tiny bold} \textbf{\textit{tiny bold italic}}}}\\
{\Large{
\textit{Large italic} \textbf{Large bold} \textbf{\textit{Large bold italic}}}}\\
{\HUGE{
\noindent
HUGE\\
\textit{HUGE italic}\\
\textbf{HUGE bold}\\
\textbf{\textit{HUGE bold italic}}}}

\end{document}

答案2

使用 XeTeX 你可以不是需要多个尺寸声明,我相信你不应该使用 LuaTeX。在下文中,我将 @Ludenticus 的解决方案称为 (1),而我的解决方案称为 (2):

\documentclass[12pt,a5paper]{memoir}
\setlrmarginsandblock{1cm}{*}{1}
\usepackage{fontspec}
\setmainfont{Minion Pro}[%
    SizeFeatures={%
        {Size={-8.4},Font=* Caption},
        {Size={8.4-13},Font=*},
        {Size={13-19.9},Font=* Subhead},
        {Size={19.9-},Font=* Display}
    },
    BoldFont={* Bold},
    BoldItalicFont={* Bold Italic},
]
\setlength{\parindent}{0pt}
\nonzeroparskip
\begin{document}
\noindent
Regular
\textit{Italic}
\textbf{Bold}
\textit{\textbf{Bold Italic}}\par

\noindent
{\tiny tiny}\par     
{\normalsize normal, not \textbf{\textit{HUGE bold italic}}}\par 
{\Large Large}\par       
{\LARGE LARGE}\par       
{\HUGE HUGE}\par         

\noindent
{\tiny{
  \textit{tiny italic} \textbf{tiny bold} \textbf{\textit{tiny bold italic}}}}\par
{\Large{
\textit{Large italic} \textbf{Large bold} \textbf{\textit{Large bold italic}}}}\par
{\HUGE{
\noindent
HUGE\par
\textit{HUGE italic}\par
\textbf{HUGE bold}\par
\textbf{\textit{HUGE bold italic}}}}

\end{document}

diffpdf(1)和(2)用 XeLaTeX 处理后会生成视觉上相同的 PDF(与选项“外观”相比) 。

使用 LuaLaTeX 处理的 (1) 和 (2) 有所不同。(1) 中的 PDF 包含完整的嵌入字体 (16),而 (2) 中只有 10 个,缺少额外的光学尺寸。

笔记:

  • Minion Pro 的默认粗体关联不是“粗体”,而是“半粗体”。我猜这就是你搜索参数来更改两个粗体系列的原因。
  • 如果您对半粗体感到满意,那么您可以完全省略两条 Bold... 线。
  • 我更喜欢使用字体名称而不是字体文件名—— 它看起来不那么脆弱(一旦你找到正确的名字!)。

相关内容