Defina uma nova macro \XXseries para fontes claras

Defina uma nova macro \XXseries para fontes claras

É possível definir uma nova série com fontspec? Eu tentei o seguinte, mas…

  1. gera um erro se a fonte não tiver uma versão light em vez de substituí-la, como \bfseriesacontece. Em outras palavras, não há alternativa.
  2. my \ltseriesnã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 \addfontfeaturesou local, \fontspecpois 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 FontFaceopçã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 \textltque faltava nas outras respostas.

Responder3

A resposta de Ulrikes funciona bem depois de mudar \DeclareFontShapeno 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 \sffamilyantes \DeclareFontShapeé necessário para deixar \f@familyter o sobrenome correto. No início do documento há um \normalfontaviso \sffamilypara não alterar a fonte do documento aqui…

informação relacionada