有没有办法在加载包时将文本数字(旧式数字)设置为文本的默认值tgpagella
?如果我使用 下的 .otf 文件XeLaTeX
,我会得到它们,但我想在运行 时获得它们pdfLaTeX
。
答案1
TeX Gyre Pagella 中的旧式数字
TeX Gyre 字体包含四组数字。以 为前缀的名称/
是 PostScript 字形名称:
/zero
,,,……宽度/one
相等 的“正常”数字,适用于表格。/two
/zero.prop
,,,……具有比例宽度/one.prop
的 “正常”数字。/two.prop
/zero.taboldstyle
,,,……宽度/one.taboldstyle
相等 的旧式数字,适用于表格。/two.taboldstyle
/zero.oldstyle
,,,…具有比例宽度/one.oldstyle
的 旧式数字。/two.oldstyle
手动方式
在 LaTeX 的字体设置中,只有等宽的数字可用。“默认”是除小型大写字母外等宽的“普通”数字。您可以通过包textcomp
和\oldstylenums
或小型大写字母手动获取旧式数字:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{tgpagella}
\begin{document}
0123456789\textdollar\textcent
\oldstylenums{0123456789}\textdollaroldstyle\textcentoldstyle
\textsc{0123456789\textdollar}
\end{document}
修补编码
在字体映射文件中qpl-ec.map
,qpl.map
或者上面例子中使用的pdftex.map
字体。映射行是:ec-qplr
TeXGyrePagella-Regular "encqec ReEncodeFont" <q-ec.enc <qplr.pfb
编码文件q-ec.enc
定义字体编码槽中使用哪些字形:
% [some coment lines]
/encqenc [
/grave
/acute
...
/zero
/one
...
/nine
...
] def
我们可以在那里替换数字的字形名称。让我们将文件复制到
q-ec-taboldstyle.enc
。在那里,数字被带有后缀的变体替换.taboldstyle
。
现在 pdfTeX 允许使用在字体使用前应使用的 来替换地图线\pdfmapline
。例如,这可以在 TeX 文档的开头完成:
\pdfmapline{=ec-qplr TeXGyrePagella-Regular "encqec ReEncodeFont" <q-ec-taboldstyle.enc <qplr.pfb}
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tgpagella}
\begin{document}
0123456789
\end{document}
/<num>.taboldstyle
然后使用而不是来设置数字/<num>
:
此技巧不会改变 LaTeX/TeX 的字体。字形度量(TFM
文件)不会改变。因为我们使用了taboldstyle
而不是oldstyle
,所以字形的宽度保持不变。但是,一些旧式数字具有 LaTeX 或 TeX 看不到的深度。
新TFM
文件
如果需要正确的字形指标,那么我们还需要新TFM
文件。在我们的例子中,我们有ec-qplr.tfm
(基本名称是上面地图行中的第一个条目)。可以使用以下方法将其转换为更人性化的形式tftopl
:
tftopl ec-qplr.tfm ec-qplr.pl
该文件ec-qplr.tfm
需要正确的目录。kpsewhich
可以使用该程序来查找该文件。在 Linux 中,可以组合使用:
tftopl `kpsewhich ec-qplr.tfm` ec-qplr.pl
中0
、1
和 的字符度量:7
ec-qplr.pl
(CHARACTER C 0
(CHARWD R 0.5)
(CHARHT R 0.6775)
)
(CHARACTER C 1
(CHARWD R 0.5)
(CHARHT R 0.6775)
)
...
(CHARACTER C 7
(CHARWD R 0.5)
(CHARHT R 0.6775)
(CHARIC R 0.025)
)
CHARWD
、、、CHARHT
并指定字符的高度、宽度、深度和斜体校正CHARDP
。CHARIC
现在需要用数字的值替换这些值taboldstyle
。幸运的是,它们可以在TS1
编码或文件中找到。或者,也可以使用ts1-qplr.tfm
小写字体。我们再次使用将文件转换为可读格式。 、 、的结果为:ec-qplr-sc.tfm
.tfm
.pl
tftopl
0
1
7
(CHARACTER C 0
(CHARWD R 0.5)
(CHARHT R 0.464)
(CHARDP R 0.0164995)
(CHARIC R 0.003)
)
(CHARACTER C 1
(CHARWD R 0.5)
(CHARHT R 0.4904995)
(CHARDP R 0.0075)
)
...
(CHARACTER C 7
(CHARWD R 0.5)
(CHARHT R 0.464)
(CHARDP R 0.237999)
(CHARIC R 0.025)
)
这样,我们就创建了一个ec-qplr-taboldstyle.pl
包含旧式数字更改后的度量数据的文件。该.tfm
文件由以下方式生成pltotf
:
pltotf ec-qplr-taboldstyle.pl
结果:ec-qplr-taboldstyle.tfm
。
备注:TFM 文件不适用于非比例数字。因此,需要以某种方式猜测度量。这些AFM
文件包含字形边界框,其中包括侧边距和 TeX 度量数据未考虑的类似内容。但至少它们可以提供提示。
现在已添加此字体,但不会替换旧条目ec-qplr
:
\pdfmapline{+ec-qplr-taboldstyle TeXGyrePagella-Regular "encqec ReEncodeFont" <q-ec-taboldstyle.enc <qplr.pfb}
下一步,我们需要一个新的 LaTeX 字体定义文件和一个新的 LaTeX 字体名称。我们使用qplrtosn
。然后我们将旧.fd
文件复制到新文件,例如 Linux:
cp `kpsewhich t1qplr.fd` t1qplrtosn.fd
新文件需要进行一些更改:
- 文件名为
\ProvidesFile
, - 的描述文本中的字体名称
\ProvidesFile
, - 日期在
\ProvidesFile
, - 字体系列名称
qplr
被替换为qplrtosn
(的第二个参数\DeclareFont...
), TFM
名称ec-qplr
被替换为ec-qplr-taboldstyle
,- 然后如果我们想在同一个文档中使用两种字体系列,则内部宏前缀
\qpl@
为\qpltosn@
TFM
为其他字体创建新文件也是有意义的。
最后,我们需要一个tgpagella-tosn.sty
包含以下内容的新包文件tgpagella.sty
:
\ProvidesPackage
,- 内部前缀,
- 字体系列名称,
答案2
如果你只是想要一个简单的方法来获得一个带有文本图形和真正的小型大写字母的 Palatino 版本,你可以使用\usepackage[osf,sc]{mathpazo}
(如在 tufte-latex 和 classicthesis 类中),但这在技术上URW 帕拉迪奥而不是 TeX Gyre Pagella。