我正在使用 Fourier 包来设置文档中的字体,但我对它采用的设置不太满意:
后来我发现,上面的无衬线字体是 Computer Modern Sans,也就是“默认”
cmss
字体系列;Fourier 包不会改变它。上面的书法字体来自 Fourier 包。接受的答案重点介绍了如何更改字体系列,并解释了 Fourier 字体的工作原理。书法字体的答案在评论中给出@marsupilam。
具体来说,我不喜欢l
太细,而且书法文字太花哨。
在读了一点LaTeX/Fonts Wikibooks 页面并借助LaTeX 字体目录,我设法改变了的样式\textsf
。这里我使用了 Chivo 字体,只是为了尝试一下:
其代码相当简单:
\documentclass{article}
\usepackage{Chivo}
\usepackage{fourier}
\begin{document}
Quidquid latine dictum sit, altum videtur. (font-family: Utopia)
\textsf{Quidquid latine dictum sit, altum videtur. (font-family: Chivo)}
$\mathcal{T R S}$ (font-family: ?)
\end{document}
它“有点管用”。问题在于无衬线文本的“宽度”和“高度”与衬线文本的不匹配:
这个问题的答案也在评论中,由@AndrewSwann。
我也一直在想是否可以在同一文档中使用两种衬线字体。这纯粹是为了美观。
所以我尝试了这个:
\documentclass{article}
\usepackage{fourier}
\usepackage{newcent}
\usepackage{Chivo}
\begin{document}
Quidquid latine dictum sit, altum videtur. (font-family: New Century)
{\fontfamily{put}\selectfont Quidquid latine dictum sit, altum videtur. (font-family: Utopia)}
\textsf{Quidquid latine dictum sit, altum videtur. (font-family: Chivo)}
\end{document}
再次强调,这种方法“有效”。但是,所使用的字体/字型高度依赖于我在序言中包含软件包的顺序 — — 这强烈表明我做错了。
此外,尽管字体的“宽度”和“高度”似乎匹配得更好,但使用 时,Utopia 文本的\selectfont
渲染效果比不使用 时更大\selectfont
。
我的问题是:
- 如何在同一文档中使用两种或多种衬线字体?(或两种或多种无衬线字体等)
- 我如何更改字体的大小,以便包
\textsf{}
中的字体Chivo
看起来与包中的标准字体系列兼容fourier
? - 我如何更改书法字体?我喜欢
\mathcal
不使用任何字体包时的外观,但提供的字体fourier
对我来说是不可接受的。 - 我在问题中是否正确使用了术语“font-family”和“typeface”?当没有使用其他字体命令时,
\usepackage{fourier}
指定什么字体?\textsf
我读到过 LuaTeX 有非常简洁的字体选择命令。这正是我所寻找的。但我现在有一份 120 页的文档,而且我对 LuaTeX 一无所知,所以迁移似乎不是一个好主意。
答案1
文档中最好尽可能避免使用低级字体选择命令。对于一次性特殊效果,如果您只想为标题或其他内容添加一些特殊效果,这些命令就足够了。对于其他任何情况,都应避免使用它们。
让我们看看
\documentclass{article}
\usepackage{fourier}
\begin{document}
This text has the expected size.
\fontfamily{futs}\selectfont This text has the expected size.
{\fontfamily{put}\selectfont This text has not the expected size.}
\end{document}
实际上是在控制台上:
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/size10.clo))
这将设置默认 10pt 字体的点大小。
(/usr/local/texlive/2016/texmf-dist/tex/latex/fourier/fourier.sty
暂时先不谈它fourier
的作用,它还会加载一些额外的东西:
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/fontenc.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/t1enc.def))
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/textcomp.sty
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/ts1enc.def))
输出使用 T1 字体编码。加载 TS1 编码以支持文本模式符号。
(/usr/local/texlive/2016/texmf-dist/tex/latex/fourier/fourier-orns.sty))
这些是fourier
装饰品和饰物。
(./prawf.aux) (/usr/local/texlive/2016/texmf-dist/tex/latex/fourier/fmlfutm.fd)
(/usr/local/texlive/2016/texmf-dist/tex/latex/fourier/fmsfutm.fd)
(/usr/local/texlive/2016/texmf-dist/tex/latex/fourier/fmxfutm.fd)
这些是数学字体定义。它们使用非标准编码:FML、FMS 和 FMX,大致相当于 OML、OMS 和 OMX,它们是标准数学编码。
(/usr/local/texlive/2016/texmf-dist/tex/latex/base/ts1cmr.fd)
这是读取 Computer Modern Roman 文本符号 (TS1) 编码的字体定义。
(/usr/local/texlive/2016/texmf-dist/tex/latex/fourier/t1futs.fd)
futs
这将读取T1 字体编码中的字体定义。
(/usr/local/texlive/2016/texmf-dist/tex/latex/psnfss/t1put.fd)
put
这将读取T1 字体编码中的字体定义。这是 的一部分psnfss
,因此它由 LaTeX 对基本 postscript 35 字体的支持提供。
[1{/usr/local/texlive/2016/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
This is the active main mapping file which pdfTeX uses to find the postscript fonts corresponding to the TeX fonts requested. The file tells pdfTeX something about which `.pfb` file to use and how to figure out where in the `.pfb` file a requested character's glyph can be found.
{/usr/local/texlive/2016/texmf-dist/fonts/enc/dvips/base/8r.enc}
这是 8 位字体的原始编码(有 256 个槽)。您不能直接使用此编码,但有时将其用作中间编码,以转换标准 PostScript 编码。
</usr/local/texlive/2016/texmf-dist/fonts/type1/adobe/utopia/putr8a.pfb>
这是文档中使用的实际 PFB 文件:putr8a
表示这是 Adobe Utopia 常规文件,并且文件使用 Adobe 8 位编码。这不包含足够的信息来使用该字体,因为它实际上只包含字符(字形)的图片。例如,它不包含有关如何组合它们的信息。(Postscript type1 字体分为两部分:通常是 PFB 文件和 Adobe Font Metric (AFM) 文件。)
那么为什么 TeX 会加载put
而不是 呢?让我们看看的futs
字体定义文件futs
:t1futs.fd
%Filename: t1futs.fd
%Created by: tex build-fourier
%Created using fontinst v1.926
%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
\ProvidesFile{t1futs.fd}
[2004/03/02 Fontinst v1.926 font definitions for T1/futs.]
\DeclareFontFamily{T1}{futs}{\providecommand {\SetFourierSpace }{}}
%Filename: t1futs.fd
%Created by: tex build-fourier
%Created using fontinst v1.926
%THIS FILE SHOULD BE PUT IN A TEX INPUTS DIRECTORY
\ProvidesFile{t1futs.fd}
[2004/03/02 Fontinst v1.926 font definitions for T1/futs.]
\DeclareFontFamily{T1}{futs}{\providecommand {\SetFourierSpace }{}}
\DeclareFontShape{T1}{futs}{m}{n}{% medium upright
<-> futr8t
}{\SetFourierSpace}
\DeclareFontShape{T1}{futs}{m}{it}{% medium italic
<-> futri8t
}{\SetFourierSpace}
\DeclareFontShape{T1}{futs}{b}{n}{% bold upright
<-> futb8t
}{\SetFourierSpace}
\DeclareFontShape{T1}{futs}{b}{it}{% bold italic
<-> futbi8t
}{\SetFourierSpace}
\DeclareFontShape{T1}{futs}{m}{sc}{% medium small-caps
<-> futrc8t
}{\SetFourierSpace}
\DeclareFontShape{T1}{futs}{b}{sc}{% bold small-caps
<-> futbc8t
}{\SetFourierSpace}
\DeclareFontShape{T1}{futs}{m}{sl}{% medium oblique
<-> futro8t
}{\SetFourierSpace}
\DeclareFontShape{T1}{futs}{b}{sl}{% bold oblique
<-> futbo8t
}{\SetFourierSpace}
% silent font substitutions which substitute bold for bold extended when the latter is requested, without issuing a warning
\DeclareFontShape{T1}{futs}{bx}{n}{<->ssub * futs/b/n}{}
\DeclareFontShape{T1}{futs}{bx}{it}{<->ssub * futs/b/it}{}
\DeclareFontShape{T1}{futs}{bx}{sc}{<->ssub * futs/b/sc}{}
\DeclareFontShape{T1}{futs}{bx}{sl}{<->ssub * futs/b/sl}{}
\endinput
因此,假设我们要求futs
T1 编码为中等直立。然后 LaTeX 将查找futr8t
。8t
指定 T1 编码。更具体地说,它将加载futr8t.tfm
TeX 字体度量文件。(创建字体包时,AFM 文件会与其他信息相结合以创建 TFM。)
因为这是 pdfTeX 而不是 TeX,所以 pdfTeX 还会查找有关在何处找到字形等的信息。但是,futr8t
在映射文件中找不到任何条目。
然而,我们确实找到了这条线
futr8r Utopia-Regular "TeXBase1Encoding ReEncodeFont " <8r.enc <putr8a.pfb
那么我们如何从 到futr8t
呢futr8r
?答案在于fourier
提供虚拟字体。在这种情况下,虚拟字体是futr8t.vf
。虚拟字体很有用,因为它们允许您将不同字体的字形组合成单个 TeX 字体,构建某些缺失的字形以及执行一些更可疑的操作,例如伪倾斜和小型大写字母。
但是,虚拟字体不包含任何字形。相反,虚拟字体引用一个或多个其他字体,这些字体最终必须引用映射文件中指向实际 PFB 或类似内容的内容。在这种情况下,虚拟字体最终必须指向 TeX 字体,futr8r
该字体既有 TFM 文件,futr8r.tfm
又有映射文件中引用的一行putr8a.pfb
。
因此,如果putr
您的系统上没有,您就无法将futr
其与 pdfTeX 一起使用。(您可以将它与 TeX 一起使用,但除了一系列框外,您将无法查看结果,因为 DVI 查看器需要字形才能有意义地呈现文档。)
好的。背景知识说得够多了。我们如何才能设置在一个文档中使用多种字体,因为我们想要生成一个排版怪物?
请注意,我并不推荐这样做。我只是演示了技术上的可能性。
一般情况下,使用多种字体并不明智。特别是,除非你真的知道自己在做什么,否则不建议混合使用多种衬线字体或多种无衬线字体。
买者自负。
然而,如果你执意要做不该做的事,你最好把它做好。
在这里,我使用 Venturis ADF 作为默认的衬线和无衬线字体,并设置宏以在需要时切换到 Utopia。但请注意 Bernard 关于的评论erewhon
。假小写字母确实不令人满意。(我在下面的例子中避免使用它们。)当有真正的小写字母可用时,绝对没有理由使用它们。
\documentclass{article}
\usepackage{venturis}
\DeclareRobustCommand\futsie{%
\fontencoding{T1}%
\fontfamily{futs}%
% \fontseries{m}% uncomment if you don't want the command to fail due to an unavailable width/weight and don't mind being bumped back to medium
% \fontshape{n}% uncomment if you don't want the command to fail due to an unavailable shape and don't mind being bumped back to upright
\selectfont
}
\DeclareTextFontCommand\textfut{\futsie}
\begin{document}
{%
\Large\textvt{Don't Try This At Home, Kids!}\par
}
This is in the default serif font.
\textsf{This is a little bit in the default sans.}
More default serif here.
\futsie This changes to the requested font indefinitely.
\sffamily This changes to the default sans indefinitely.
\normalfont This gets back to the default serif indefinitely.
\textfut{Just a bit in the alternative} and back to the default.
{%
\Large\textvtl{Create Your Very Own Typographical Monster!}\par
}
\end{document}
编辑
总体而言,Fourier 与 Adobe Utopia 之间的差异相当大。这两套字体都依赖于伪造的小型大写字母,并且都不直接加载 PostScript 字体。两者都依赖于虚拟字体。
但是 Fourier 提供了额外的 type1 字体,以补充 Utopia 提供的字体。该futs
系列中的虚拟字体使用来自多种不同 PostScript 字体的字形,以及基于这些字形的伪字形。
这是 Fourier 本身提供的一种 PostScript 字体的 AFM。
StartFontMetrics 2.0
Comment Panose 2 0 0 0 0 0 0 0 0 0
FullName Fourier-Alternate-Roman
FontName Fourier-Alternate-Roman
FamilyName Fourier-Alternate-Roman
Weight Regular
Notice (C) 2003, GUTenberg
Version 001.004
IsFixedPitch false
ItalicAngle 0.00
FontBBox -33 -242 712 705
Ascender 742
Descender -230
XHeight 490
CapHeight 693
UnderlinePosition -100
UnderlineThickness 50
StdHW 35
StdVW 94
EncodingScheme FontSpecific
StartCharMetrics 11
C 32 ; WX 500 ; N space ; B 0 0 0 0 ;
C 33 ; WX 287 ; N dotlessj ; B -33 -242 200 502 ;
C 34 ; WX 501 ; N euro ; B 22 -13 459 705 ;
C 35 ; WX 584 ; N eng ; B 32 -242 529 502 ;
C 36 ; WX 713 ; N Eng ; B 34 -140 669 705 ;
C 37 ; WX 364 ; N perthousandzero ; B 0 -12 315 354 ;
C 38 ; WX 558 ; N mu ; B 40 -242 550 502 ;
C 39 ; WX 593 ; N Engsmall ; B 6 -99 555 515 ;
C 40 ; WX 767 ; N euro2 ; B 0 -12 712 705 ;
C -1 ; WX 0 ; N .null ; B 0 0 0 0 ;
C -1 ; WX 500 ; N CR ; B 0 0 0 0 ;
EndCharMetrics
EndFontMetrics
首先要注意的是,这个文件非常短。标准 TeX 字体有 128 或 256 个字符槽。这个字体只提供了少量字符。
第二件需要注意的事情是,所提供的字符是一堆奇怪的字符。例如,虽然字体被描述为“罗马”,但其中却没有字母。
列出的字符的重要之处在于它们都包含在 T1 字体编码中,没有一个包含在 Adobe Utopia 中,并且都不能通过构造其他字符来有效伪造。也就是说,这些字符旨在补充乌托邦提供了什么。
这样futr8t
做的目的是将 Adobe Utopia 常规直立字体和 Fourier Alternate Roman 常规直立字体中的字符组合成一个 TeX 字体。在传统的 TeX 世界中,这只能使用虚拟字体来实现。这很重要,因为它不需要编辑 Adobe Utopia,而这可能是许可证所禁止的。
Fourier 包还提供数学字体来补充 Utopia、文本符号和装饰以及其他各种东西,包括数学的希腊语。
这与尺寸无关。Utopia 只提供单一尺寸。它可以缩放,就像您请求非默认尺寸时一样,但您不需要虚拟字体的复杂性。(同样如此,否则我们都必须坚持使用 10pt,我想。其他任何方法都不太明智。)