由于各种原因,我正在使用该fontspec
包。
但是,我还想使用 Palatino 作为文档的主要字体,并且想将它与小型大写字母和旧式数字一起使用。
所以我有四个要求:
fontspec
,- 帕拉蒂诺,
- 小帽子,
- 旧式图形(到处都有,不仅仅通过选择
\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
符号略有不同。不过,在我看来,数学符号肯定(尽管微妙)更加精致。fontspec
mathpazo
下面的代码向您展示了各种组合所带来的后果和权衡。尝试注释掉该\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}