
Возможно ли определить новую серию с помощью 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
или local, \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
Ответ Ульрикса отлично работает после изменения \DeclareFontShape
в XeTeX-way, вот как он выглядит:
\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