
É possível definir uma nova série com fontspec
? Eu tentei o seguinte, mas…
- gera um erro se a fonte não tiver uma versão light em vez de substituí-la, como
\bfseries
acontece. Em outras palavras, não há alternativa. - my
\ltseries
não está desativado por\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}
Se achadoValores possíveis para \fontseries e \fontshapemas não diz como definir uma nova série. Além disso, isso é para LaTeX e é NFSS, enquanto estou usando XeTeX com fontspec
.
Responder1
Não existe uma interface oficial. Você pode fazer isso desta maneira (esta é a sintaxe lualatex, para a verificação da sintaxe xelatex, por exemplo, eu1lmr.fd). Você deve estar ciente de que isso não funcionará junto com alterações de fonte local \addfontfeatures
ou local, \fontspec
pois isso geralmente cria uma nova família.
\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}
Responder2
Com uma versão recente fontspec
(v2.5a no momento da escrita), há uminterface oficialpara declarar novas formas de fonte: Pode-se usar a FontFace
opção para definir uma nova fonte 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}
Isso é muito mais confortável do que usar \DeclareFontShape
. No exemplo também adicionei a definição do \textlt
que faltava nas outras respostas.
Responder3
A resposta de Ulrikes funciona bem depois de mudar \DeclareFontShape
no modo XeTeX, é assim que fica:
\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}
O \sffamily
antes \DeclareFontShape
é necessário para deixar \f@family
ter o sobrenome correto. No início do documento há um \normalfont
aviso \sffamily
para não alterar a fonte do documento aqui…