%% $Id: plex-otf-doc.tex 1041 2024-12-05 18:54:53Z herbert $ % % Copying and distribution of this file, with or without modification, % are permitted in any medium, without royalty. \listfiles \PassOptionsToPackage{table}{xcolor} \documentclass[fontsize=11pt,paper=a4,twoside=on,abstract=on,usegeometry]{scrartcl} %\usepackage[a4paper,twoside]{geometry} \usepackage{unicode-math} \usepackage[RM={Scale=0.94}, SS={Scale=0.94}, SScon={Scale=0.94}, TT={Scale=MatchLowercase,FakeStretch=0.9}, DefaultFeatures={Ligatures=TeX} ]{plex-otf} \usepackage{unicodefonttable} \usepackage[english]{babel} %\usepackage[autostyle]{csquotes} %\DeclareQuoteStyle{polish}{,,}{''}{«}{»} \usepackage{biblatex} \addbibresource{\jobname.bib} \usepackage{array,multido} \usepackage{metalogo} % for \XeTeX logo \usepackage{booktabs} % for examples \usepackage{xltabular} % for examples \usepackage{geometry,multicol,hvlogos} % for Wikipedia W \usepackage{hvextern} % for examples \setkeys{hv}{moveToExampleDir,ExampleDir=Examples, showFilename,verbose} \usepackage{listings} \lstset{columns=fixed,basicstyle=\ttfamily\small} \pagestyle{headings} \usepackage[colorlinks,hyperfootnotes=false]{hyperref} % define \code for url-like breaking of typewriter fragments. \ifx\nolinkurl\undefined \let\code\url \else \let\code\nolinkurl \fi % Define \cs to prepend a backslash, and be unbreakable: \DeclareRobustCommand\cs[1]{\mbox{\texttt{\char`\\#1}}} \begin{filecontents*}{demotext0.sty} \newcounter{famcnt}\setcounter{famcnt}{0} \newcommand\CMD[1]{\texttt{\textbackslash#1}} \newcommand\blindtext[1][\rmfamily,\sffamily,\sffamilyCon,\ttfamily]{% \expandafter\@for\expandafter\next\expandafter:\expandafter=#1\do{% \next \noindent \ifcase\thefamcnt \CMD{rmfamily }\or \CMD{sffamily }\or \CMD{sffamilyCon }\or\CMD{ttfamily }\fi \CMD{normalfont}: Sphinx of black quartz judge my vow.\par \CMD{bfseries}: {\bfseries Voyez le brick géant que j’examine près du wharf.\par} \CMD{itshape}: {\itshape Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln.\par} \CMD{slshape}: {\slshape Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln.\par} \CMD{bfseries\textbackslash itshape}: {\bfseries\itshape Pójdźże, kiń tę chmurność w głąb flaszy!\par} \CMD{bfseries\textbackslash slshape}: {\bfseries\slshape Pójdźże, kiń tę chmurność w głąb flaszy!\par}\medskip \stepcounter{famcnt}}} \end{filecontents*} \begin{filecontents*}{demotext1.sty} \newcounter{famcnt}\setcounter{famcnt}{0} \newcommand\CMD[1]{\texttt{\textbackslash#1}} \newcommand\blindtext[1][\rmfamily,\sffamily,\sffamilyCon,\ttfamily]{% \expandafter\@for\expandafter\next\expandafter:\expandafter=#1\do{% \next \noindent \ifcase\thefamcnt \CMD{rmfamily }\or \CMD{sffamily }\or \CMD{sffamilyCon }\or\CMD{ttfamily }\fi \CMD{normalfont}: Sphinx of black quartz judge my vow. \par \CMD{itshape}: {\itshape Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln.\par} \CMD{slshape}: {\slshape Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln.\par} \medskip \stepcounter{famcnt}}} \end{filecontents*} \begin{filecontents*}{demotext2.sty} \newcounter{famcnt}\setcounter{famcnt}{0} \newcommand\CMD[1]{\texttt{\textbackslash#1}} \newcommand\blindtext[1][\rmfamily,\sffamily,\sffamilyCon,\ttfamily]{% \expandafter\@for\expandafter\next\expandafter:\expandafter=#1\do{% \next \noindent \ifcase\thefamcnt \CMD{rmfamily }\or \CMD{sffamily }\or \CMD{sffamilyCon }\or\CMD{ttfamily }\fi \CMD{normalfont}: Sphinx of black quartz judge my vow. \ifnum\thefamcnt<2 \textsc{Sphinx of black quartz judge my vow.}\fi\par \CMD{bfseries}: {\bfseries Voyez le brick géant que j’examine près du wharf. \ifnum\thefamcnt<2 \textsc{Voyez le brick géant que j’examine près du wharf.}\fi\par} \CMD{itshape}: {\itshape Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln. \ifnum\thefamcnt<2 \textsc{Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln.}\fi\par} {\slshape Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln.\par} \CMD{bfseries\textbackslash itshape}: {\bfseries\itshape Pójdźże, kiń tę chmurność w głąb flaszy! \ifnum\thefamcnt<2 \textsc{Pójdźże, kiń tę chmurność w głąb flaszy!}\fi\par} {\bfseries\slshape Vom Ödipuskomplex maßlos gequält, übt Wilfried zyklisches Jodeln.\par} \stepcounter{famcnt}}} \end{filecontents*} \title{Support for the IBM Plex OpenType fonts -- Text and Math} \author{Herbert Voß} \begin{document} \maketitle \tableofcontents \begin{abstract} »With our new corporate typeface, IBM Plex, comes a new set of guidance and best practices. IBM typography is international and modern to reflect our brand and our design principles.«~\cite{git} \end{abstract} \section{Introduction} The package \texttt{plex-otf} supports all families with specific optional arguments: \begin{tabular}{@{} >{\ttfamily}l l l @{}}\\\toprule \emph{name} & \emph{value} &\emph{meaning}\\\midrule mono & true/false & use only the IBM Plex Mono\\ serif & true/false & use only the IBM Plex Serif\\ sans & true/false & use only the IBM Plex Sans\\ math & true/false & use the Plex Math \\ RM & code & options for IBM Plex Serif\\ SS & code & options for IBM Plex Sans\\ SScon & code & options for IBM Plex Sans Condensed\\ TT & code & options for IBM Plex Mono\\ MM & code & options for IBM Plex Math\\ %semibold & true/false & use SemiBold instead of Bold\\ RMSCfont & font & font name for small caps\\ SSSCfont & font & font name for small caps\\ DefaultFeatures & code & for all font styles\\\bottomrule \end{tabular} \bigskip For this documentation we use instead: \begin{verbatim} \usepackage[RM={Scale=0.94}, SS={Scale=0.94}, SScon={Scale=0.94}, TT={Scale=MatchLowercase,FakeStretch=0.9}, DefaultFeatures={Ligatures=Common}]{plex-otf} \end{verbatim} %\clearpage \section{Features} \subsection{Alternate styles} The stylistic sets are available for example by \begin{verbatim} \usepackage[..., RM={StylisticSet=1}, ...]{plex-otf} \end{verbatim} \subsubsection{StylisticSet=1: simple lowercase a} \paragraph{Serif} {(Default a\multido{\iA=224+1}{6}{\symbol{\iA}}\symbol{257}\symbol{259}\symbol{261}) and \fontspec{IBMPlexSerif-Regular.otf}[StylisticSet=1,Scale=0.94]a% \multido{\iA=224+1}{6}{\symbol{\iA}}\symbol{257}\symbol{259}\symbol{261}} \paragraph{Sans Serif} {\sffamily (Default a\multido{\iA=224+1}{6}{\symbol{\iA}}\symbol{257}\symbol{259}\symbol{261}) and \fontspec{IBMPlexSans-Regular.otf}[StylisticSet=1,Scale=0.94]a% \multido{\iA=224+1}{6}{\symbol{\iA}}\symbol{257}\symbol{259}\symbol{261}} \paragraph{Mono} {\ttfamily (Default a\multido{\iA=224+1}{6}{\symbol{\iA}}\symbol{257}\symbol{259}\symbol{261}) and \fontspec{IBMPlexMono-Regular.otf}[StylisticSet=1,Scale=0.94]a% \multido{\iA=224+1}{6}{\symbol{\iA}}\symbol{257}\symbol{259}\symbol{261}} \subsubsection{StylisticSet=2: simple lowercase g} \paragraph{Serif} {(Default g) and \fontspec{IBMPlexSerif-Regular.otf}[StylisticSet=2,Scale=0.94]g} \paragraph{Sans Serif} {\textsf{(Default g) and }\fontspec{IBMPlexSans-Regular.otf}[StylisticSet=2,Scale=0.94]g} \paragraph{Mono} {\texttt{(Default g) and }\fontspec{IBMPlexMono-Regular.otf}[StylisticSet=2,Scale=0.94]g} \subsubsection{StylisticSet=3: slashed zero} {(Default 0) and \fontspec{IBMPlexSerif-Regular.otf}[StylisticSet=3,Scale=0.94]0} \subsubsection{StylisticSet=4: dotted zero} {(Default 0) and \fontspec{IBMPlexSerif-Regular.otf}[StylisticSet=4,Scale=0.94]0} \subsubsection{StylisticSet=4: special lowercase eszett} \paragraph{Serif} {(Default ß) and \fontspec{IBMPlexSerif-Regular.otf}[StylisticSet=5,Scale=0.94]ß} \paragraph{Sans Serif} {\sffamily(Default ß) and \fontspec{IBMPlexSans-Regular.otf}[StylisticSet=5,Scale=0.94]ß} \paragraph{Mono} {\ttfamily(Default ß) and \fontspec{IBMPlexMono-Regular.otf}[StylisticSet=5,Scale=0.94]ß} \subsection{Captital german eszett} It is available with \verb|\SS|$\rightarrow$\SS$\rightarrow$\textsf{\SS}$\rightarrow$\texttt{\SS} (Serif, Sans-Serif, Mono) \subsection{Vertical position} \begin{externalDocument}[ % grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force=true, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \pagestyle{empty} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}]{plex-otf} %StopVisiblePreamble \begin{document} {\addfontfeature{VerticalPosition=Superior} Superior: 1234567890\par} {\addfontfeatures{VerticalPosition=Numerator} Numerator: 1234567890\par} {\addfontfeatures{VerticalPosition=Denominator} Denominator: 1234567890\par} \addfontfeatures{VerticalPosition=ScientificInferior} Scientific Inferior: 1234567890 \end{document} \end{externalDocument} \subsection{Fractions} \begin{externalDocument}[ % grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force=true, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \pagestyle{empty} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}]{plex-otf} %StopVisiblePreamble \begin{document} 1/3 2/3 1/5 2/5 \ldots \par \addfontfeatures{Fractions=On} 1/3 2/3 1/5 2/5 3/5 4/5 1/6 5/6 1/7 1/9 1/8 3/8 5/8 7/8\par 123456/3215731 \end{document} \end{externalDocument} \section{Font macros} The package defines the following macros which sets only the regular and italic font or the bold and bold italic font. \noindent \minipage[t]{0.3\linewidth} \begin{verbatim} Serif: \PlexExtraLightRM \PlexLightRM \PlexThinRM \PlexMediumRM \PlexTextRM \PlexSemiBoldRM \end{verbatim} \endminipage\hfill \minipage[t]{0.3\linewidth} \begin{verbatim} Sans Serif: \PlexExtraLightSS \PlexLightSS \PlexThinSS \PlexMediumSS \PlexTextSS \PlexSemiBoldSS \end{verbatim} \endminipage\hfill \minipage[t]{0.3\linewidth} \begin{verbatim} Sans Serif Condensed: \PlexExtraLightSScon \PlexLightSScon \PlexThinSScon \PlexMediumSScon \PlexTextSScon \PlexSemiBoldSScon \end{verbatim} \endminipage \begin{verbatim} Mono: \PlexExtraLightTT \PlexLightTT \PlexThinTT \PlexMediumTT \PlexTextTT \PlexSemiBoldTT \end{verbatim} \medskip These macros refer to the following styles: \begin{tabular}{@{}l l} ExtraLight & Upright, Italic \\ Light & Upright, Italic \\ Thin & Upright, Italic \\ Medium & Upright, Italic \\ Text & Upright, Italic \\ SemiBold & Bold, BoldItalic \end{tabular} \begin{externalDocument}[ % grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force=true, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \newcommand\demo{Some text in the default font style IBM Plex Serif } \pagestyle{empty} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}]{plex-otf} %StopVisiblePreamble \begin{document} \demo\ Regular\par {\PlexTextRM\demo\ Text\par} {\PlexLightRM\demo\ Light\par} {\PlexExtraLightRM\demo\ ExtraLight\par} {\PlexThinRM\demo\ Thin} \end{document} \end{externalDocument} \section{Special symbols} \begin{tabular}{@{}l@{ $\rightarrow$ }l @{\qquad} l@{ $\rightarrow$ }l @{}} %\verb|\IBM| & \IBM & \verb|\upleftarrow| & \upleftarrow\\ %\verb|\IBM[1]| & \IBM[1]& \multicolumn{2}{c}{} & \verb|\uprightarrow| & \uprightarrow\\ %\verb|\IBM[2]| & \IBM[2]& \multicolumn{2}{c}{} & \verb|\downleftarrow| & \downleftarrow\\ %\verb|\IBM[3]| & \IBM[3]& \multicolumn{2}{c}{} & \verb|\downrightarrow| & \downrightarrow\\ %\verb|\IBM[4]| & \IBM[4]& \multicolumn{2}{c}{} & \verb|\leftturn| & \leftturn\\ \verb|\CE| & \CE & \verb|\rightturn| & \rightturn\\ \verb|\FCC| & \FCC & \verb|\fullleftturn| & \fullleftturn \\ \multicolumn{2}{c}{} & \verb|\fullrightturn| & \fullrightturn\\ \end{tabular} \section{Examples without special Settings} \subsection{The default} By default the Plex font family has no small caps and no special slanted version. \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \usepackage{demotext0} \pagestyle{empty} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} \clearpage \subsection{Semibold} \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \pagestyle{empty} \usepackage{demotext0} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}, RMstyle=Semibold, SSstyle=Semibold, SSconstyle=Semibold, TTstyle=Semibold]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} \clearpage \subsection{Thin} This makes only sense with the the \verb|Semibold| feature or not using bold characters. \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \pagestyle{empty} \usepackage{demotext1} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}, RMstyle=Thin, SSstyle=Thin, SSconstyle=Thin, TTstyle=Thin]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} \clearpage \subsection{Extra Light} This makes only sense with the the \verb|Semibold| feature or not using bold characters. \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \pagestyle{empty} \usepackage{demotext1} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}, RMstyle=ExtraLight, SSstyle=ExtraLight, SSconstyle=ExtraLight, TTstyle=ExtraLight]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} \clearpage \subsection{Light} This makes only sense with the the \verb|Semibold| feature or not using bold characters. \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \pagestyle{empty} \usepackage{demotext1} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}, RMstyle=Light, SSstyle=Light, SSconstyle=Light, TTstyle=Light]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} %\newpage \clearpage \subsection{Medium} This makes sense with the the \verb|Semibold| feature. \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \pagestyle{empty} \usepackage{demotext0} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}, RMstyle={Medium,Semibold}, SSstyle={Medium,Semibold}, SSconstyle={Medium,Semibold}, TTstyle={Medium,Semibold}]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} \newpage \subsection{Text} This makes sense with the the \verb|Semibold| feature. \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \pagestyle{empty} \usepackage{demotext0} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}, RMstyle={Text,Semibold}, SSstyle={Text,Semibold}, SSconstyle={Text,Semibold}, TTstyle={Text,Semibold}]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} \clearpage \section{Examples with using Small Caps fonts} As already mentioned, the Plex font family has no small caps. If you need one then you can define another font for the small caps. If the font has to structure like the \TeX\ Gyre fonts: \begin{verbatim} texgyreheros-regular.otf texgyreheros-bold.otf texgyreheros-italic.otf texgyreheros-bolditalic.otf \end{verbatim} then you have to define all combinations yourself \begin{verbatim} \usepackage[SS={ SmallCapsFont = texgyreheros-regular, SmallCapsFeatures = {Letters=SmallCaps,Scale=MatchUppercase}, BoldFeatures = { SmallCapsFont=texgyreheros-bold}, ItalicFeatures = { SmallCapsFont=texgyreheros-italic}, BoldItalicFeatures= { SmallCapsFont=texgyreheros-bolditalic}}]{plex-otf} \end{verbatim} %\clearpage \begin{externalDocument}[ grfOptions={width=\linewidth}, frame, compiler=lualatex, crop, force, runs=2,code,docType=latex, frame, showFilename, align=\centering, ]{plex-otf} \documentclass{article} \usepackage[a4paper]{geometry} \usepackage[ngerman]{babel} \usepackage[autostyle]{csquotes} \usepackage{demotext2} \pagestyle{empty} %StartVisiblePreamble \usepackage[DefaultFeatures={Scale=0.94}, RMSCfont=texgyretermes, SSSCfont=texgyreheros]{plex-otf} %StopVisiblePreamble \begin{document} \blindtext \end{document} \end{externalDocument} \section{Math examples} There is only the regular version of the math font \cs{mathnormal}. The bold version is faked by the option \texttt{FakeBold}: \begin{verbatim} \setmathfont[\PlexMM@features,version=normal]{IBMPlexMath-Regular.otf} \setmathfont[\PlexMM@features,FakeBold=3,version=bold]{IBMPlexMath-Regular.otf} \end{verbatim} \begin{verbatim} Here's some text. And here's some math: \[ \phi(x)=\int_{-\infty}^{x} e^{-x^{2}/2} \] And now bold math: \boldmath \[ \phi(x)=\int_{-\infty}^{x} e^{-x^{2}/2} \] \unboldmath $f(x)=13\int$ \boldmath$f(x)=13 \int$\unboldmath Euro and copyright symbols are available: \texteuro\ \textcopyright. \end{verbatim} Here's some text. And here's some math: \[ \phi(x)=\int_{-\infty}^{x} e^{-x^{2}/2} \] And now bold math: \boldmath \[ \phi(x)=\int_{-\infty}^{x} e^{-x^{2}/2} \] \unboldmath $f(x)=13\int$ \boldmath$f(x)=13 \int$\unboldmath Euro and copyright symbols are available: \texteuro\ \textcopyright. \section{Closing} The font list of this documentation is: \scriptsize\ttfamily \expandafter\IfFileExists\expandafter{\jobname.fonts}% {\lstinputlisting{\jobname.fonts}}{} \normalfont\rmfamily \clearpage \section{The font files} The fonts are saved in the systems font directory or in the TDS (\TeX\ Directory Structure): % list of this documentation is: %\rightmargin=-1cm \begin{multicols}{2} \runExtCmd[redirect]{ls fonts/}{\jobname} \end{multicols} %\scriptsize\ttfamily %\expandafter\IfFileExists\expandafter{\jobname.fonts}% % {\lstinputlisting[xrightmargin=-1cm]{\jobname.fonts}}{} %\normalfont\rmfamily %\rightmargin=0cm \clearpage \newgeometry{%margin=1cm,bmargin=2cm, tmargin=1cm,bmargin=1cm,includeheadfoot} \section{The Glyphs} \subsection{Default Serif style} \defaultfontfeatures{Ligatures=TeXOff} Command: \cs{rmfamily} \displayfonttable{IBMPlexSerif-Regular.otf}%[Scale=0.95] \subsection{Default Sans style} Command: \cs{sffamily} \displayfonttable{IBMPlexSans-Regular.otf}%[Scale=0.95] \subsection{Default Sans Condensed style} Command: \cs{sffamilyCon} \displayfonttable{IBMPlexSansCondensed-Regular.otf}%[Scale=0.95] \subsection{Default Mono style} Command: \cs{ttfamily} \displayfonttable{IBMPlexMono-Regular.otf}%[Scale=0.95] \nocite{*} \printbibliography \end{document}