为浅色字体定义新的 \XXseries 宏

为浅色字体定义新的 \XXseries 宏

是否可以使用 定义新系列fontspec?我尝试了以下方法,但……

  1. 如果字体没有精简版,它会抛出错误,而不是像上面那样替换字体\bfseries。换句话说,没有后备方案。
  2. 我的\ltseries未被停用\mdseries
\documentclass{article}

\usepackage{fontspec}
\setmainfont{Source Sans Pro}
   % http://www.google.com/fonts/specimen/Source+Sans+Pro

\newcommand{\ltseries}{%
   \addfontfeatures{UprightFont={* Light},ItalicFont={* Light Italic}}%
}

\begin{document}
\ltseries
Light

\mdseries
Regular

\bfseries
Bold
\end{document}

如果发现\fontseries 和 \fontshape 的可能值但它没有说明如何定义新系列。此外,这是针对 LaTeX 及其 NFSS 的,而我使用的是 XeTeX 和fontspec

答案1

没有官方界面。您可以这样做(这是 lualatex-syntax,用于 xelatex 语法检查,例如 eu1lmr.fd)。您应该知道,它不会与本地字体更改\addfontfeatures或本地字体一起使用\fontspec,因为这通常会创建一个新的系列。

\documentclass{article}

\usepackage{fontspec}
\setmainfont{Source Sans Pro}

\normalfont
\makeatletter
\DeclareFontShape{\f@encoding}{\f@family}{l}{n}%
     {<->    name:sourcesanspro-light:script=latn;+trep;+tlig;
      }{}

\DeclareFontShape{\f@encoding}{\f@family}{l}{it}%
     {<->    name:sourcesanspro-lightit:script=latn;+trep;+tlig;
      }{}
\makeatother

\DeclareRobustCommand{\ltseries}{%
\fontseries{l}\selectfont}

\begin{document}
\ltseries
Light

\mdseries
Regular

\bfseries
Bold

 \normalfont
 {\addfontfeatures{Ligatures=NoCommon} abc \ltseries abc}

\end{document}

答案2

最新版本fontspec(撰写本文时为 v2.5a)有一个官方接口声明新的字体形状:可以使用FontFace选项定义新的 NFSS 字体:

\documentclass{article}

\usepackage{fontspec}
\setsansfont[
   FontFace = {lt}{n}{SourceSansPro-Light},
   FontFace = {lt}{it}{SourceSansPro-LightIt},
]{Source Sans Pro}

\DeclareRobustCommand{\ltseries}{\fontseries{lt}\selectfont}
\DeclareTextFontCommand{\textsi}{\sishape}

\begin{document}
\ltseries
Light \textit{Italic} (not available) 

\mdseries
Regular \textit{Italic}

\bfseries
Bold \textit{Italic}

\sffamily
\ltseries
Light \textit{Italic}

\mdseries
Regular \textit{Italic}

\bfseries
Bold \textit{Italic}
\end{document}

这比使用 舒服多了\DeclareFontShape。在示例中,我还添加了\textlt其他答案中缺少的定义。

答案3

Ulrikes 的答案在\DeclareFontShape以 XeTeX 方式更改后可以正常工作,如下所示:

\documentclass{article}

\usepackage{fontspec}
\setsansfont{Source Sans Pro}
   % http://www.google.com/fonts/specimen/Source+Sans+Pro

\begingroup % \DeclareFontShape acts globally
\makeatletter
\sffamily

\DeclareFontShape{\f@encoding}{\f@family}{l}{n}%
     {<->    "[SourceSansPro-Light]:mapping=tex-text"
      }{}
\DeclareFontShape{\f@encoding}{\f@family}{l}{it}%
     {<->    "[SourceSansPro-LightIt]:mapping=tex-text"
      }{}
\endgroup % removes the effects of \sffamily and \makeatletter

\DeclareRobustCommand{\ltseries}{%
  \fontseries{l}\selectfont}

\makeatother

\begin{document}
\ltseries
Light (not available)

\mdseries
Regular

\bfseries
Bold

\sffamily
\ltseries
Light

\mdseries
Regular

\bfseries
Bold
\end{document}

\sffamily之前的内容\DeclareFontShape是必要的,以便\f@family拥有正确的姓氏。在文档开头有一个,\normalfont因此\sffamily不会在此处更改文档的字体……

相关内容