标准字体包会对文档中的字体进行全局更改。如果我只想对文本的一部分使用特定字体该怎么办?
- 我如何找到正确的字体名称?
- 我如何选择字体?
- 如何限制字体变化的范围?
针对不同类型的 TeX,有不同的答案(快速链接):
答案1
常规 LaTeX
查找字体名称
这实际上是最难的部分。当你加载常规字体包时helvet
(将默认无衬线字体设置为 Helvetica 克隆),它会发出命令来使用内部名称设置字体(浆果名称),对普通用户是隐藏的。这些名称传统上对每个字体系列使用三个或四个字母的小写名称系统。通常这些名称记录在与字体相关的文档中。
以下是最常见字体及其代码的列表:
系列字体名称 先锋派 fvs Bitstream Vera Sans pbk 布克曼 bch 宪章 ccr电脑混凝土 cmr 现代电脑 pcr 快递 加拉蒙德 字体: Helvetica fi4 (zi4) 不幸 lmr 拉丁现代 lmss 拉丁现代无字体 lmtt 拉丁现代打字机 LinuxBiolinumT-OsF Linux Biolinum(旧版本软件包中称为“fxb”) LinuxLibertineT-OsF Linux Libertine(旧版本软件包中称为“fxl”) pnc新世纪教科书 帕拉蒂诺人 qag TeX Gyre Adventor qbk TeX Gyre Bonum qzc TeX Gyre 合唱团 qcr TeX 回旋光标 qhv TeX Gyre 英雄 qpl TeX 环流佩格拉 qcs TeX 回旋学院 qtm TeX 环流 ptm时报 安西亚尔 把乌托邦 pzc Zapf 大法官府
对于某些希腊字体,代码为:
Artemisia artemisia
Baskerville gfsbaskerville
Bodoni bodoni
Complutum complutum
Didot udidot
Neohellenic neohellenic
Porson porson
Solomos solomos
Greek Times txr
Kerkis mak
LX llcmss
Default lmr
对于其他内容,您可以查看 fontname.pdf 文件这里参见第 4 页。另请参阅问题LaTeX 字体系列的 Berry 命名方案列表 和搜索有效 \fontfamily 参数的最快方法? 关于这个话题。
如果您找不到字体的任何文档,作为最后的手段(或者在您知道自己在做什么之后的第一个手段),您可以打开.sty
实际加载字体的文件并亲自查看内部字体系列名称(或者您可以使用 在其中搜索grep
)。以下是两个示例:
来自helvet.sty
:包末尾有这样一行:
\renewcommand{\sfdefault}{phv}
这会将默认的 sans 字体(\sfdefault
)设置为该phv
系列,phv
字体的内部名称也是如此。
从 中PTSansCaption.sty
,您将找到以下行:
\renewcommand{\sfdefault}{PTSansCaption-TLF}
这里,内部名称更接近其文件名:PTSansCaption-TLF
。
这两个示例都显示了更改默认无衬线字体的代码。如果字体包更改了罗马字体或单色字体,则分别查找以下命令
\renewcommand{\rmdefault}{...}
\renewcommand{\ttdefault}{...}
选择字体
要选择字体,请使用以下命令:
\fontfamily{<familyname>}\selectfont
将其包装在宏中通常很有用:
\newcommand*{\myfont}{\fontfamily{<familyname>}\selectfont}
限制选择范围
您始终可以通过将文本括在括号中来限制字体更改命令的范围:
{\fontfamily{<familyname>}\selectfont ...}
或者使用命令
{\myfont ...}
或者,如果您没有括号匹配编辑器,可以使命令的范围在文件中更加明显
\begingroup
\myfont ...
\endgroup
如果你经常做这样的事,那么把它变成一个适当的环境会更有意义:
\newenvironment{myfont}{\fontfamily{<familyname>}\selectfont}{\par}
然后你可以像在任何其他环境中一样使用它:
\begin{myfont}
Some text in the new font.
\end{myfont}
您还可以定义一个与标准字体更改命令相对应的命令(例如\textrm
或 )\textsf
,但使用您的特定字体:
\DeclareTextFontCommand{\textmyfont}{\myfont}
像标准命令一样使用它:
Text in the default font. \textmyfont{Text in the new font.} Again text in the default font.
与上面描述的简单版本相比,此命令的优点是自动斜体校正,参见为什么要使用 \DeclareTextFontCommand 而不是 \newcommand?。
常见字体渲染
(除了ccr 计算混凝土)。
答案2
XeLaTeX 和 LuaLaTeX
XeLaTeX 和 LuaLaTeX 的出现极大地简化了 LaTeX 用户的字体选择,因为系统上安装的任何字体都可以使用这些引擎使用包fontspec
来加载字体。
XeLaTeX 和 LuaLaTeX 都默认采用 UTF-8 输入,因此你应该不是在使用它们时加载inputenc
包,并且应该将源文件保存为 UTF-8。
因此,基本文档将如下所示:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{<any font on your system>}
\begin{document}
...
\end{document}
全局选择字体
对于整个文档,您可以使用以下命令设置罗马字体、无衬线字体和等宽字体:
\setmainfont[<font features>]{<name of font>} % sets the roman font
\setsansfont[<font features>]{<name of font>} % sets the sans font
\setmonofont[<font features>]{<name of font>} % sets the monospace font
本地选择字体
如果你想在文档的一小部分中使用字体,最好定义一个新的字体系列。
\newfontfamily\myfont[<font features>]{<name of font>}
这将设置一个开关,\myfont
该开关将字体更改为该字体。(也可以直接使用命令选择字体\fontspec
,但通常应避免这样做,因为该\newfontfamily
方法效率更高。)此开关的行为与\rmfamily
或完全相同sffamily
(除了它被调用\myfont
并切换到分配给它的字体)。
字体功能
由于fontspec
软件包提供了对 OpenType 字体的访问,因此它能够提供对这些字体附带的许多特殊功能的访问。可以使用任何字体选择命令的可选参数来选择这些功能。有关fontspec
更多详细信息,请参阅文档。我将在这里概述几个常用的功能。
[Ligatures=TeX]
该功能允许您使用常规的 TeX 连字(在 中默认情况下未启用)fontspec
。特别是如果您习惯于输入 LaTeX 样式的引号或--
和,---
而不是直接输入实际字符,则应始终启用此选项。[Numbers=OldStyle]
此功能打开小写数字[Scale=MatchLowercase]
此功能用于缩放 sans 或 mono 字体,以匹配(在此示例中)罗马字体的小写字符。另一个选项是MatchUppercase
;或者可以给出数字缩放值。
请参阅fontspec
文档以获得可指定的丰富功能的完整描述。
如果您要设置单独的罗马字体、单色字体和无字体或创建新的字体系列,您通常希望为所有字体指定相同的字体功能。您可以使用以下命令执行此\defaultfontfeatures
操作:
\defaultfontfeatures{Ligatures=TeX} % makes this a feature for all selected fonts
查找字体的名称
如果您使用系统字体,则可以使用系统中任何 GUI 应用程序中显示的字体名称。(在 Mac 上,这些字体通常位于 中/Library/Fonts
;在 Windows 上,它们通常位于 中\Windows\Fonts
;在 Linux 上,通常位于 中/usr/local/share/fonts
。例如:
\setmainfont{Linux Libertine O}
\newfontfamily\myfont{Linux Libertine O}
在这里列出字体名称确实没有任何意义,但我会添加一些名称的示例:
- Arial Rounded MT 粗体
- DejaVu Sans Mono
- Florencesans SC 黑色
这些名字不是字体的文件名。如果您有某种字体管理器 GUI(如 Mac 上的 Font Book),则名称会显示在那里。在 Windows 上,您可以在控制面板的“字体预览”部分找到名称。
请注意,当您使用 选择字体时,字体名称中通常出现的空格也必须存在fontspec
。
如果要列出支持某种语言的字体(因为字体通常只支持部分 Unicode 字符),可以使用该fc-list
命令。例如,要查找支持中文的字体,首先找到语言代码中文,即,zh
那么我们使用以下命令
fc-list :lang=zh
显示支持中文的字体列表。输出内容如下:
/usr/share/fonts/custom/STLITI.TTF: STLiti,华文隶书:style=Regular
/usr/share/fonts/custom/SourceHanSerifSC-Regular.otf: Source Han Serif SC,思源宋体:style=Regular
/usr/share/fonts/wqy-microhei/wqy-microhei.ttc: WenQuanYi Micro Hei Mono,文泉驛等寬微米黑,文泉驿等宽微米黑:style=Regular
/usr/share/fonts/custom/simhei.ttf: SimHei,黑体:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/custom/SIMLI.TTF: LiSu,隶书:style=Regular
/usr/share/fonts/custom/STXINWEI.TTF: STXinwei,华文新魏:style=Regular
/usr/share/fonts/wqy-zenhei/wqy-zenhei.ttc: WenQuanYi Zen Hei Sharp,文泉驛點陣正黑,文泉驿点阵正黑:style=Regular
/usr/share/fonts/custom/simfang.ttf: FangSong,仿宋:style=Regular,Normal,obyčejné,Standard,Κανονικά,Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta
/usr/share/fonts/wqy-microhei/wqy-microhei.ttc: WenQuanYi Micro Hei,文泉驛微米黑,文泉驿微米黑:style=Regular
/usr/share/fonts/custom/FZYTK.TTF: FZYaoTi,方正姚体:style=Regular
字体名称位于字体位置之后,例如STLiti
。
限制选择范围
您始终可以通过将文本括在括号中来限制字体更改命令的范围:
{\myfont ...}
或者,如果您没有括号匹配编辑器,可以使命令的范围在文件中更加明显
\begingroup
\myfont ...
\endgroup
如果你经常做这样的事,那么把它变成一个适当的环境会更有意义:
\newenvironment{myfont}{\myfont}{\par}
然后你可以像在任何其他环境中一样使用它:
\begin{myfont}
Some text in the new font.
\end{myfont}
您还可以定义一个与标准字体更改命令相对应的命令(例如\textrm
或 )\textsf
,但使用您的特定字体:
\DeclareTextFontCommand{\textmyfont}{\myfont}
像标准命令一样使用它:
Text in the default font. \textmyfont{Text in the new font.} Again text in the default font.
与上面描述的简单版本相比,此命令的优点是自动斜体校正,参见为什么要使用 \DeclareTextFontCommand 而不是 \newcommand?。
答案3
康特克斯 MkIV
在 ConTeXt MkIV 中,使用字体来显示小部分内容非常容易。对于较大的文本部分,我建议使用Simplefonts 模块或者编写打字稿,因为较大的部分可能包含改变样式的字体开关。
我如何找到正确的字体名称?
首先,您必须安装字体(如果尚未安装)。在 Unix 上,您可以将目录$HOME/.fonts
用于每个用户或/usr/local/share/fonts
系统范围的安装。您必须将环境变量指向OSFONTDIR
可以找到字体的目录:
export OSFONTDIR="/usr/local/share/fonts;$HOME/.fonts"
然后运行
mtxrun --script fonts --reload
重新生成字体数据库。现在您可以查询数据库。这将为您提供所有可用字体的列表:
mtxrun --script fonts --list --all
以下是该列表的前十行:
ams wncysc10 wncysc10.afm
amsbold wncyb10 wncyb10.afm
amsmedium wncysc10 wncysc10.afm
antpoltbold antpoltbold antpolt-bold.otf
antpoltbolditalic antpoltbolditalic antpolt-bolditalic.otf
antpoltcondbold antpoltcondbold antpoltcond-bold.otf
antpoltcondbolditalic antpoltcondbolditalic antpoltcond-bolditalic.otf
antpoltconditalic antpoltconditalic antpoltcond-italic.otf
antpoltcondregular antpoltcondregular antpoltcond-regular.otf
antpoltexpdbold antpoltexpdbold antpoltexpd-bold.otf
您将获得三列,第二列是规范化(全部小写、无特殊字符、无空格)名称,第三列是文件名(小写)。
您可以运行列表grep
或使用内置机制来搜索特定字体:
mtxrun --script fonts --list --pattern=deli* --all
给出
delicious deliciousbold Delicious-Bold.otf
deliciousbold deliciousbold Delicious-Bold.otf
deliciousbolditalic deliciousbolditalic Delicious-BoldItalic.otf
deliciousheavy deliciousheavy Delicious-Heavy.otf
deliciousitalic deliciousitalic Delicious-Italic.otf
deliciousmedium deliciousitalic Delicious-Italic.otf
deliciousnormal deliciousroman Delicious-Roman.otf
deliciousregular deliciousheavy Delicious-Heavy.otf
deliciousroman deliciousroman Delicious-Roman.otf
delicioussmallcaps delicioussmallcaps Delicious-SmallCaps.otf
我如何选择字体?
由于我们只处理一种字体,没有粗体或斜体字体切换(但是,选定的字体当然可以是粗体或斜体),我们可以简单地使用\definefont
:
\definefont [delicious] [name:deliciousroman]
\delicious
这定义了一个切换到给定字体的 宏。name:
前缀用于引用字体列表中的规范化名称(第二列)。也可以使用前缀file:
并使用文件名(第三列),而不使用路径。
如何限制字体变化的范围?
您可以使用括号、\start \stop
或\begingroup \endgroup
任何其他分组机制。
Delicious-Roman
这是一个使用该字体(OpenType 字体)的完整示例。
\definefont [delicious] [name:deliciousroman]
\starttext
\start
\delicious
\input knuth
\stop
\input knuth
\stoptext
输出:
右侧框表示确实正在使用所请求的字体。更多信息可以在ConTeXt wiki - LuaTeX 中的字体和 字体章节。
答案4
这是一个带有小工作代码的答案:
\documentclass{article}
\usepackage{fontspec}
\newfontfamily\myFont{Courier_New.ttf}
\usepackage[T1]{fontenc}
\begin{document}
Default \TeX\ font. {\myFont A unicode font.} Again default \TeX\ font.
\end{document}
这里,我使用了 Courier 新字体。要检查可用的字体,请转到目录:/usr/share/fonts/
。从这里发出以下命令将为您提供可用字体的列表:find . -type f -name "*.ttf
。您可以将这里的任何字体文件替换为Courier_New.ttf
第 3 行中的。