包装 tgpagella 和文本图片

包装 tgpagella 和文本图片

有没有办法在加载包时将文本数字(旧式数字)设置为文本的默认值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.mapqpl.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>

0123456789

此技巧不会改变 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

01和 的字符度量:7ec-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并指定字符的高度、宽度、深度和斜体校正CHARDPCHARIC

现在需要用数字的值替换这些值taboldstyle。幸运的是,它们可以在TS1编码或文件中找到。或者,也可以使用ts1-qplr.tfm小写字体。我们再次使用将文件转换为可读格式。 、 、的结果为:ec-qplr-sc.tfm.tfm.pltftopl017

(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。

相关内容