我从文件中导入了一种字体并将其设置为主字体,如下所示:
\setmainfont{EBGaramond}[
Path = fonts/eb-garamond/,
Extension = .ttf,
UprightFont = *12-Regular,
BoldFont = *08-Regular,
ItalicFont = *12-Italic,
BoldItalicFont = *08-Italic]
我现在想给这个分配一个别名,这样我就可以将主字体更改为其他字体,然后返回到这个字体,而不必再次重复整个块。我似乎找不到办法做到这一点。
答案1
有许多使用 NFSS 和 fontspec 命令切换字体的方法。此页面上的其他答案都很好,我认为 @cfr 的答案可能是最简单和最好的;我只是想总结一下我能想到的所有内容。
挂钩\rmdefault
可能是一个好主意,所以我不建议
\newfontfamily\mainone{...}[...]
\newfontfamily\maintwo{...}[...]
并在文本中途在它们之间切换,因为任何请求的内部命令\mainone
都会切换您选择的字体。\maintwo
\rmfamily
下一个最简单的方法是
\newcommand\switchone{%
\setmainfont{...}[...]%
}
\newcommand\switchtwo{%
\setmainfont{...}[...]%
}
在文档中,您可以使用\switchone
和进行切换\switchtwo
。每次处理选项效率略低,但至少很简单。(与普遍看法相反,重新运行这些命令不应该重新解析和从头开始选择字体,所以它不应该那么慢。)
其他答案建议在设置家庭和提取使用的名称方面有所不同,可以通过以下方式编写
\setmainfont ...
\let\myfamone\rmfamily
...
\let\rmfamily\myfamone\normalfont
或从中提取姓氏\l_fontspec_family_tl
。
以下是另一个类似的例子:
\newfontfamily\mainone{...}[NFSSFamily=rmone,...]
\newfontfamily\maintwo{...}[NFSSFamily=rmtwo,...]
\newcommand\switchmain[1]{\renewcommand\rmdefault{#1}\normalfont}
要在“默认主字体”之间切换,您需要\switchmain{rmone}
和\switchmain{rmtwo}
。此方法的好处是具有最大的灵活性。
最后,正如 Ulrike 在上面的评论中提醒我的那样,您也可以使用.fontspec
文件来实现此目的。通常,.fontspec
文件“应该”反映它们正在加载的字体的名称,但如果您愿意,它们可以完全抽象/语义化。事实上,它们的内容根本不需要写在单独的文件中!
因此,您可以使用完全合理的标记来切换主字体,而不必依赖于定义其他命令,如下所示:
\defaultfontfeatures[myfont]{
Extension = .otf ,
UprightFont = texgyrepagella-regular ,
BoldFont = texgyrepagella-bold ,
% etc
}
...
\setmainfont{myfont}
\section{hello}
hello
从某种程度上来说,我认为这是最简洁的解决方案。我必须仔细思考才能决定这个界面是否真的理想。
答案2
如果您不想将字体用作文档的默认衬线字体,则只需使用\newfontfamily
而不是即可。例如(EB Garamond 的设置有所不同,因为您的设置不适合我的系统):\setmainfont
\documentclass{article}
\usepackage{fontspec}
\newfontfamily\ebgaramondfamily{EB Garamond}
\usepackage{kantlipsum}
\begin{document}
\kant[1]
{\ebgaramondfamily
\kant[2]
\itshape\kant[3]
}
\kant[4]
\end{document}
显然,从印刷术上来说,这将是一个相当糟糕的混合,但为了说明目的,拉丁现代字体和 EBGaramond 字体之间的切换展示了所涉及的机制:
编辑
如果您想要一种简单的方法来切换主文档字体,您可以创建几个方便的命令来更改默认的衬线系列,尽管我不确定这是否是一个好方法:
\documentclass{article}
\usepackage{fontspec}
\newfontfamily\ebgaramondfamily{EB Garamond}
\setmainfont{TeX Gyre Pagella}
\let\tgpdefaultfamily\rmfamily
\newcommand*\activateebg{%
\let\rmfamily\ebgaramondfamily
\rmfamily}
\newcommand*\activatetgp{%
\let\rmfamily\tgpdefaultfamily
\rmfamily}
\usepackage{kantlipsum}
\begin{document}
\kant[1]
\activateebg
\kant[2]
\itshape\kant[3]
\activatetgp
\kant[4]
\upshape
\kant[5]
\end{document}
编辑:感谢 Thérèse 的评论,XeLaTeX 现在可以正常工作。
答案3
\setmainfont
在执行诸如或之类的声明之后\newfontfamily
,分配的家族名称可在
\l_fontspec_family_tl
因此您可以用不同的名称保存它以供日后使用。
\documentclass{article}
\usepackage{fontspec}
\newfontfamily\ebgaramond{EB Garamond}
\ExplSyntaxOn
\tl_gset_eq:NN \ebgaramondfamily \l_fontspec_family_tl
\ExplSyntaxOff
\setmainfont{Futura} % just a very different font
\begin{document}
Some text in the main font
\begingroup
\renewcommand{\rmdefault}{\ebgaramondfamily}\normalfont
Some text in EB Garamond \textit{also in italics}
\endgroup
Some text in the main font
\end{document}
您可能还想保存分配给主字体的家族名称:
\setmainfont{Futura} % just a very different font
\ExplSyntaxOn
\tl_gset_eq:NN \defaultrmfamily \l_fontspec_family_tl
\ExplSyntaxOff
因此您可以\defaultrmfamily
按照与 相同的方式使用\ebgaramondfamily
。