买者自负。

买者自负。

我正在使用 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

在此处输入图片描述

我的问题是:

  1. 如何在同一文档中使用两种或多种衬线字体?(或两种或多种无衬线字体等)
  2. 我如何更改字体的大小,以便包\textsf{}中的字体Chivo看起来与包中的标准字体系列兼容fourier
  3. 我如何更改书法字体?我喜欢\mathcal不使用任何字体包时的外观,但提供的字体fourier对我来说是不可接受的。
  4. 我在问题中是否正确使用了术语“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表示这是 Adob​​e Utopia 常规文件,并且文件使用 Adob​​e 8 位编码。这不包含足够的信息来使用该字体,因为它实际上只包含字符(字形)的图片。例如,它不包含有关如何组合它们的信息。(Postscript type1 字体分为两部分:通常是 PFB 文件和 Adob​​e Font Metric (AFM) 文件。)

那么为什么 TeX 会加载put而不是 呢?让我们看看的futs字体定义文件futst1futs.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

因此,假设我们要求futsT1 编码为中等直立。然后 LaTeX 将查找futr8t8t指定 T1 编码。更具体地说,它将加载futr8t.tfmTeX 字体度量文件。(创建字体包时,AFM 文件会与其他信息相结合以创建 TFM。)

因为这是 pdfTeX 而不是 TeX,所以 pdfTeX 还会查找有关在何处找到字形等的信息。但是,futr8t在映射文件中找不到任何条目。

然而,我们确实找到了这条线

futr8r Utopia-Regular "TeXBase1Encoding ReEncodeFont " <8r.enc <putr8a.pfb

那么我们如何从 到futr8tfutr8r?答案在于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 与 Adob​​e 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 字体编码中,没有一个包含在 Adob​​e Utopia 中,并且都不能通过构造其他字符来有效伪造。也就是说,这些字符旨在补充乌托邦提供了什么。

这样futr8t做的目的是将 Adob​​e Utopia 常规直立字体和 Fourier Alternate Roman 常规直立字体中的字符组合成一个 TeX 字体。在传统的 TeX 世界中,这只能使用虚拟字体来实现。这很重要,因为它不需要编辑 Adob​​e Utopia,而这可能是许可证所禁止的。

Fourier 包还提供数学字体来补充 Utopia、文本符号和装饰以及其他各种东西,包括数学的希腊语。

这与尺寸无关。Utopia 只提供单一尺寸。它可以缩放,就像您请求非默认尺寸时一样,但您不需要虚拟字体的复杂性。(同样如此,否则我们都必须坚持使用 10pt,我想。其他任何方法都不太明智。)

相关内容