
Ist es möglich, mit eine neue Serie zu definieren fontspec
? Ich habe Folgendes versucht, aber …
- es wird ein Fehler ausgegeben, wenn es für die Schriftart keine Light-Version gibt, anstatt die Schriftart zu ersetzen, wie
\bfseries
es der Fall ist. Mit anderen Worten, es gibt keinen Fallback. - mein
\ltseries
wird nicht durch deaktiviert\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}
Wenn gefundenMögliche Werte für \fontseries und \fontshapeaber es wird nicht erklärt, wie eine neue Reihe definiert wird. Außerdem ist dies für LaTeX und es ist NFSS, während ich XeTeX mit verwende fontspec
.
Antwort1
\addfontfeatures
Es gibt keine offizielle Schnittstelle. Sie können es auf diese Weise tun (das ist die Lualatex-Syntax, für die Xelatex-Syntaxprüfung z. B. eu1lmr.fd). Sie sollten sich bewusst sein, dass es nicht mit lokalen Schriftänderungen oder einer lokalen Version zusammenarbeitet, \fontspec
da dadurch häufig eine neue Familie erstellt wird.
\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}
Antwort2
Mit einer aktuellen Version fontspec
(v2.5a zum Zeitpunkt des Schreibens) gibt es eineoffizielle Schnittstelleum neue Schriftformen zu deklarieren: Man kann die FontFace
Option verwenden, um eine neue NFSS-Schriftart zu definieren:
\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}
Dies ist wesentlich komfortabler als die Verwendung von \DeclareFontShape
. Im Beispiel habe ich auch die Definition von hinzugefügt, \textlt
die in den anderen Antworten fehlte.
Antwort3
Die Antwort von Ulrike funktioniert nach der Änderung \DeclareFontShape
im XeTeX-Stil einwandfrei und sieht folgendermaßen aus:
\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}
Das \sffamily
Vorher \DeclareFontShape
ist notwendig, damit \f@family
der richtige Familienname vorhanden ist. Am Anfang des Dokuments befindet sich ein , \normalfont
damit \sffamily
die Schriftart für das Dokument hier nicht geändert wird …