是否可以使用 定义新系列fontspec
?我尝试了以下方法,但……
- 如果字体没有精简版,它会抛出错误,而不是像上面那样替换字体
\bfseries
。换句话说,没有后备方案。 - 我的
\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
不会在此处更改文档的字体……