我正在准备一份文档,它有助于fontspec
定义主字体和无字体。在该文档中,我想将主字体与 Computer Modern 进行比较,或者更准确地说,是它的后继者 Latin Modern。
我确信,写作
\newfontfamily\lmfont{Latin Modern Roman}
将启用包含 70 多个字体文件的完整系列。但这是不正确的。
例如,当我说
{\lmfont\scshape{}abcd} {\scshape{}abcd}
我明白了:
左侧是拉丁现代字体,但没有小型大写字母 :-(,右侧是文档的默认(“mainfont”)字体,应如此。
为了进行比较,我想展示该系列中多种字体的选择/组合,即罗马字体、无字体和单色字体,并添加了诸如 -italic、-italic-bold、-slanted、-slanted-bold、-bold、-smallcaps 之类的形状和字体。
不幸的是,我的解决方案只加载了LMRoman10-Regular
和LMSans10-Regular
字体,但没有加载LMRomanCaps10-Regular
。这就是\lmfont\scshape
(或\lmfont\ttfamily
) 不起作用的原因。
那么,是否有可能定义它\newfamily
包含完整的拉丁现代字体?
任何能够让我使用简单的宏来并排比较两种字体系列的解决方案都可以。
以下是 MWE:
\documentclass{scrbook}
\usepackage{fontspec}
\setmainfont{Times New Roman} % and other definitions
\newfontfamily\lmfont{Latin Modern Roman} % this is not complete!!
%% New command to compare.
%% #1 defines the family/shape/series
\newcommand{\compare}[1]{%
{#1%
ABCD \dots{} XYZ, abcd \dots{} xyz\\
\lmfont{}ABCD \dots{} XYZ, abcd \dots{} xyz\par
}
}
\begin{document}
\compare{\upshape}
\compare{\itshape}
\compare{\itshape\bfseries}
\compare{\scshape}
\end{document}
答案1
不,它不是那样运作的,而且确实不能那样运作。
不存在字体命名约定,各种字体的功能也大不相同。有些字体有某个smcp
功能,有些则没有,而且必须指定要使用小写字母的字体。
Latin Modern Roman 的情况则截然不同:它有大约 70 个字体文件,而fontspec
分析它们以完成所有必要的任务超出了我们的范围。
但是,对于特殊情况,.fd
文件是可用的,因此您可以使用它们。
\documentclass{article}
\usepackage{fontspec}
\setmainfont{EB Garamond}
\newfontfamily\lmodern{Latin Modern Roman}[
NFSSFamily=lmr
]
\begin{document}
Abc\textsc{Abc}
\lmodern
Abc\textsc{Abc}
\end{document}
答案2
作为 egreg 优秀答案的附录:对于将小型大写字母存储在单独文件中的自定义字体,例如名为SomeFont-RegularSC.otf
and SomeFont-BoldSC.otf
,您可以使用
\newfontfamily\somefont{SomeFont}[
UprightFont = *-Regular ,
SmallCapsFont = *-RegularSC ,
BoldFont = *-Bold ,
BoldFeatures = { SmallCapsFont = *-BoldSC },
% Etc.
Extension = .otf ]
您还可以将此命令放在一个文件中,SomeFont.fontspec
以便您可以\newfontfamily\somefont{SomeFont}
在文档中写入。这样可以避免在所有文档中都留下对某一特定字体版本的依赖。