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 文档中)。
更新对 Adobe 字体进行更多实验。我刚刚对 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... 线。
- 我更喜欢使用字体名称而不是字体文件名—— 它看起来不那么脆弱(一旦你找到正确的名字!)。