This is an answer-sized comment, but more of a question, in the end.
Now with fontspec
and xelatex/lualatex allowing access to the Unicode universe and to system fonts:
Given the multi-dimensionality of fonts
in the sense of
weight: thin, light, medium, bold, black, etc
italic shape: italic, upright
smallcaps shape: smallcaps, not smallcaps
width: normal, condensed, extra-condensed, wide, etc
such that, taking Noto Serif
as an example, we have normal/italic, by various weights and widths, like so:
and the smallcaps version:
with the code for all this, defining both font commands and font switches for all the combinations:
MWE
\documentclass[12pt]{article}
\usepackage{xcolor}
\pagecolor{red!3}
\usepackage{fontspec}
\setromanfont{Noto Serif}[
FontFace={ul}{n}{Font=* Thin},
FontFace={el}{n}{Font=* ExtraLight},
FontFace={l}{n}{Font=* Light},
FontFace={m}{n}{Font=* Medium},
FontFace={sb}{n}{Font=* SemiBold},
FontFace={b}{n}{Font=* Bold},
FontFace={eb}{n}{Font=* ExtraBold},
FontFace={xb}{n}{Font=* Black},%=========================
FontFace={ulc}{n}{Font=* Condensed Thin},
FontFace={elc}{n}{Font=* Condensed ExtraLight},
FontFace={lc}{n}{Font=* Condensed Light},
FontFace={mc}{n}{Font=* Condensed Medium},
FontFace={sbc}{n}{Font=* Condensed SemiBold},
FontFace={bc}{n}{Font=* Condensed Bold},
FontFace={ebc}{n}{Font=* Condensed ExtraBold},
FontFace={xbc}{n}{Font=* Condensed Black},%====================
FontFace={ul}{i}{Font=* Thin Italic},
FontFace={el}{i}{Font=* ExtraLight Italic},
FontFace={l}{i}{Font=* Light Italic},
FontFace={m}{i}{Font=* Medium Italic},
FontFace={sb}{i}{Font=* SemiBold Italic},
FontFace={b}{i}{Font=* Bold Italic},
FontFace={eb}{i}{Font=* ExtraBold Italic},
FontFace={xb}{i}{Font=* Black Italic},%===========================
FontFace={ulc}{i}{Font=* Condensed Thin Italic},
FontFace={elc}{i}{Font=* Condensed ExtraLight Italic},
FontFace={lc}{i}{Font=* Condensed Light Italic},
FontFace={mc}{i}{Font=* Condensed Medium Italic},
FontFace={sbc}{i}{Font=* Condensed SemiBold Italic},
FontFace={bc}{i}{Font=* Condensed Bold Italic},
FontFace={ebc}{i}{Font=* Condensed ExtraBold Italic},
FontFace={xbc}{i}{Font=* Condensed Black Italic},%===================
FontFace={ulsc}{s}{Font=* Thin,SmallCapsFont={* Thin},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={elsc}{s}{Font=* ExtraLight,SmallCapsFont={* ExtraLight},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={lsc}{s}{Font=* Light,SmallCapsFont={* Light},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={msc}{s}{Font=* Medium,SmallCapsFont={* Medium},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={sbsc}{s}{Font=* SemiBold,SmallCapsFont={* SemiBold},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={bsc}{s}{Font=* Bold,SmallCapsFont={* Bold},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={ebsc}{s}{Font=* ExtraBold,SmallCapsFont={* ExtraBold},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={xbsc}{s}{Font=* Black,SmallCapsFont={* Black},SmallCapsFeatures={Letters=SmallCaps},},%=========================
FontFace={ulcsc}{s}{Font=* Condensed Thin,SmallCapsFont={* Condensed Thin},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={elcsc}{s}{Font=* Condensed ExtraLight,SmallCapsFont={* Condensed ExtraLight},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={lcsc}{s}{Font=* Condensed Light,SmallCapsFont={* Condensed Light},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={mcsc}{s}{Font=* Condensed Medium,SmallCapsFont={* Condensed Medium},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={sbcsc}{s}{Font=* Condensed SemiBold,SmallCapsFont={* Condensed SemiBold},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={bcsc}{s}{Font=* Condensed Bold,SmallCapsFont={* Condensed Bold},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={ebcsc}{s}{Font=* Condensed ExtraBold,SmallCapsFont={* Condensed ExtraBold},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={xbcsc}{s}{Font=* Condensed Black,SmallCapsFont={* Condensed Black},SmallCapsFeatures={Letters=SmallCaps},},%====================
FontFace={ulsci}{i}{Font=* Thin Italic,SmallCapsFont={* Thin Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={elsci}{i}{Font=* ExtraLight Italic,SmallCapsFont={* ExtraLight Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={lsci}{i}{Font=* Light Italic,SmallCapsFont={* Light Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={msci}{i}{Font=* Medium Italic,SmallCapsFont={* Medium Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={sbsci}{i}{Font=* SemiBold Italic,SmallCapsFont={* SemiBold Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={bsci}{i}{Font=* Bold Italic,SmallCapsFont={* Bold Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={ebsci}{i}{Font=* ExtraBold Italic,SmallCapsFont={* ExtraBold Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={xbsci}{i}{Font=* Black Italic,SmallCapsFont={* Black Italic},SmallCapsFeatures={Letters=SmallCaps},},%=========================
FontFace={ulcsci}{i}{Font=* Condensed Thin Italic,SmallCapsFont={* Condensed Thin Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={elcsci}{i}{Font=* Condensed ExtraLight Italic,SmallCapsFont={* Condensed ExtraLight Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={lcsci}{i}{Font=* Condensed Light Italic,SmallCapsFont={* Condensed Light Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={mcsci}{i}{Font=* Condensed Medium Italic,SmallCapsFont={* Condensed Medium Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={sbcsci}{i}{Font=* Condensed SemiBold Italic,SmallCapsFont={* Condensed SemiBold Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={bcsci}{i}{Font=* Condensed Bold Italic,SmallCapsFont={* Condensed Bold Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={ebcsci}{i}{Font=* Condensed ExtraBold Italic,SmallCapsFont={* Condensed ExtraBold Italic},SmallCapsFeatures={Letters=SmallCaps},},
FontFace={xbcsci}{i}{Font=* Condensed Black Italic,SmallCapsFont={* Condensed Black Italic},SmallCapsFeatures={Letters=SmallCaps},},%====================
]
%normal
\DeclareRobustCommand{\ulseries}{\fontseries{ul}\selectfont}
\DeclareRobustCommand{\elseries}{\fontseries{el}\selectfont}
\DeclareRobustCommand{\lseries}{\fontseries{l}\selectfont}
\DeclareRobustCommand{\mseries}{\fontseries{m}\selectfont}
\DeclareRobustCommand{\sbseries}{\fontseries{sb}\selectfont}
\DeclareRobustCommand{\bseries}{\fontseries{b}\selectfont}
\DeclareRobustCommand{\ebseries}{\fontseries{eb}\selectfont}
\DeclareRobustCommand{\xbseries}{\fontseries{xb}\selectfont}
%condensed
\DeclareRobustCommand{\ulcseries}{\fontseries{ulc}\selectfont}
\DeclareRobustCommand{\elcseries}{\fontseries{elc}\selectfont}
\DeclareRobustCommand{\lcseries}{\fontseries{lc}\selectfont}
\DeclareRobustCommand{\mcseries}{\fontseries{mc}\selectfont}
\DeclareRobustCommand{\sbcseries}{\fontseries{sbc}\selectfont}
\DeclareRobustCommand{\bcseries}{\fontseries{bc}\selectfont}
\DeclareRobustCommand{\ebcseries}{\fontseries{ebc}\selectfont}
\DeclareRobustCommand{\xbcseries}{\fontseries{xbc}\selectfont}
%normal
\DeclareTextFontCommand{\textul}{\ulseries}
\DeclareTextFontCommand{\textel}{\elseries}
\DeclareTextFontCommand{\textl}{\lseries}
\DeclareTextFontCommand{\textm}{\mseries}
\DeclareTextFontCommand{\textsb}{\sbseries}
\DeclareTextFontCommand{\textb}{\bseries}
\DeclareTextFontCommand{\texteb}{\ebseries}
\DeclareTextFontCommand{\textxb}{\xbseries}
%condensed
\DeclareTextFontCommand{\textulc}{\ulcseries}
\DeclareTextFontCommand{\textelc}{\elcseries}
\DeclareTextFontCommand{\textlc}{\lcseries}
\DeclareTextFontCommand{\textmc}{\mcseries}
\DeclareTextFontCommand{\textsbc}{\sbcseries}
\DeclareTextFontCommand{\textbc}{\bcseries}
\DeclareTextFontCommand{\textebc}{\ebcseries}
\DeclareTextFontCommand{\textxbc}{\xbcseries}
%normal italic
\DeclareRobustCommand{\uliseries}{\fontseries{ul}\fontshape{i}\selectfont}
\DeclareRobustCommand{\eliseries}{\fontseries{el}\fontshape{i}\selectfont}
\DeclareRobustCommand{\liseries}{\fontseries{l}\fontshape{i}\selectfont}
\DeclareRobustCommand{\miseries}{\fontseries{m}\fontshape{i}\selectfont}
\DeclareRobustCommand{\sbiseries}{\fontseries{sb}\fontshape{i}\selectfont}
\DeclareRobustCommand{\biseries}{\fontseries{b}\fontshape{i}\selectfont}
\DeclareRobustCommand{\ebiseries}{\fontseries{eb}\fontshape{i}\selectfont}
\DeclareRobustCommand{\xbiseries}{\fontseries{xb}\fontshape{i}\selectfont}
%normal italic
\DeclareTextFontCommand{\textuli}{\uliseries}
\DeclareTextFontCommand{\texteli}{\eliseries}
\DeclareTextFontCommand{\textli}{\liseries}
\DeclareTextFontCommand{\textmi}{\miseries}
\DeclareTextFontCommand{\textsbi}{\sbiseries}
\DeclareTextFontCommand{\textbi}{\biseries}
\DeclareTextFontCommand{\textebi}{\ebiseries}
\DeclareTextFontCommand{\textxbi}{\xbiseries}
%condensed italic
\DeclareRobustCommand{\ulciseries}{\fontseries{ulc}\fontshape{i}\selectfont}
\DeclareRobustCommand{\elciseries}{\fontseries{elc}\fontshape{i}\selectfont}
\DeclareRobustCommand{\lciseries}{\fontseries{lc}\fontshape{i}\selectfont}
\DeclareRobustCommand{\mciseries}{\fontseries{mc}\fontshape{i}\selectfont}
\DeclareRobustCommand{\sbciseries}{\fontseries{sbc}\fontshape{i}\selectfont}
\DeclareRobustCommand{\bciseries}{\fontseries{bc}\fontshape{i}\selectfont}
\DeclareRobustCommand{\ebciseries}{\fontseries{ebc}\fontshape{i}\selectfont}
\DeclareRobustCommand{\xbciseries}{\fontseries{xbc}\fontshape{i}\selectfont}
%condensed italic
\DeclareTextFontCommand{\textulci}{\ulciseries}
\DeclareTextFontCommand{\textelci}{\elciseries}
\DeclareTextFontCommand{\textlci}{\lciseries}
\DeclareTextFontCommand{\textmci}{\mciseries}
\DeclareTextFontCommand{\textsbci}{\sbciseries}
\DeclareTextFontCommand{\textbci}{\bciseries}
\DeclareTextFontCommand{\textebci}{\ebciseries}
\DeclareTextFontCommand{\textxbci}{\xbciseries}
%normal small caps
\DeclareRobustCommand{\ulscseries}{\fontseries{ulsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\elscseries}{\fontseries{elsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\lscseries}{\fontseries{lsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\mscseries}{\fontseries{msc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\sbscseries}{\fontseries{sbsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\bscseries}{\fontseries{bsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\ebscseries}{\fontseries{ebsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\xbscseries}{\fontseries{xbsc}\fontshape{s}\scshape\selectfont}
%normal small caps
\DeclareTextFontCommand{\textulsc}{\ulscseries}
\DeclareTextFontCommand{\textelsc}{\elscseries}
\DeclareTextFontCommand{\textlsc}{\lscseries}
\DeclareTextFontCommand{\textmsc}{\mscseries}
\DeclareTextFontCommand{\textsbsc}{\sbscseries}
\DeclareTextFontCommand{\textbsc}{\bscseries}
\DeclareTextFontCommand{\textebsc}{\ebscseries}
\DeclareTextFontCommand{\textxbsc}{\xbscseries}
%condensed small caps
\DeclareRobustCommand{\ulcscseries}{\fontseries{ulcsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\elcscseries}{\fontseries{elcsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\lcscseries}{\fontseries{lcsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\mcscseries}{\fontseries{mcsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\sbcscseries}{\fontseries{sbcsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\bcscseries}{\fontseries{bcsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\ebcscseries}{\fontseries{ebcsc}\fontshape{s}\scshape\selectfont}
\DeclareRobustCommand{\xbcscseries}{\fontseries{xbcsc}\fontshape{s}\scshape\selectfont}
%condensed small caps
\DeclareTextFontCommand{\textulcsc}{\ulcscseries}
\DeclareTextFontCommand{\textelcsc}{\elcscseries}
\DeclareTextFontCommand{\textlcsc}{\lcscseries}
\DeclareTextFontCommand{\textmcsc}{\mcscseries}
\DeclareTextFontCommand{\textsbcsc}{\sbcscseries}
\DeclareTextFontCommand{\textbcsc}{\bcscseries}
\DeclareTextFontCommand{\textebcsc}{\ebcscseries}
\DeclareTextFontCommand{\textxbcsc}{\xbcscseries}
%normal small caps italic
\DeclareRobustCommand{\ulsciseries}{\fontseries{ulsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\elsciseries}{\fontseries{elsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\lsciseries}{\fontseries{lsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\msciseries}{\fontseries{msci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\sbsciseries}{\fontseries{sbsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\bsciseries}{\fontseries{bsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\ebsciseries}{\fontseries{ebsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\xbsciseries}{\fontseries{xbsci}\fontshape{i}\scshape\selectfont}
%normal small caps italic
\DeclareTextFontCommand{\textulsci}{\ulsciseries}
\DeclareTextFontCommand{\textelsci}{\elsciseries}
\DeclareTextFontCommand{\textlsci}{\lsciseries}
\DeclareTextFontCommand{\textmsci}{\msciseries}
\DeclareTextFontCommand{\textsbsci}{\sbsciseries}
\DeclareTextFontCommand{\textbsci}{\bsciseries}
\DeclareTextFontCommand{\textebsci}{\ebsciseries}
\DeclareTextFontCommand{\textxbsci}{\xbsciseries}
%%condensed small caps italic
\DeclareRobustCommand{\ulcsciseries}{\fontseries{ulcsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\elcsciseries}{\fontseries{elcsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\lcsciseries}{\fontseries{lcsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\mcsciseries}{\fontseries{mcsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\sbcsciseries}{\fontseries{sbcsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\bcsciseries}{\fontseries{bcsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\ebcsciseries}{\fontseries{ebcsci}\fontshape{i}\scshape\selectfont}
\DeclareRobustCommand{\xbcsciseries}{\fontseries{xbcsci}\fontshape{i}\scshape\selectfont}
%condensed small caps italic
\DeclareTextFontCommand{\textulcsci}{\ulcsciseries}
\DeclareTextFontCommand{\textelcsci}{\elcsciseries}
\DeclareTextFontCommand{\textlcsci}{\lcsciseries}
\DeclareTextFontCommand{\textmcsci}{\mcsciseries}
\DeclareTextFontCommand{\textsbcsci}{\sbcsciseries}
\DeclareTextFontCommand{\textbcsci}{\bcsciseries}
\DeclareTextFontCommand{\textebcsci}{\ebcsciseries}
\DeclareTextFontCommand{\textxbcsci}{\xbcsciseries}
\begin{document}
%\fontname\mseries
\section{Noto Serif}
\rmfamily
%\itshape
%\scshape
\subsection{Normal}
\begin{tabular}{c}
Normal \\
\hline\ \\
\textul{Abc Thin} {\ulseries Thin}\\
\textel{Abc ExtraLight} {\elseries ExtraLight}\\
\textl{Abc Light} {\lseries Light}\\
\textm{Abc Medium} {\mseries Medium}\\
\textsb{Abc SemiBold} {\sbseries SemiBold}\\
\textb{Abc Bold} {\bseries Bold}\\
\texteb{Abc ExtraBold} {\ebseries ExtraBold}\\
\textxb{Abc Black} {\xbseries Black}\\%
\end{tabular}
\begin{tabular}{c}
Condensed\\
\hline\ \\
\textulc{Abc Thin} {\ulcseries Thin}\\
\textelc{Abc ExtraLight} {\elcseries ExtraLight}\\
\textlc{Abc Light} {\lcseries Light}\\
\textmc{Abc Medium} {\mcseries Medium}\\
\textsbc{Abc SemiBold} {\sbcseries SemiBold}\\
\textbc{Abc Bold} {\bcseries Bold}\\
\textebc{Abc ExtraBold} {\ebcseries ExtraBold}\\
\textxbc{Abc Black} {\xbcseries Black}\\%
\end{tabular}
\vskip1em
\begin{tabular}{c}
Normal Italic \\
\hline\ \\
\textuli{Abc Thin} {\uliseries Thin}\\
\texteli{Abc ExtraLight} {\eliseries ExtraLight}\\
\textli{Abc Light} {\liseries Light}\\
\textmi{Abc Medium} {\miseries Medium}\\
\textsbi{Abc SemiBold} {\sbiseries SemiBold}\\
\textbi{Abc Bold} {\biseries Bold}\\
\textebi{Abc ExtraBold} {\ebiseries ExtraBold}\\
\textxbi{Abc Black} {\xbiseries Black}\\%
\end{tabular}
\begin{tabular}{c}
Condensed Italic\\
\hline\ \\
\textulci{Abc Thin} {\ulciseries Thin}\\
\textelci{Abc ExtraLight} {\elciseries ExtraLight}\\
\textlci{Abc Light} {\lciseries Light}\\
\textmci{Abc Medium} {\mciseries Medium}\\
\textsbci{Abc SemiBold} {\sbciseries SemiBold}\\
\textbci{Abc Bold} {\bciseries Bold}\\
\textebci{Abc ExtraBold} {\ebciseries ExtraBold}\\
\textxbci{Abc Black} {\xbciseries Black}\\%
\end{tabular}
\newpage
\subsection{Small Caps}
\vskip1em
\begin{tabular}{c}
Normal Small Caps \\
\hline\ \\
\textulsc{Abc Thin} {\ulscseries Thin}\\
\textelsc{Abc ExtraLight} {\elscseries ExtraLight}\\
\textlsc{Abc Light} {\lscseries Light}\\
\textmsc{Abc Medium} {\mscseries Medium}\\
\textsbsc{Abc SemiBold} {\sbscseries SemiBold}\\
\textbsc{Abc Bold} {\bscseries Bold}\\
\textebsc{Abc ExtraBold} {\ebscseries ExtraBold}\\
\textxbsc{Abc Black} {\xbscseries Black}\\%
\end{tabular}
\begin{tabular}{c}
Condensed Small Caps\\
\hline\ \\
\textulcsc{Abc Thin} {\ulcscseries Thin}\\
\textelcsc{Abc ExtraLight} {\elcscseries ExtraLight}\\
\textlcsc{Abc Light} {\lcscseries Light}\\
\textmcsc{Abc Medium} {\mcscseries Medium}\\
\textsbcsc{Abc SemiBold} {\sbcscseries SemiBold}\\
\textbcsc{Abc Bold} {\bcscseries Bold}\\
\textebcsc{Abc ExtraBold} {\ebcscseries ExtraBold}\\
\textxbcsc{Abc Black} {\xbcscseries Black}\\%
\end{tabular}
\vskip1em
\begin{tabular}{c}
Normal Small Caps Italic\\
\hline\ \\
\textulsci{Abc Thin} {\ulsciseries Thin}\\
\textelsci{Abc ExtraLight} {\elsciseries ExtraLight}\\
\textlsci{Abc Light} {\lsciseries Light}\\
\textmsci{Abc Medium} {\msciseries Medium}\\
\textsbsci{Abc SemiBold} {\sbsciseries SemiBold}\\
\textbsci{Abc Bold} {\bsciseries Bold}\\
\textebsci{Abc ExtraBold} {\ebsciseries ExtraBold}\\
\textxbsci{Abc Black} {\xbsciseries Black}\\%
\end{tabular}
\begin{tabular}{c}
Condensed Small Caps Italic\\
\hline\ \\
\textulcsci{Abc Thin} {\ulcsciseries Thin}\\
\textelcsci{Abc ExtraLight} {\elcsciseries ExtraLight}\\
\textlcsci{Abc Light} {\lcsciseries Light}\\
\textmcsci{Abc Medium} {\mcsciseries Medium}\\
\textsbcsci{Abc SemiBold} {\sbcsciseries SemiBold}\\
\textbcsci{Abc Bold} {\bcsciseries Bold}\\
\textebcsci{Abc ExtraBold} {\ebcsciseries ExtraBold}\\
\textxbcsci{Abc Black} {\xbcsciseries Black}\\%
\end{tabular}
\end{document}
(a fair amount of work, but straightforward enough using concatenate
in a spreadsheet)
the question is, for ease of use, how should all these commands be (systematically/verbosely) named? Is there a more powerful and/or compact way of accessing these, by indices perhaps? It is almost like thinking of names for colours.
And then, independently of what could be called the visuality bundle of dimensions, another dimension related to fonts is script(s).
FreeSerif
, for example, has italic Georgian, Armenian, Cyrillic, but not the smallcaps.
The days of bf
and sc
are long gone.
=====
Edited to add:
Actually, perhaps not.
For those who "run and type" (use of short commands), a cumulative bf
-like sc
-like mechanism (using font switches) can be achieved with a toggling-macro wrapper which groups the states of each font feature into sets and ratchets through the elements in the set with a stepcounter.
Cycling can be done with whatever can be grouped into sets: boldness, italics, small caps, size, font families.
(no italics in this monospaced font)
It's easy to lose track of where you are, though, when not 'in the zone', and adding font size to the wrapper mix reveals that TeX is doing additional things behind the scenes across font families when sizes are allocated.
A reverse-ratchet, to cycle through the elements in reverse gear, is easy enough to implement, although for two-state toggles its results are identical to the forward ratchet.
MWE
\documentclass[12pt]{article}
\usepackage{fontspec}%splits itshape and scshape apart as independent shapes
\setmainfont{Noto Serif}%for small caps
\setsansfont{Noto Sans}
\setmonofont{Noto Sans Mono} %no italic
%namespace is fx
%reset to initial state
\newcommand\fxbfreset{\fxboldinit}
\newcommand\fxitreset{\fxitalinit}
\newcommand\fxscreset{\fxscapinit}
\newcommand\fxszreset{\fxsetdefaultsize}
\newcommand\fxfmreset{\fxfmlyinit}
\newcommand\fxresetall{%
\fxbfreset%
\fxitreset%
\fxscreset%
\fxszreset%
\fxfmreset%
}
% For the element states in a closed set,
% toggle-step incrementally along each element
% and start at the beginning again, Kekule-like,
%-----------------------------------------------------
% bold
% start and end range: two states (say)
\newcounter{fxboldmax}
\setcounter{fxboldmax}{2}
\newcommand\fxboldstart{1}
% counter
\newcounter{fxboldtoggle}
\newcommand\fxboldinit{%
\setcounter{fxboldtoggle}{\fxboldstart}}
%init
\fxboldinit
% define stepnames
\expandafter\newcommand\csname fxboldstep1\endcsname{\mdseries}
\expandafter\newcommand\csname fxboldstep2\endcsname{\bfseries}
% toggle cycle
\newcommand\fxboldstep{%
%increment
\stepcounter{fxboldtoggle}%
%%cycle
\ifnum\value{fxboldtoggle} >\value{fxboldmax}\fxboldinit\fi%
%apply step
\ifcase\value{fxboldtoggle}\relax%
\relax%0
\or\csname fxboldstep\thefxboldtoggle\endcsname%1
\or\csname fxboldstep\thefxboldtoggle\endcsname%2
\else\fxboldinit%
\fi%
%\thefxboldtoggle
}
\newcommand\fxbf{\fxboldstep}
%-----------------------------------------------------
%italic
% start and end range
\newcounter{fxitalmax}
\setcounter{fxitalmax}{2}
\newcommand\fxitalstart{1}
% counter
\newcounter{fxitaltoggle}
\newcommand\fxitalinit{%
\setcounter{fxitaltoggle}{\fxitalstart}}
%init
\fxitalinit
% define stepnames
\expandafter\newcommand\csname fxitalstep1\endcsname{\upshape}
\expandafter\newcommand\csname fxitalstep2\endcsname{\itshape}
% toggle cycle
\newcommand\fxitalstep{%
%increment
\stepcounter{fxitaltoggle}%
%%cycle
\ifnum\value{fxitaltoggle} >\value{fxitalmax}\fxitalinit\fi%
%apply step
\ifcase\value{fxitaltoggle}\relax%
\relax%0
\or\csname fxitalstep\thefxitaltoggle\endcsname%1
\or\csname fxitalstep\thefxitaltoggle\endcsname%2
\else\fxitalinit%
\fi%
%\thefxitaltoggle
}
\newcommand\fxit{\fxitalstep}
%-----------------------------------------------------
%small caps
% start and end range
\newcounter{fxscapmax}
\setcounter{fxscapmax}{2}
\newcommand\fxscapstart{1}
% counter
\newcounter{fxscaptoggle}
\newcommand\fxscapinit{%
\setcounter{fxscaptoggle}{\fxscapstart}}
%init
\fxscapinit
% define stepnames
\expandafter\newcommand\csname fxscapstep1\endcsname{\upshape}
\expandafter\newcommand\csname fxscapstep2\endcsname{\scshape}
% toggle cycle
\newcommand\fxscapstep{%
%increment
\stepcounter{fxscaptoggle}%
%%cycle
\ifnum\value{fxscaptoggle} >\value{fxscapmax}\fxscapinit\fi%
%apply step
\ifcase\value{fxscaptoggle}\relax%
\relax%0
\or\csname fxscapstep\thefxscaptoggle\endcsname%1
\or\csname fxscapstep\thefxscaptoggle\endcsname%2
\else\fxscapinit%
\fi%
%\thefxscaptoggle
}
\newcommand\fxsc{\fxscapstep}
%-----------------------------------------------------
%size
% start and end range
\newcounter{fxsizemax}
\setcounter{fxsizemax}{10}
\newcommand\fxsizestart{1}
\newcommand\fxsizedefault{4}
% counter
\newcounter{fxsizetoggle}
\newcommand\fxsizeinit{%
\setcounter{fxsizetoggle}{\fxsizestart}}
% define stepnames
\expandafter\newcommand\csname fxsizestep1\endcsname{\tiny}
\expandafter\newcommand\csname fxsizestep2\endcsname{\scriptsize}
\expandafter\newcommand\csname fxsizestep3\endcsname{\footnotesize}
\expandafter\newcommand\csname fxsizestep4\endcsname{\small}
\expandafter\newcommand\csname fxsizestep5\endcsname{\normalsize}
\expandafter\newcommand\csname fxsizestep6\endcsname{\large}
\expandafter\newcommand\csname fxsizestep7\endcsname{\Large}
\expandafter\newcommand\csname fxsizestep8\endcsname{\LARGE}
\expandafter\newcommand\csname fxsizestep9\endcsname{\huge}
\expandafter\newcommand\csname fxsizestep10\endcsname{\Huge}
% toggle cycle
\newcommand\fxsizestep{%
%increment
\stepcounter{fxsizetoggle}%
%%cycle
\ifnum\value{fxsizetoggle} >\value{fxsizemax}\fxsizeinit\fi%
%apply step
\ifcase\value{fxsizetoggle}\relax%
\relax%0
\or\csname fxsizestep\thefxsizetoggle\endcsname%1
\or\csname fxsizestep\thefxsizetoggle\endcsname%2
\or\csname fxsizestep\thefxsizetoggle\endcsname%3
\or\csname fxsizestep\thefxsizetoggle\endcsname%4
\or\csname fxsizestep\thefxsizetoggle\endcsname%5
\or\csname fxsizestep\thefxsizetoggle\endcsname%6
\or\csname fxsizestep\thefxsizetoggle\endcsname%7
\or\csname fxsizestep\thefxsizetoggle\endcsname%8
\or\csname fxsizestep\thefxsizetoggle\endcsname%9
\or\csname fxsizestep\thefxsizetoggle\endcsname%10
\else\fxsizeinit%
\fi%
%\thefxsizetoggle
}
\newcommand\fxsetdefaultsize{%
\setcounter{fxsizetoggle}{\fxsizedefault}%
\fxsizestep%
}
%init
%\fxsizeinit
\fxsetdefaultsize
\newcommand\fxsz{\fxsizestep}
%-----------------------------------------------------
%family = fmly
% start and end range
\newcounter{fxfmlymax}
\setcounter{fxfmlymax}{3}
\newcommand\fxfmlystart{1}
\newcommand\fxfmlydefault{1}
% counter
\newcounter{fxfmlytoggle}
\newcommand\fxfmlyinit{%
\setcounter{fxfmlytoggle}{\fxfmlystart}}
\newcommand\fxsetdefaultfmly{%
\setcounter{fxfmlytoggle}{\fxfmlydefault}}
%init
\fxfmlyinit
%\fxsetdefaultfmly
% define stepnames
\expandafter\newcommand\csname fxfmlystep1\endcsname{\rmfamily}
\expandafter\newcommand\csname fxfmlystep2\endcsname{\sffamily}
\expandafter\newcommand\csname fxfmlystep3\endcsname{\ttfamily}
% toggle cycle
\newcommand\fxfmlystep{%
%increment
\stepcounter{fxfmlytoggle}%
%%cycle
\ifnum\value{fxfmlytoggle} >\value{fxfmlymax}\fxfmlyinit\fi%
%apply step
\ifcase\value{fxfmlytoggle}\relax%
\relax%0
\or\csname fxfmlystep\thefxfmlytoggle\endcsname%1
\or\csname fxfmlystep\thefxfmlytoggle\endcsname%2
\or\csname fxfmlystep\thefxfmlytoggle\endcsname%3
\else\fxfmlyinit%
\fi%
%\thefxfmlytoggle
}
\newcommand\fxfm{\fxfmlystep}
%========================================
\begin{document}
\section{Example}
\subsection{Three families, normal}
\indent Normal text serif
\fxbf bold \fxbf
\fxit italic
\fxbf bold italic.\fxit\fxbf
\begin{quotation}
\noindent
\fxsz Bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxszreset back to normal size.
\end{quotation}
\fxfm\fxsz
Normal text sans-serif
\fxbf bold \fxbf
\fxit italic
\fxbf bold italic.\fxit\fxbf
\begin{quotation}
\noindent
\fxszreset\fxsz Bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxszreset\fxsz back to normal size.
\end{quotation}
\fxfm\fxsz
Normal text monospaced
\fxbf bold \fxbf
\fxit italic
\fxbf bold italic.\fxit\fxbf
\begin{quotation}
\noindent
\fxszreset\fxsz Bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxsz bigger, \fxszreset\fxsz back to normal size.
\end{quotation}
\fxfm
\subsection{Three families, small caps}
\fxszreset\fxsz
\fxsc
Normal text serif
\fxbf bold \fxbf
\fxit italic
\fxbf bold italic.\fxit\fxbf
\fxfm
Normal text sans-serif
\fxbf bold \fxbf
\fxit italic
\fxbf bold italic.\fxit\fxbf
\fxfm
Normal text monospaced
\fxbf bold \fxbf
\fxit italic
\fxbf bold italic.\fxit\fxbf
\fxfm
\fxsc
\fxresetall
Back to normal text.
\end{document}
\usepackage[T1]{fontenc}
in XeLaTeX or LuaLaTeX. As far as I have tested, tex.stackexchange.com/a/616809/250119 (only read the "for XeLaTeX and LuaLaTeX part") and tex.stackexchange.com/a/346627/250119 (read the part after "Editor's note") are the only that works in XeLaTeX/LuaLaTeX. ■ Other options: using a different font from the default font as bold small caps → tex.stackexchange.com/q/503826/250119 (works in LuaLaTeX too)