如何在 LaTeX 中指定任意(可能非整数)字体大小

如何在 LaTeX 中指定任意(可能非整数)字体大小

我可能错了,但我觉得我无法使用 获得非整数(或非预加载)字体大小(例如 9.876pt)\fontsize。如果这是真的,我该如何在 LaTeX 中做到这一点?我必须求助于\font ... at ...原始方法吗?

(我需要这个的原因是我想实现一个更 LaTeXy 的方式来执行\diminuendohttp://tug.org/texshowcase/

答案1

您可以使用指定任意非整数字体大小,\fontsizes所以您错了 ;-)。但为了工作,还需要满足两点:

  • 使用的字体需要符合您要求的尺寸(这在一分钟内意味着什么)
  • LaTeX 必须知道字体存在所请求的大小。

如果第一个要求不成立,那你就倒霉了,解决问题的唯一方法是使用获得更大的字体(不是 \fontsize)?或者和缩放的组合\fontsize

然而,如果这只是 LaTeX 不知道可用尺寸的问题,那么您可以通过更改 NFSS(新字体选择方案)设置来纠正这个问题。

例子:

我们使用大尺寸 39.976pt,以便我们可以轻松发现问题:

\documentclass{article}

\begin{document}

\fontsize{39.876}{42}\selectfont      Test CM

\fontfamily{ppl}\selectfont                Test ppl

\showoutput
\end{document}

如果我们通过 LaTeX 运行它,我们将得到

在此处输入图片描述

我们可以看到,Computer Modern 比 Palatino(第二种选择的字体)小得多。

我们还收到警告:

LaTeX Font Warning: Size substitutions with differences
(Font)              up to 14.996pt have occurred.

这表明至少有一种字体“偏离”了近 15pts(即 CM 字体),如果我们查看命令提供的详细信息,\showoutput我们会看到类似这样的行

....\OT1/cmr/m/n/24.88 T
....\kern-1.94974
....\OT1/cmr/m/n/24.88 e
....\OT1/cmr/m/n/24.88 s
....\OT1/cmr/m/n/24.88 t
....\glue 7.51096 plus 3.89944 minus 2.59964
....\OT1/cmr/m/n/24.88 C
....\OT1/cmr/m/n/24.88 M
....\penalty 10000
....\glue(\parfillskip) 0.0 plus 1.0fil
....\glue(\rightskip) 0.0
...\glue(\parskip) 0.0 plus 1.0
...\glue(\baselineskip) 12.95067
...\hbox(29.04933+11.24483)x345.0, glue set 190.71533fil
....\hbox(0.0+0.0)x15.0
....\OT1/ppl/m/n/39.876 T
....\kern-3.66829
....\OT1/ppl/m/n/39.876 e
....\OT1/ppl/m/n/39.876 s
....\OT1/ppl/m/n/39.876 t
....\glue 9.969 plus 5.98138 minus 2.39249
....\OT1/ppl/m/n/39.876 p
....\OT1/ppl/m/n/39.876 p
....\OT1/ppl/m/n/39.876 l

这表明 LaTeX 已24.88为 Computer Modern Roman ( cmr) 选择了一种字体,并且还使用了 Palatino 所请求的大小 ( ppl)。

解释

造成这种行为差异的原因在于这两种字体向 LaTeX 呈现的方式。对于 Palatino,它是一种 Type 1 字体,LATeX 被要求根据需要将其缩放到任意大小。但对于 Computer Modern Roman,LaTeX 被告知,不同大小有不同的真实字体,并且只有一组定义的尺寸可用。

两个定义(来自文件ot1ppl.fdot1cmr.fd)是

\DeclareFontShape{OT1}{ppl}{m}{n}{<-> pplr7t}{}

\DeclareFontShape{OT1}{cmr}{m}{n}%
     {<5><6><7><8><9><10><12>gen*cmr%
      <10.95>cmr10%
      <14.4>cmr12%
      <17.28><20.74><24.88>cmr17}{}

这种差异解释了不同的行为。

解决

在 Computer Modern 中,实际上有专门为特定字体大小设计的不同真实字体,在早期,这就是您唯一能得到的。\font在这种情况下,即使是低级字体也无济于事。真正的 LaTeX 或 TeX 会假设它们可以使用该字体,但在打印时,事情就会失败。

然而,如今大多数 TeX 安装可以动态生成基于 MetaFont 的字体,因此能够在需要时生成任何中间字体。

那么为什么 LaTex 默认仍然使用一组固定的基于 Metafont 的字体呢?LaTeX2e 的原因主要是为了避免因为有人使用特殊\fontsize值而生成太多字体。当然还有向后兼容性!

但是如果你想要这种可能性:没问题,你只需要提供正确的字体形状定义。以下是 CM 的一种可能性:

 \DeclareFontShape{OT1}{cmr}{m}{n}%
     {<-6>cmr5<6-7>cmr6<7-8>cmr7<8-9>cmr8<9-10>cmr9%
      <10-12>cmr10%
      <12-17.28>cmr12%
      <17.28->cmr17}{}

现在使用间隔,例如,cmr10用于 10pt 和 12pt 之间的所有字体大小等。

在 Computer Modern 的情况下,这些类型的重新定义实际上是由包提供的,fix-cm因此只需加载此包即可启用所有中间尺寸。

文档

您将在文档中找到有关 LaTeX 字体设置的一些有用信息LaTeX2e 字体选择LaTeX 伴侣 2ed有一整章介绍它的所有细节和可能性。

相关内容