Definieren Sie ein neues \XXseries-Makro für helle Schriftarten

Definieren Sie ein neues \XXseries-Makro für helle Schriftarten

Ist es möglich, mit eine neue Serie zu definieren fontspec? Ich habe Folgendes versucht, aber …

  1. es wird ein Fehler ausgegeben, wenn es für die Schriftart keine Light-Version gibt, anstatt die Schriftart zu ersetzen, wie \bfserieses der Fall ist. Mit anderen Worten, es gibt keinen Fallback.
  2. mein \ltserieswird 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

\addfontfeaturesEs 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, \fontspecda 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 FontFaceOption 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, \textltdie in den anderen Antworten fehlte.

Antwort3

Die Antwort von Ulrike funktioniert nach der Änderung \DeclareFontShapeim 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 \sffamilyVorher \DeclareFontShapeist notwendig, damit \f@familyder richtige Familienname vorhanden ist. Am Anfang des Dokuments befindet sich ein , \normalfontdamit \sffamilydie Schriftart für das Dokument hier nicht geändert wird …

verwandte Informationen