我可能错了,但我觉得我无法使用 获得非整数(或非预加载)字体大小(例如 9.876pt)\fontsize
。如果这是真的,我该如何在 LaTeX 中做到这一点?我必须求助于\font ... at ...
原始方法吗?
(我需要这个的原因是我想实现一个更 LaTeXy 的方式来执行\diminuendo
宏http://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.fd
和ot1cmr.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有一整章介绍它的所有细节和可能性。