使用旧式数字而不使用 \oldstylenums

使用旧式数字而不使用 \oldstylenums

很多免费的 LaTeX 字体除了包含衬线数字外,还包含旧式数字(与小写字母相协调的数字)。(通常,您必须加载textcomp包,使额外的符号可用。)然而,只有少数字体包可以轻松切换到旧式数字 - 我知道可以免费获得的字体包是

  • \usepackage[osf]{mathpazo}(针对 Palatino 字体),

  • \usepackage[osf]{libertine}, 和

  • \usepackage{cfr-lm}(用于拉丁现代字体)。

对于其他字体,可以使用\oldstylenums宏来访问旧式数字,\oldstylenums{123}在每个实例中键入(例如)。这是不切实际且乏味的。

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{textcomp}

\usepackage{tgschola}% or, e.g., tgtermes, cmbright, iwona

\begin{document}

\Large

0123456789

\oldstylenums{0123456789}

\end{document}

在此处输入图片描述

我知道 XeLaTeX 可以轻松访问 Open Type Font 功能(其中包括旧式数字)。但是,我目前对 (pdf)LaTeX 感兴趣。是否可以方便地为包含它们的每种 LaTeX 字体使用旧式数字?

答案1

这个问题通常没有唯一的答案。这完全取决于字体制造商提供的字体和字体表,以及它们如何在 TeX 系统中映射和安装。让我试着解释一下。

[为了减少混淆,下面的答案假设您的问题是针对LaTeX场景,而不是等XeTeXLuaTeX它们提供了不同的、稍微简单的方法来解决这个问题。]

假设您的字体已正确安装在texmf目录结构中,并且可能假设轮廓(非位图)字体,您将拥有针对每种字体的几组字体(比如说“形状”和/或“系列”)。根据特定字体,即根据特定字体制造商提供的内容,您将至少拥有常规、粗体、斜体、粗斜体的形状/系列(尽管在某些情况下可能会更少),然后可能还有旧式数字、真大写、压缩、替代粗细等(通常来自“专业”或“专家”系列)。

现在,TeX 可以通过多种方式访问​​字体中提供的旧式数字,具体取决于字体的创建方式或(更准确地说)其映射在系统中的布局方式。如果您有专用的旧式字​​体文件,那么 TeX 只需在其映射中切换指向旧式数字的表格,即可从旧式数字切换到衬线数字。您需要做的就是通过选择它们来指定您想要的内容。以下是一些示例:

Font Family       lining figures   old style figures
----------------------------------------------------
Kepler Project        jkpx             jkpxosn
ADF Venturis          yvt               yvtj
Palatino              pplx              pplj
Adobe Sabon           psb               psbj
Adobe Minion Pro   MinionPro        MinionPro-OsF

例如,要选择 Palatino 带衬线数字作为默认罗马字体,请\renewcommand*\rmdefault{pplx}在文档前言中写明,或者如果您想要 Palatino 带旧式数字。当您写明用 Pazo 数学字体加载 Palatino\renewcommand*\rmdefault{pplj}时,下面发生的一切就是如此。\usepackage[osf]{mathpazo}

或者,如果您想在文档中的特定位置使用 Palatino 和旧式数字,您可以编写\fontfamily{pplj}\selectfont。如果您在组中执行此操作(例如,在内部{和内}),您将恢复到离开组时有效的字体。如上所述,mathpazo当您编写 时,这就是为您所做的一切\oldstylenums{12345}。即,mathpazo包括命令(注意组):

\renewcommand{\oldstylenums}[1]{{\fontfamily{pplj}\selectfont #1}}

没有太多的字体铸造厂可以让您轻松访问旧式数字(主要是因为这些额外的集合构成了他们的“专业”系列,他们对此收取更高的费用,或者因为这是一项额外的工作,或者因为旧式数字在特定的字体中看起来不太好)。

但是,与 GUST e-foundry 一样,一些字体制作者在通常的插槽之外提供了旧式图形字形。换句话说,您可以通过符号字形映射(TS1 与 T1 编码)获得通常的衬线图形和旧式图形。如果您的映射已正确设置(例如,由fontinst或如果有人为您完成这项工作),您可以以通常的方式访问衬线图形('1','2',...)并通过诸如 、 等命令访问旧式图形。\textzerooldstyle问题\textoneoldstyle是,您不能像我们在上面的 Palatino 示例中看到的那样,仅通过选择衬线和旧式图形就轻松地切换它们。这就是该fontaxes方法(根据 Lev 和 lockstep 的建议)不起作用的原因 - 对于 Gyre Schola,它正在寻找字体定义qcsjqcs-OsF并且找不到(qcs是 Gyre Schola 的基本字体系列名称)。但是,如果不fontaxes加载包,\oldstylenums(在textcomp包中定义)可以访问它们。你可以通过如下操作来了解它是如何做到这一点的:

\documentclass{article}
\usepackage{tgschola}                % or whatever
\usepackage{textcomp}                % no real need to explicitly load textcomp in this case
\usepackage{fontenc}                 % to control your font encoding

\begin{document}
T1 font encoding:\par
\fontencoding{T1}\selectfont
01234567890\par                      % lining figures under T1 encoding, osf under TS1
\oldstylenums{01234567890}\par       % forces TS1 encoding, so typeset osf regardless
abcdefghijABCDEFGHIJ\par             % normal chars under T1 encoding, gobbledygook under TS1
\oldstylenums{abcdefghijABCDEFGHIJ}  % forces TS1 encoding, so typeset symbols regardless
\vspace{\baselineskip}

TS1 font encoding:\par
\fontencoding{TS1}\selectfont
01234567890\par                      % lining figures under T1 encoding, osf under TS1
\oldstylenums{01234567890}\par       % forces TS1 encoding, so typeset osf regardless
abcdefghijABCDEFGHIJ\par             % normal chars under T1 encoding, gobbledygook under TS1
\oldstylenums{abcdefghijABCDEFGHIJ}  % forces TS1 encoding, so typeset symbols regardless
\end{document}

如果您这样做,您很快就会发现,所做的\oldstylenums只是切换 TS1 编码。但是,当您尝试以 TS1 字体编码排版普通字符时,您可以看到打印出来的废话,您在想要排版普通文本时不能选择该编码!因此,您必须LaTeX在输入之前和离开每个旧式数字块之后以某种方式告知您想要执行的操作。即,您又回到使用\oldstylenums,尽管可能使用了其他名称。

还有第三种方法,即设置一组虚拟字体,将字体提供的旧式图形组装到通常放置普通图形的位置。这需要一定的专业知识,可能不应轻易进入,但如果你有耐心和时间,这是完全可行的。

答案2

您可以使用 fontaxes 包(作为Minion专业版)。它提供了选择不同字体轴的命令:regular/smallcaps/spacedsmallcaps;upright/italic/slanted/swash;oldstylefigs/liningfigs;proportionalTextFigs/tabularTextFigs;proportionalMathFigs/tabularMathFigs。

它主要是为 MinionPro 设计的,但我相信它也适用于其他字体。

答案3

2011 年 12 月 11 日发布的5.1.3 版libertine不再支持 pdfLaTeX。引用 Ulrike Fischer 的话压缩文本.tex

警告:这意味着对 (pdf)latex 和 type1 字体的支持已被放弃。该软件包不再适用于此引擎。据我所知,type1 字体已从 CTAN 中消失。

Herbert Voß 给出了一些建议压缩文本.tex如何libertine's在升级之前将 type1 字体文件保存到本地 texmf 树。

更新:2011 年 12 月 20 日,新libertine-legacy软件包发布。CTAN公告

自 2011 年 12 月 11 日起,libertine 软件包仅支持 xetex 和 luatex 用户(opentype 格式字体)。此软件包提供最后一个仍支持 tex 和 pdftex 用户(type 1 字体)的版本。除了少数目录和文件重命名以避免与较新的发行版冲突外,此软件包中的文件与 2011 年 12 月之前在 CTAN 分发的 libertine 软件包版本 5.1.2 中的文件相同。

我们认为此软件包可以像以前一样安装和使用,不会与较新的 libertine 软件包冲突,只是后者有一个“虚拟” libertine.sty,应将其删除或避免使用。Xetex 和 luatex 用户应在较新的 libertine 软件包中使用 libertineotf.sty。

相关内容