字体规格:Palatino 字体,带小写字母和旧式数字

字体规格:Palatino 字体,带小写字母和旧式数字

由于各种原因,我正在使用该fontspec包。

但是,我还想使用 Palatino 作为文档的主要字体,并且想将它与小型大写字母和旧式数字一起使用。

所以我有四个要求:

  1. fontspec
  2. 帕拉蒂诺,
  3. 小帽子,
  4. 旧式图形(到处都有,不仅仅通过选择\oldstylenums)。

这四个功能中的任意三个都可以很好地协同工作。但我无法在同一个文档中同时使用这四个功能。

事实上,使用\usepackage[osf]{mathpazo},我得到了漂亮的小写字母和小写数字。但是,一旦我\usepackage{fontspec},旧式数字就不再起作用,即使我不选择字体。

现在,我可能想说\usemainfont[Numbers=OldStyle]{Palatino},但这并不奏效:数字保持原样。此外,小写字母现在不再起作用(大概是因为我没有包含旧式数字字形的昂贵而闪亮的 Palatino 版本 - 只有mathpazo当软件包“作弊”并选择字体系列pplj时,它才有效)。

我该如何让它工作?有没有办法即使在使用其他字体时也能明确选择pplj主文本(\rmfamily) ?fontspec

梅威瑟:

\documentclass{article}

\usepackage[osf]{mathpazo}
\usepackage{fontspec}

%\setmainfont[Numbers=OldStyle]{Palatino}

\begin{document}
\textsc{This is a test} 0123
\end{document}

答案1

您需要一个具有适当 OpenType 支持的 Palatino,或者您可以使用包含在 TeXlive 中的 TeX Gyre Pagella(这是 Zapf 的真正的 Palatino,并由 GUST 进一步开放类型化)。

\documentclass{article}
\usepackage{fontspec}

\setmainfont[Numbers=OldStyle]{TeX Gyre Pagella}

\begin{document}
Text 12345.
\end{document}

答案2

我更喜欢 Khaled 的方法,但这是针对您更普遍的问题的答案。如果您专门在字体编码之间切换,则可以将 TeX 时代编码的字体与 unicode 字体混合使用:

\documentclass{article}
\usepackage{fontspec}
\newfontfamily\foo{Helvetica}
\usepackage[sc,osf]{mathpazo}
\usepackage[T1]{fontenc}
\begin{document}
Text 12345. {\fontencoding{EU1}\foo fontspec font}
\end{document}

现在我写出这个例子,我突然想到\newfontfamily应该包括关于切换字体编码的行。这在这次提交在 Github 上。

答案3

这个答案不应该影响 Khaled 或 Will 的深刻回答。它的目的只是将他们的想法整合在一起,提供\oldstylenums他们忽略的解决方案,提出数学问题(因为你最初已经提到了mathpazo),并引入一些字体命名代码来帮助你形象化你的问题,尤其是在编码方面。开始吧...

事实上,使用 \usepackage[osf]{mathpazo},我得到了漂亮的小写字母和小写数字。但是,只要我使用 \usepackage{fontspec},旧式数字就不再起作用,即使我没有选择字体。

首先,尝试添加(\fontname\the\font)正文。如果这样做,您很快就会发现已将fontspec正文设置为拉丁现代字体(非 OSF)。您可能会问,为什么?好问题,去问 Will。无论如何,您需要(重新)加载兼容的 Palatino 字体。根据 Khaled 的回答,\setmainfont[Numbers=OldStyle]{TeX Gyre Pagella}可以解决问题。它的字体与 非常相似ppl。现在一切都可以正常工作,但不幸的是这会中断\oldstylenums{...}(由于 waymathpazo已重新定义\oldstylenums,XeTeX 会抛出“字体形状 `EU1/pplj/m/n' 未定义”警告)。这是我开始解决您的问题时遇到的问题。

您的问题中四点说得非常清楚。不太清楚的是,您是否还要求:

  • \oldstylenums{...}必须有空(并且能工作)
  • mathpazo是绝对必要的,因为它的数学符号比其他帕拉蒂诺家族的数学符号更漂亮

在当前配置下使用的问题\oldstylenums在于它会恢复打印 Latin Modern(与 Palatino 非常不匹配)。第二点可能没什么大不了的 -数学符号与 TeX Gyre Pagella 提供的mathpazo符号略有不同。不过,在我看来,数学符号肯定(尽管微妙)更加精致。fontspecmathpazo

下面的代码向您展示了各种组合所带来的后果和权衡。尝试注释掉该\usepackage[sc,osf]{mathpazo}行,或者,注释掉我的新定义,以\oldstylenums查看这些效果。我添加了一些字体命名代码和一个\liningstylenums命令来帮助您做出选择。

\documentclass{article}
\usepackage[margin=0.5in]{geometry}  % there are some pretty wide hboxes below

\usepackage{amsmath}                 % needed for the example below
\usepackage[sc,osf]{mathpazo}        % comment this line in and out to see the
                                     % differences in the displayed math

\usepackage{fontspec}
\setmainfont[Numbers=OldStyle]{TeX Gyre Pagella}
\newfontfamily\altfont[Numbers=OldStyle]{TeX Gyre Bonum}

\renewcommand*\oldstylenums[1]{{\fontencoding{T1}\fontfamily{pplj}\selectfont #1 (\fontname\the\font)}}
\newcommand*\liningstylenums[1]{{\fontencoding{T1}\fontfamily{pplx}\selectfont #1 (\fontname\the\font)}}

\newcommand\printstuff{
  Plain text: abcdefghijk ABCDEFGHIJK (\fontname\the\font)\par
  \textsc{Small caps: abcdefghijk ABCDEFGHIJK (\fontname\the\font)}\par
  Plain figures: 0123456789 (\fontname\the\font)\par
  Old style figures: \oldstylenums{0123456789}\par
  Lining figures: \liningstylenums{0123456789}\par
  \vspace{\baselineskip}
}

\begin{document}
Palatino...\par\printstuff
Here's some math:
\[\frac{1}{2\pi i}\int_\gamma f = \sum_{k=1}^m n(\gamma;a_k) \text{Res}(f;a_k).
\qquad (\fontname\the\font)\]\par
{\altfont Alternative font...\par\printstuff}
Palatino...\par\printstuff
\end{document}

相关内容