编辑

编辑

我从文件中导入了一种字体并将其设置为主字体,如下所示:

\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

相关内容