sourceserifpro/tex/latex/sourceserifpro/sourceserifpro.sty

227 lines
6.0 KiB
TeX

% Source Serif Pro for LaTeX
%
% Silke Hofstra, tex@slxh.nl
%
% This file selects either the OTF or the TYPE1 fonts based on
% the LaTeX engine used.
%
% Licenced under the LPPL v1.3 or higher.
%
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{sourceserifpro}[2018/11/10 v1.4 Adobe's Source Serif Pro typeface]
\RequirePackage{ifxetex,ifluatex,xkeyval}
% Switches
\newif\ifsourceserifpro@otf
\newif\ifsourceserifpro@default
\newif\ifsourceserifpro@rmdefault
\newif\ifsourceserifpro@oldstyle
\newif\ifsourceserifpro@tabular
\newif\ifsourceserifpro@black
\newif\ifsourceserifpro@semibold
\newif\ifsourceserifpro@light
\newif\ifsourceserifpro@extralight
% Scaling command
\newcommand*{\SourceSerifPro@scale}{1}
% Use OpenType fonts for XeTeX and LuaTeX.
\ifxetex
\sourceserifpro@otftrue
\else
\ifluatex
\sourceserifpro@otftrue
\fi
\fi
\DeclareOptionX{lining} {\sourceserifpro@oldstylefalse}
\DeclareOptionX{nf} {\sourceserifpro@oldstylefalse}
\DeclareOptionX{lf} {\sourceserifpro@oldstylefalse}
\DeclareOptionX{oldstyle} {\sourceserifpro@oldstyletrue}
\DeclareOptionX{osf} {\sourceserifpro@oldstyletrue}
\DeclareOptionX{tabular} {\sourceserifpro@tabulartrue}
\DeclareOptionX{proportional}{\sourceserifpro@tabularfalse}
\DeclareOptionX{black} {\sourceserifpro@blacktrue \sourceserifpro@semiboldfalse}
\DeclareOptionX{semibold} {\sourceserifpro@blackfalse\sourceserifpro@semiboldtrue}
\DeclareOptionX{bold} {\sourceserifpro@blackfalse\sourceserifpro@semiboldfalse}
\DeclareOptionX{light} {\sourceserifpro@lighttrue \sourceserifpro@extralightfalse}
\DeclareOptionX{extralight} {\sourceserifpro@lightfalse\sourceserifpro@extralighttrue}
\DeclareOptionX{regular} {\sourceserifpro@lightfalse\sourceserifpro@extralightfalse}
\DeclareOptionX{scale} {\renewcommand*{\SourceSerifPro@scale}{#1}}
\DeclareOptionX{scaled} {\renewcommand*{\SourceSerifPro@scale}{#1}}
\DeclareOptionX{default} {\sourceserifpro@defaulttrue}
\DeclareOptionX{rmdefault} {\sourceserifpro@rmdefaulttrue}
\DeclareOptionX{normdefault} {\sourceserifpro@rmdefaultfalse}
\DeclareOptionX{type1} {\sourceserifpro@otffalse}
\DeclareOptionX{t1} {\sourceserifpro@otffalse}
\DeclareOptionX{opentype} {\sourceserifpro@otftrue}
\DeclareOptionX{otf} {\sourceserifpro@otftrue}
% Default options
\ExecuteOptionsX{rmdefault,lining,proportional,bold,regular}
\ProcessOptionsX\relax
% Load OpenType files
\ifsourceserifpro@otf
\RequirePackage{fontspec}
% Oldstyle/Lining
\ifsourceserifpro@oldstyle
\def\sourceserifpro@figurestyle{OldStyle}
\else
\def\sourceserifpro@figurestyle{}
\fi
% Tabular/Proportional
\ifsourceserifpro@tabular
\def\sourceserifpro@figurealign{Monospaced}
\else
\def\sourceserifpro@figurealign{Proportional}
\fi
% Black/Semibold/Bold
\ifsourceserifpro@black
\def\sourceserifpro@boldstyle{Black}
\else
\ifsourceserifpro@semibold
\def\sourceserifpro@boldstyle{Semibold}
\else
\def\sourceserifpro@boldstyle{Bold}
\fi
\fi
% Light/ExtraLight/Regular
\ifsourceserifpro@light
\def\sourceserifpro@regstyle{Light}
\else
\ifsourceserifpro@extralight
\def\sourceserifpro@regstyle{ExtraLight}
\else
\def\sourceserifpro@regstyle{Regular}
\fi
\fi
% Shared features
\defaultfontfeatures{
Ligatures = TeX ,
Numbers = {\sourceserifpro@figurealign , \sourceserifpro@figurestyle } ,
Scale = \SourceSerifPro@scale ,
Extension = .otf }
% Serif font
\ifsourceserifpro@rmdefault
\setmainfont
[ UprightFont = *-\sourceserifpro@regstyle ,
ItalicFont = *-\sourceserifpro@regstyle It ,
BoldFont = *-\sourceserifpro@boldstyle ,
BoldItalicFont = *-\sourceserifpro@boldstyle It ]
{SourceSerifPro}
\fi
% Font families
% Regular/Bold
\newfontfamily\sourceserifpro
[ UprightFont = *-Regular ,
ItalicFont = *-RegularIt ,
BoldFont = *-Bold ,
BoldItalicFont = *-BoldIt ]
{SourceSerifPro}
% Light/Semibold
\newfontfamily\sourceserifprolight
[ UprightFont = *-Light ,
ItalicFont = *-LightIt ,
BoldFont = *-Semibold ,
BoldItalicFont = *-SemiboldIt ]
{SourceSerifPro}
% ExtraLight/Black
\newfontfamily\sourceserifproextreme
[ UprightFont = *-ExtraLight ,
ItalicFont = *-ExtraLightIt ,
BoldFont = *-Black ,
BoldItalicFont = *-BlackIt ]
{SourceSerifPro}
% Lining figures
\newfontfamily\sourceserifprolf
[ Numbers = \sourceserifpro@figurealign ,
UprightFont = *-\sourceserifpro@regstyle ,
ItalicFont = *-\sourceserifpro@regstyle It ,
BoldFont = *-\sourceserifpro@boldstyle ,
BoldItalicFont = *-\sourceserifpro@boldstyle It ]
{SourceSerifPro}
% Dont keep all default font features
\defaultfontfeatures{}
% Load type1 font.
\else
\RequirePackage[OT1,LY1,T1]{fontenc}
\RequirePackage{mweights}
% Oldstyle/Lining
\ifsourceserifpro@oldstyle
\def\sourceserifpro@figurestyle{OsF}
\else
\def\sourceserifpro@figurestyle{LF}
\fi
% Tabular/Proportional
\ifsourceserifpro@tabular
\def\sourceserifpro@figurealign{T}
\else
\def\sourceserifpro@figurealign{}
\fi
% Black/Semibold/Bold
\ifsourceserifpro@black
\def\bfseries@rm{k}
\else
\ifsourceserifpro@semibold
\def\bfseries@rm{sb}
\else
\def\bfseries@rm{b}
\fi
\fi
% Light/ExtraLight/Regular
\ifsourceserifpro@light
\def\mdseries@rm{l}
\else
\ifsourceserifpro@extralight
\def\mdseries@rm{el}
\else
\def\mdseries@rm{m}
\fi
\fi
% Sans serif font
\ifsourceserifpro@rmdefault
\edef\rmdefault{SourceSerifPro-\sourceserifpro@figurealign\sourceserifpro@figurestyle}
\fi
% If Source Serif Pro is the default font \oldstylenums needs a new definition.
\let\nativeoldstylenums\oldstylenums
\ifsourceserifpro@rmdefault
\renewcommand*\oldstylenums[1]{%
\begingroup
\ifmmode
\mathgroup\symletters #1%
\else
\fontfamily{SourceSerifPro-\sourceserifpro@figurealign OsF}\selectfont #1%
\fi
\endgroup
}
\edef\seriesdefault{\mdseries@rm}
\fi
\fi
% Set default font family
\ifsourceserifpro@default
\edef\familydefault{\rmdefault}
\fi
\endinput