ライトフォント用の新しい\XXseriesマクロを定義する

ライトフォント用の新しい\XXseriesマクロを定義する

で新しいシリーズを定義することは可能ですかfontspec? 次のことを試しましたが…

  1. フォントにライト バージョンがない場合、 のようにフォントを置き換えるのではなく、エラーをスローします\bfseries。つまり、フォールバックはありません。
  2. 私の\ltseriesは によって非アクティブ化されていません\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}

見つかった場合\fontseries と \fontshape に指定できる値しかし、新しいシリーズを定義する方法は説明されていません。さらに、これは LaTeX 用で NFSS ですが、私は で XeTeX を使用していますfontspec

答え1

公式のインターフェースはありません。この方法で実行できます (これは lualatex-syntax で、xelatex 構文チェック用です (例: eu1lmr.fd))。多くの場合、新しいファミリが作成されるため、ローカル フォントの変更\addfontfeaturesやローカル フォントの変更とは連携しないことに注意してください。\fontspec

\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}

答え2

の最新バージョンfontspec(執筆時点ではv2.5a)では、公式インターフェース新しいフォント形状を宣言するには:FontFaceオプションを使用して新しい 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}

これは を使用するよりもはるかに快適です。例では、他の回答に欠けていた\DeclareFontShapeの定義も追加しました。\textlt

答え3

Ulrikes の回答は、\DeclareFontShapeXeTeX 方式で変更すると正常に機能します。次のようになります。

\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}

\sffamilyには、正しい姓を持たせる\DeclareFontShapeために必要です。 文書の先頭に があるので、ここでは文書のフォントは変更されません…\f@family\normalfont\sffamily

関連情報