
¿Es posible definir una nueva serie con fontspec
? Intenté lo siguiente pero...
- arroja un error si la fuente no tiene una versión ligera en lugar de reemplazar la fuente, como
\bfseries
lo hace. En otras palabras, no hay alternativa. - mi
\ltseries
no está desactivado 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}
Si se encuentraValores posibles para \fontseries y \fontshapepero no dice cómo definir una nueva serie. Además, esto es para LaTeX y es NFSS, mientras que yo uso XeTeX con fontspec
.
Respuesta1
No existe una interfaz oficial. Puede hacerlo de esta manera (esta es la sintaxis lualatex, para verificar la sintaxis de xelatex, por ejemplo, eu1lmr.fd). Debe tener en cuenta que no funcionará junto con cambios de fuente locales a través \addfontfeatures
de una local, \fontspec
ya que esto a menudo crea una nueva familia.
\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}
Respuesta2
Con una versión reciente de fontspec
(v2.5a al momento de escribir este artículo) hay unainterfaz oficialpara declarar nuevas formas de fuente: Se puede usar la FontFace
opción para definir una nueva fuente 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}
Esto es mucho más cómodo que usar \DeclareFontShape
. En el ejemplo también agregué la definición \textlt
que faltaba en las otras respuestas.
Respuesta3
La respuesta de Ulrikes funciona bien después de cambiar \DeclareFontShape
en forma XeTeX, así es como se ve:
\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}
El \sffamily
antes \DeclareFontShape
es necesario para que \f@family
tenga el apellido correcto. Al comienzo del documento hay un \normalfont
así \sffamily
que no cambie la fuente del documento aquí...