![旧式数字、粗体小写字母和 Palatino](https://linux22.com/image/266918/%E6%97%A7%E5%BC%8F%E6%95%B0%E5%AD%97%E3%80%81%E7%B2%97%E4%BD%93%E5%B0%8F%E5%86%99%E5%AD%97%E6%AF%8D%E5%92%8C%20Palatino.png)
我希望我的文档中能够包含以下所有三项内容:
- Palatino 字体
- 大胆的和小帽子
- 古式人物
我目前正在使用mathpazo
选项[osf]
来获取 1 和 3,但不是 2。根据使用 mathpazo 加粗小写字母[osf]
,如果我不指定选项,我可以得到 1 和 2(但得不到 3) 。
看来该mathpazo
软件包实际上无法同时支持上述所有三个功能。有人知道实现 1-3 的方法或替代软件包吗?
答案1
您可以尝试使用最近发布的newpxtext
和newpxmath
包。在下面的 MWE 中,发出命令\useosf
后加载与数学相关的软件包允许使用常规和粗体旧式数字文本模式,而在数学模式下将使用带衬线的数字。小型大写字母有粗体(当然还有常规粗体)。
2018 年 4 月更新: 这newpxtext
和newpxmath
在过去五年中,软件包已经发生了很大变化。仍然可以通过运行 来启用旧式数字和小型大写字母。但根据软件包的用户指南,首选方法是在加载软件包时\useosf
指定选项。osf
newpxtext
\documentclass{article}
\usepackage{newpxtext,newpxmath}
\useosf % old-style figures in text, not in math
\linespread{1.05} % Palatino needs a bit more leading than CM
\begin{document}
0123456789, {\bfseries 0123456789}, {\itshape 0123456789}, {\bfseries\itshape 0123456789}
\textsc{Once upon a time, \dots}
{\bfseries \scshape Once upon a time, \dots}
Some math expressions: $1+1=2$, $\int_0^1 \mathrm{d}x = 1$
\end{document}
答案2
这更多地被认为是编年史家在首先写出错误答案并寻求解决办法后的职责,而不是对于该问题的有用补充。
除了 Mico 的回答之外:
如果加载第一mathpazo
和tgpagella
第二个,那么tgpagella
只会覆盖的文本相关定义mathpazo
,但不会覆盖数学部分。
这种至少是意料之外的行为,如果不是错误的话,tgpagella
在小型大写模式下产生旧式数字,但在其他模式下产生衬线数字,可以借助newenviron
和进行更改xstring
(见下文注释):
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{mathpazo}
\usepackage{tgpagella}
\usepackage{textcomp} % for "\text...oldstyle" commands
\usepackage{newenviron,xstring}
\newenviron{osf}{ % automatic definition of "\osfbody"
\expandarg\StrSubstitute{\osfbody}{1}{\textoneoldstyle}[\osfI]
\StrSubstitute{\osfI}{2}{\texttwooldstyle}[\osfII]
\StrSubstitute{\osfII}{3}{\textthreeoldstyle}[\osfIII]
\StrSubstitute{\osfIII}{4}{\textfouroldstyle}[\osfIV]
\StrSubstitute{\osfIV}{5}{\textfiveoldstyle}[\osfV]
\StrSubstitute{\osfV}{6}{\textsixoldstyle}[\osfVI]
\StrSubstitute{\osfVI}{7}{\textsevenoldstyle}[\osfVII]
\StrSubstitute{\osfVII}{8}{\texteightoldstyle}[\osfVIII]
\StrSubstitute{\osfVIII}{9}{\textnineoldstyle}[\osfIX]
}{
\expandarg\StrSubstitute{\osfIX}{0}{\textzerooldstyle} %could be set into start code as well!
}
\begin{document}
\textsc{\TeX\ Gyre Pagella} -- a \textsc{Palatino} clone.
1234567890 glyphs in \TeX\ Gyre Pagella.
\textoneoldstyle\texttwooldstyle\textthreeoldstyle\textfouroldstyle
\textfiveoldstyle\textsixoldstyle\textsevenoldstyle\texteightoldstyle
\textnineoldstyle\textzerooldstyle\ glyphs in \TeX\ Gyre Pagella.
\begin{osf}
1234567890 glyphs in \TeX\ Gyre Pagella (1234567890 times).
$(1 + 2) * 34 - 5 - 6 + 7 - 8 = 90$ %produces warnings
\end{osf}
\scshape
1234567890 Small Caps in \TeX\ Gyre Pagella.
\bfseries
1234567890 Small Caps in \TeX\ Gyre Pagella.
$(1 + 2) * 34 - 5 - 6 + 7 - 8 = 90$
\end{document}
所有 TeX Gyre 字体示例本身都使用
\textcomp
旧式图形的命令。我使用它是
newenviron
因为它可以嵌套,因为最小的工作示例可能environ
就足够了(参见使用 \BODY ( environment 包) 的嵌套环境有什么问题?)。请注意,环境中的数学模式
osf
会产生警告。我没有测试过这个,但是将环境应用到整个文档应该会显著增加编译时间。
答案3
在 LuaLaTeX 或 XeLaTeX 中,fontspec
您可以使用选项加载任何字体Numbers=OldStyle
,并使用\oldstylenums
和\liningnums
命令。TeX Gyre Pagella 应该可以直接使用\setmainfont[Ligatures={Common,Rare,TeX}, Numbers=OldStyle]{TeX Gyre Pagella}
。任何最近的 OpenType 版本的 Palatino 也是如此(尽管一些旧版本的 Palatino Linotype 存在小写字母i
带点的错误。)
然后,您可以加载 Asana Math 或 TeX Gyre Pagella Math unicode-math
。