将通过 \newfontfamily 定义的字体设置为主字体

将通过 \newfontfamily 定义的字体设置为主字体

我有一些特定的字体系列,我想在不同的文档中重复使用它们。我假设我会在共享的 eg 文件中执行如下操作,而不是在每个文档中复制粘贴字体定义montserrat.sty

\newfontfamily{\Montserrat}[
  Path=fonts/montserrat/,
  Extension = .ttf,
  Ligatures = TeX,
  UprightFont = *-Regular,
  BoldFont = *-Bold,
  ItalicFont = *-Italic,
  BoldItalicFont = *-BoldItalic,
  FontFace={xl}{n}{*-ExtraLight},
  FontFace={xl}{it}{*-ExtraLightItalic},
  FontFace={l}{n}{*-Light},
  FontFace={l}{it}{*-LightItalic},
  FontFace={mb}{n}{*-Medium},
  FontFace={mb}{it}{*-MediumItalic},
  FontFace={k}{n}{*-Black},
  FontFace={k}{it}{*-BlackItalic},
]{Montserrat}

有了这个,我就可以在 Beamer 主题中很好地使用该字体:

\RequirePackage{montserrat}
\setbeamerfont{title}{family=\Montserrat, size={\fontsize{48}{48}}, series=\bfseries}

但我似乎无法找到将其用作常规文本文档的主要字体的方法:

\documentclass{article}

\usepackage{fontspec}
\usepackage{montserrat}

\setmainfont{\Montserrat}

失败[fontspec] The font "\Montserrat " cannot be found。我可以newfontfamily重复我在调用中传递给的相同参数setmainfont,但这正是我想避免的——我有几个不同的文档重复使用了几种不同的字体。

有没有办法将通过定义的字体设置newfontfamily为文档的主字体?

答案1

montserrat.sty这是你的文件的骨架

\ProvidesPackage{montserrat}

\RequirePackage{fontspec}
\newfontfamily{\Montserrat}[
  NFSSFamily=Montserrat,% <--- the key
  %Path=fonts/montserrat/,% <--- I can only use the TeX Live ones
  Extension = .otf,% <--- I have OpenType fonts
  Ligatures = TeX,
  UprightFont = *-Regular,
  BoldFont = *-Bold,
  ItalicFont = *-Italic,
  BoldItalicFont = *-BoldItalic,
  FontFace={xl}{n}{*-ExtraLight},
  FontFace={xl}{it}{*-ExtraLightItalic},
  FontFace={l}{n}{*-Light},
  FontFace={l}{it}{*-LightItalic},
  FontFace={mb}{n}{*-Medium},
  FontFace={mb}{it}{*-MediumItalic},
  FontFace={k}{n}{*-Black},
  FontFace={k}{it}{*-BlackItalic},
]{Montserrat}

\DeclareOption{default}{%
  \renewcommand{\familydefault}{Montserrat}%
}
\ProcessOptions\relax

现在有几个测试文件。

\documentclass{article}
\usepackage[default]{montserrat}

\begin{document}

This is in Montserrat.

{\fontseries{mb}\selectfont Montserrat}

{\fontseries{k}\selectfont Montserrat}

\end{document}

在此处输入图片描述

\documentclass{article}
\usepackage{montserrat}

\begin{document}

This is standard.

{\Montserrat
This is in Montserrat.

{\fontseries{mb}\selectfont Montserrat}

{\fontseries{k}\selectfont Montserrat}
}

\end{document}

在此处输入图片描述

您可能还想添加

\DeclareOption{sfdefault}{%
  \renewcommand{\sfdefault}{Montserrat}%
}

因此\usepackage[sfdefault]{montserrat}将把 Montserrat 定义为默认的无衬线字体(类似于\setsansfont)。

按照beamer您的做法\usepackage{montserrat}以及您在帖子中表明的声明。

答案2

如果蒙特塞拉特字体已在您的系统上下载并适当激活,如果您只需要四种基本或默认的字体粗细/形状组合——直立、斜体、粗体和粗斜体——我认为没有理由不运行

\usepackage{fontspec}
\setmainfont{MontSerrat}

在序言中。

当然,如果你想使用一些非默认的重量/形状组合,你可以替换\setmainfont{MontSerrat}为,比如说,

\setmainfont{MontSerrat}%
  [Path=/usr/local/texlive/2022/texmf-dist/fonts/opentype/public/montserrat/,
   Extension=.otf,
   UprightFont=Montserrat-ExtraLight,
   ItalicFont=Montserrat-ExtraLightItalic,
   BoldFont=Montserrat-Black,
   BoldItalicFont=Montserrat-BlackItalic]

相关内容