% \iffalse meta-comment
%
% Copyright (C) 2019 by Jan Hajer
% -----------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
% of this license or (at your option) any later version.
% The latest version of this license is in:
%
% http://www.latex-project.org/lppl.txt
%
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% \fi
%
% \iffalse
%
%<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01]
%<package>\ProvidesPackage{hep-font}[2021/09/01 v1.0 hep-font]
%<documentation>\ProvidesFile{hep-font-documentation.tex}[2021/09/01 v1.8 hep-font documentation]
%
%<*documentation>

\RequirePackage[l2tabu, orthodox]{nag}

\documentclass{ltxdoc}
\AtBeginDocument{\DeleteShortVerb{\|}}
\AtBeginDocument{\MakeShortVerb{\"}}

\EnableCrossrefs
\CodelineIndex
\RecordChanges

\usepackage[parskip]{hep-paper}

\bibliography{bibliography}

\acronym{CM}{computer modern}
\acronym{LM}{latin modern}
\acronym{NFSS}{new font selection scheme}

\usepackage{hologo}

\MacroIndent=1.5em
\AtBeginEnvironment{macrocode}{\renewcommand{\ttdefault}{clmt}}
%</documentation>

%<*driver>
\expandafter\newif\csname ifshort\endcsname
\shortfalse
\begin{document}
\DocInput{hep-font-implementation.dtx}
\end{document}
%</driver>
%
% \fi
%
% \CheckSum{392}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \changes{v1.0}{2021/09/01}{Initial version of the style file.}
%
% \ifshort
%<*documentation>
% \fi
%
\GetFileInfo{hep-font.sty}

\title{The \software{hep-font} package\thanks{This document corresponds to \software{hep-font}~\fileversion.}}
\subtitle{Latin modern extended by computer modern}
\author{Jan Hajer \email{jan.hajer@unibas.ch}}
\date{\filedate}

% \ifshort
\begin{document}
% \fi

\newgeometry{vscale=.8, vmarginratio=3:4, includeheadfoot, left=11em, marginparwidth=4.6cm, marginparsep=3mm, right=7em}

\maketitle

\begin{abstract}
The \software{hep-font} package loads standard font packages and extends the usual \glsdesc{LM} implementations by replacing missing fonts with \glsdesc{CM} counterparts.
\end{abstract}

The package is loaded using "\usepackage{hep-font}".

\DescribeMacro{oldstyle}
The "oldstyle" option switches to oldstyle numerals such as 123 in text mode instead of lining numerals such as \textl{123}.

The \software{fontenc} package \cite{fontenc} with "T1" and "TU" font encoding is loaded for \hologo{pdfTeX} and \hologo{LuaTeX}, respectively.

Some restrictions of \CM fonts are lifted with the \software{fixcm} package \cite{fix-cm}.

The \software{microtype} \cite{microtype} optimizations are activated.

The \hologo{LaTeX} \NFSS is extended with the \software{nfssext-cfr} package \cite{nfssext-cfr}.

The \LM font is loaded using the \software{cfr-lm} \cite{cfr-lm}  and \software{lmodern} \cite{lmodern} packages for \hologo{pdfTeX} and \hologo{LuaTeX}, respectively.

The text companion fonts are loaded \cite{textcomp}.

\DescribeMacro{\textsc}
Bold \textbf{\textsc{Small Caps}} and a sans serif \textsf{\textsc{Small Caps}} based on the \CM font \cite{cm} is provided, the latter using the \software{sansmathfonts} \cite{sansmathfonts} and \software{hfoldsty} \cite{hfoldsty} packages.

\DescribeMacro{\textui}
A sans-serif upright italic font is provided using the \software{sansmathfonts} package \cite{sansmathfonts}.

Finally the \software{inputenc} package \cite{inputenc} with the "utf8" option is loaded.

% \ifshort
\printbibliography

\end{document}
%
%</documentation>
% \fi
%
% \StopEventually{
% \printbibliography
% \PrintChanges
% }
%
% \appendix
%
% \section{Implementation}
%
%<*package>
%
% Define a hepfont namespace for the options using the \software{kvoptions} package \cite{kvoptions}.
%    \begin{macrocode}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
  family=hepfont,
  prefix=hepfont@
}
%    \end{macrocode}
%
% \begin{macro}{lining}
% Define the "lining" option deactivating the use of text figures in text mode.
%    \begin{macrocode}
\DeclareBoolOption[true]{lining}
\DeclareComplementaryOption{oldstyle}{lining}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\ProcessKeyvalOptions*
%    \end{macrocode}
%
%
% \begin{macro}{\ifxetexorluatex}
% Load the \software{ifluatex} \cite{ifluatex} and \software{ifxetex} \cite{ifxetex} packages.
% Define the "\ifxetexorluatex" conditional checking if the package is executed by \hologo{LuaLaTeX} or \hologo{XeLaTeX}.
%    \begin{macrocode}
\RequirePackage{ifluatex}
\RequirePackage{ifxetex}
\newif\ifxetexorluatex
\ifxetex\xetexorluatextrue
\else\ifluatex\xetexorluatextrue
  \else\xetexorluatexfalse\fi
\fi
%    \end{macrocode}
% \end{macro}
%
% Pick the correct font encoding depending on the engine used and load the \software{fontenc} package \cite{fontenc} with this encoding.
% For details of the font encoding see \cite{encguide}.
%    \begin{macrocode}
\def\hep@encoding{T\ifxetexorluatex U\else 1\fi}
\RequirePackage[\hep@encoding]{fontenc}
%    \end{macrocode}
% Fix the remaining \CM \cite{cm} fonts using the \software{fix-cm} package \cite{fix-cm} and load the \software{microtype} font optimizations \cite{microtype}.
%    \begin{macrocode}
\RequirePackage{fix-cm}
\RequirePackage{microtype}
%    \end{macrocode}
% Switch to the \LM font using the \software{cfr-lm} \cite{cfr-lm} or \software{lmodern} \cite{lmodern} packages depending on the \hologo{TeX} engine.
% In both cases the \NFSS is extended using the \software{nfssext-cfr} \cite{nfssext-cfr} package.
%    \begin{macrocode}
\ifxetexorluatex
  \RequirePackage{nfssext-cfr}
  \RequirePackage{lmodern}
\else
  \ifhepfont@lining
    \RequirePackage[rm={lining},sf={lining},tt={lining}]{cfr-lm}
  \else
    \RequirePackage{cfr-lm}
  \fi
\fi
%    \end{macrocode}
% Adjust the figures according to the "lining" option and ensure that tables always use lining.
%    \begin{macrocode}
% \RequirePackage{etoolbox}
% \AtBeginEnvironment{tabular}{\tlstyle}
%    \end{macrocode}
%
% Load the \software{textcomp} extension \cite{textcomp} and define helper functions.
%    \begin{macrocode}
\RequirePackage{textcomp}
\newcommand{\hep@sf@fontshape}[3]{%
  \DeclareFontShape{\hep@encoding}{\sfdefault}{#1}{#2}{#3}{}%
}
\newcommand{\hep@rm@fontshape}[3]{%
  \DeclareFontShape{\hep@encoding}{\rmdefault}{#1}{#2}{#3}{}%
}
%    \end{macrocode}
%
% For modern \hologo{TeX} engines define the bold and sans serif small caps font shapes using the \software{fontspec} package \cite{fontspec}.
%    \begin{macrocode}
\ifxetexorluatex
  \RequirePackage{fontspec}
  \setmainfont{Latin Modern Roman}[
    UprightFeatures={SmallCapsFont={[lmromancaps10-regular.otf]}},
    BoldFeatures={
      SmallCapsFeatures={Letters=SmallCaps},
      SmallCapsFont={[cmunbx.otf]}
    }
  ]
  \hep@sf@fontshape{bx}{sc}{<->cmssbxcsc10}{}
  \hep@sf@fontshape{b}{sc}{<->cmssbxcsc10}{}
  \hep@sf@fontshape{m}{scit}{<->cmsscsci10}{}
  \hep@sf@fontshape{m}{sc}{%
    <-9>cmsscsc8<9-10>cmsscsc9<10->cmsscsc10%
  }{}
%    \end{macrocode}
%If \hologo{pdfLaTeX}
%    \begin{macrocode}
\else
%    \end{macrocode}
%For serif fonts
%    \begin{macrocode}
  \rmfamily
%    \end{macrocode}
%\begin{macro}{\textsc}
%For lining numerals add \CM roman small caps (italic and bold) from the \software{slantsc} package \cite{slantsc}.
%    \begin{macrocode}
  \ifhepfont@lining
    \RequirePackage{slantsc}
    \hep@rm@fontshape{b}{sc}{<->ssub*cmr/bx/sc}{}
    \hep@rm@fontshape{bx}{sc}{<->ssub*cmr/bx/sc}{}
    \hep@rm@fontshape{b}{scsl}{<->ssub*cmr/bx/scsl}{}
    \hep@rm@fontshape{bx}{scsl}{<->ssub*cmr/bx/scit}{}
    \hep@rm@fontshape{b}{scit}{<->ssub*cmr/bx/scsl}{}
    \hep@rm@fontshape{bx}{scit}{<->ssub*cmr/bx/scit}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\textsc}
%For oldstyle numerals use the fonts from the \software{hfoldsty} package \cite{hfoldsty}.
%    \begin{macrocode}
  \else
    \DeclareFontFamily{\hep@encoding}{hfor}{}
    \DeclareFontShape{\hep@encoding}{hfor}{bx}{sc}{
      <-6>hfoxc0500<6-7>hfoxc0600<7-8>hfoxc0700<8-9>hfoxc0800
      <9-10>hfoxc0900<10-12>hfoxc1000<12-17>hfoxc1200<17->hfoxc1728
    }{}
    \DeclareFontShape{\hep@encoding}{hfor}{bx}{scsl}{
      <-6>hfooc0500<6-7>hfooc0600<7-8>hfooc0700<8-9>hfooc0800
      <9-10>hfooc0900<10-12>hfooc1000<12-17>hfooc1200<17->hfooc1728
    }{}
    \hep@rm@fontshape{b}{sc}{<->ssub*hfor/bx/sc}{}
    \hep@rm@fontshape{bx}{sc}{<->ssub*hfor/bx/sc}{}
    \hep@rm@fontshape{bx}{scsl}{<->ssub*hfor/bx/scsl}{}
    \hep@rm@fontshape{b}{scit}{<->ssub*hfor/bx/scsl}{}
    \hep@rm@fontshape{bx}{scit}{<->ssub*hfor/bx/scsl}{}
    \hep@rm@fontshape{b}{scsl}{<->ssub*hfor/bx/scsl}{}
  \fi
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\textsc}
%Provide the sans serif small caps font shape using the extended \CM from the \software{sansmathfonts} package \cite{sansmathfonts}.
%    \begin{macrocode}
  \sffamily
  \hep@sf@fontshape{m}{sc}{<->ssub*xcmss/m/sc}{}
  \hep@sf@fontshape{b}{sc}{<->ssub*xcmss/bx/sc}{}
  \hep@sf@fontshape{bx}{sc}{<->ssub*xcmss/bx/sc}{}
  \hep@sf@fontshape{m}{scit}{<->ssub*xcmss/m/scit}{}
  \hep@sf@fontshape{b}{scit}{<->ssub*xcmss/bx/scit}{}
  \hep@sf@fontshape{bx}{scit}{<->ssub*xcmss/bx/scit}{}
  \hep@sf@fontshape{m}{scsl}{<->ssub*xcmss/m/scit}{}
  \hep@sf@fontshape{b}{scsl}{<->ssub*xcmss/bx/scit}{}
  \hep@sf@fontshape{bx}{scsl}{<->ssub*xcmss/bx/scit}{}
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\textui}
%Provide a sans upright italic font.
%    \begin{macrocode}
  \hep@sf@fontshape{m}{ui}{<->cmssu10}{}
\fi
%    \end{macrocode}
%\end{macro}
%
% Load the \software{inputenc} package \cite{inputenc} whe using \hologo{pdfLaTeX}.
%    \begin{macrocode}
\ifxetexorluatex\else\RequirePackage[utf8]{inputenc}\fi
%    \end{macrocode}
%
% \begin{macro}{\unit}
% Patch the "\unit" and "\unitfrac" macros to work with lining numerals using the \software{xpatch} package \cite{xpatch} if the \software{units} package \cite{units} is loaded.
% TODO implement patch without actually loading the package.
%    \begin{macrocode}
\ifhepfont@lining\else
% \AtBeginDocument{
%   \@ifpackageloaded{
    \RequirePackage{units}
    \RequirePackage{xpatch}
    \xpatchcmd{\unit}{\else#1}{%
      \else\ifthenelse{\boolean{mmode}}{#1}{\textl{#1}}%
    }{}{}
    \xpatchcmd{\unitfrac}{\else#1}{%
      \else\ifthenelse{\boolean{mmode}}{#1}{\textl{#1}}%
    }{}{}
%   }{}
% }
\fi
%    \end{macrocode}
% \end{macro}
%
%</package>
%
% \section{Test}
%
%<*test>
%
%    \begin{macrocode}
\documentclass[a4paper]{article}

\usepackage[oldstyle]{hep-font}
%% \usepackage[oldstyle]{hep-paper}

\usepackage{fullpage}

\usepackage{fancyvrb}\DefineShortVerb{\|}
\newenvironment{vrb}{\begin{tabular}{@{}p{5cm}ll@{}}}{\end{tabular}}

\begin{document}

\subsection*{Roman}

\rmfamily
\begin{vrb}
|\rmfamily| & {Latin Modern Roman 123} \\
|  \sbweight| & {\sbweight Latin Modern Roman Semi Bold 123} \\
|  \bfseries| & {\bfseries Latin Modern Roman Bold Extended 123} \\
|\slshape| & {\slshape Latin Modern Roman Oblique 123} \\
|  \sbweight| & {\sbweight\slshape Latin Modern Roman Semi Bold Oblique 123} \\
|  \bfseries| & {\bfseries\slshape Latin Modern Roman Bold Oblique Extended 123} \\
|\itshape| & {\itshape Latin Modern Roman Italic 123} \\
|  \bfseries| & {\bfseries\itshape Latin Modern Roman Bold Italic Extended 123} \\
|\uishape| & {\uishape Latin Modern Roman Upright Italic 123} \\
|\scshape| & {\scshape Latin Modern Roman Small Caps 123} \\
|  \bfseries| & {\bfseries\scshape Computer Modern Roman Bold Small Caps 123} \\
|  \sishape| & {\scshape\slshape Latin Modern Roman Oblique Small Caps 123} \\
|    \bfseries| & {\slshape\bfseries\scshape Computer Modern Roman Bold Small Caps 123} \\
\end{vrb}

\subsubsection*{Dunhill}

\tistyle
\begin{vrb}
|\tistyle | & {Latin Modern Dunhill 123} \\
|  \slshape| & {\slshape Latin Modern Dunhill Oblique 123} \\
\end{vrb}

\subsubsection*{Funny}

\fontfamily{cmfr}\selectfont
\begin{vrb}
|\fontfamily{cmfr}\selectfont | & {Computer Modern Funny 123} \\
|  \itshape| & {\itshape Computer Modern Funny Oblique 123} \\
\end{vrb}

\subsubsection*{Fib}

\fontfamily{cmfib}\selectfont
\begin{vrb}
|\fontfamily{cmfib}\selectfont | & {Computer Modern Fibonacci 123} \\
|  \slshape| & {\slshape Computer Modern Fibonacci Oblique 123} \\
\end{vrb}

\subsection*{Sans}

\sffamily
\begin{vrb}
|\sffamily| & {Latin Modern Sans 123} \\
|  \fontseries{sbc}\selectfont| & {\fontseries{sbc}\selectfont Latin Modern Sans Demi Condensed 123} \\
|  \bfseries| & {\bfseries Latin Modern Sans Bold 123} \\
|\slshape| & {\slshape Latin Modern Sans Oblique 123} \\
|  \fontseries{sbc}\selectfont| & {\fontseries{sbc}\selectfont\slshape Latin Modern Sans Demi Condensed Oblique 123} \\
|  \bfseries| & {\bfseries\slshape Latin Modern Sans Bold Oblique 123} \\
|\uishape| & {\uishape Computer Modern Sans Upright Italic 123} \\
|\scshape| & {\scshape Computer Modern Sans Small Caps 123} \\
|  \bfseries| & {\bfseries\scshape Computer Modern Sans Bold Small Caps 123} \\
|  \itshape| & {\itshape\scshape Computer Modern Sans Italic Small Caps 123} \\
|    \bfseries| & {\itshape\bfseries\scshape Computer Modern Sans Italic Bold Small Caps 123} \\
\end{vrb}

\subsubsection*{Quotation}

\qtstyle
\begin{vrb}
|\qtstyle | & {Latin Modern Sans Extended 123} \\
|  \bfseries | & {\bfseries Latin Modern Sans Bold Extended 123} \\
|\slshape | & {\slshape Latin Modern Sans Extended Oblique 123} \\
|  \bfseries | & {\bfseries\slshape Latin Modern Sans Bold Extended Oblique 123} \\
\end{vrb}

\subsection*{Typewriter}

\ttfamily
\tvstyle
\begin{vrb}
|\ttfamily\tvstyle | & {Latin Modern Typewriter Proportional 123} \\
|  \bfseries | & {\bfseries Latin Modern Typewriter Proportional Dark 123} \\
|  \lgweight | & {\lgweight Latin Modern Typewriter Proportional Light 123} \\
|\slshape | & {\slshape Latin Modern Typewriter Proportional Oblique 123} \\
|  \bfseries | & {\bfseries\slshape Latin Modern Typewriter Proportional Dark Oblique 123} \\
|  \lgweight | & {\lgweight Latin Modern Typewriter Proportional Light Oblique 123} \\
\end{vrb}

\subsubsection*{Fixed-width}

\tmstyle
\begin{vrb}
|\ttfamily\tmstyle | & {Latin Modern Typewriter 123} \\
|  \lgweight | & {\lgweight Latin Modern Typewriter Light 123} \\
|  \bfseries | & {\bfseries Latin Modern Typewriter Dark 123} \\
|  \fontseries{lc}\selectfont | & {\fontseries{lc}\selectfont Latin Modern Typewriter Light Condensed 123} \\
|\slshape | & {\slshape Latin Modern Typewriter Oblique 123} \\
|  \lgweight | & {\lgweight\slshape Latin Modern Typewriter Light Oblique 123} \\
|  \bfseries | & {\bfseries\slshape Latin Modern Typewriter Dark Oblique 123} \\
|  \fontseries{lc} | & {\fontseries{lc}\slshape Latin Modern Typewriter Light Condensed Oblique 123} \\
|\itshape | & {\itshape Latin Modern Typewriter Italic 123} \\
|\scshape | & {\scshape Latin Modern Typewriter Small Caps 123} \\
|  \slshape | & {\scshape\slshape Latin Modern Typewriter Oblique Small Caps 123} \\
\end{vrb}

\end{document}
%    \end{macrocode}
%
%</test>
%
% \section{Readme}
%
%<*readme>
%
%    \begin{macrocode}
# The `hep-font` package

Latin modern extended by computer modern.

## Introduction

The `hep-font` package loads standard font packages and extends the usual Latin Modern implementations by replacing missing fonts with Computer Modern counterparts.

The package is loaded with `\usepackage{hep-font}`.

## Author

Jan Hajer

## License

This file may be distributed and/or modified under the conditions of the `LaTeX` Project Public License, either version 1.3c of this license or (at your option) any later version.
The latest version of this license is in `http://www.latex-project.org/lppl.txt` and version 1.3c or later is part of all distributions of LaTeX version 2005/12/01 or later.
%    \end{macrocode}
%
%</readme>
%
% \Finale

\endinput

% \PrintIndex
% makeindex -s gglo.ist -o hep-font-implementation.gls hep-font-implementation.glo
% makeindex -s gglo.ist -o hep-font-implementation.ind hep-font-implementation.idx
