%%
%% This is file `cfr-lm.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% cfr-lm.dtx  (with options: `sty')
%% Copyright (C) 2008-2024 Clea F. Rees.
%% 
%% This work 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
%%   https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2008-05-04 or later.
%% 
%% This work has the LPPL maintenance status `maintained'.
%% 
%% The Current Maintainer of this work is Clea F. Rees.
%% 
%% This file may only be distributed together with a copy of the package
%% cfr-lm. You may however distribute the package cfr-lm without
%% such generated files.
%% 
%% This work consists of all files listed in manifest.txt.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



\NeedsTeXFormat{LaTeX2e}
\RequirePackage{svn-prov}
\ProvidesPackageSVN[\filebase.sty]{$Id: cfr-lm.dtx 10371 2024-09-20 15:51:48Z cfrees $}[v1.7 \revinfo][Extended support for Latin Modern 2.004]
\DefineFileInfoSVN[clm]
\RequirePackage[T1]{fontenc}
\RequirePackage{nfssext-cfr}[2024/01/01]
\IfFormatAtLeastTF {2020-02-02}{%
  \DeclareEncodingSubset{TS1}{clm}{1}%
  \DeclareEncodingSubset{TS1}{clm2}{1}%
  \DeclareEncodingSubset{TS1}{clm2d}{1}%
  \DeclareEncodingSubset{TS1}{clm2dj}{1}%
  \DeclareEncodingSubset{TS1}{clm2j}{1}%
  \DeclareEncodingSubset{TS1}{clm2jqs}{1}%
  \DeclareEncodingSubset{TS1}{clm2js}{1}%
  \DeclareEncodingSubset{TS1}{clm2jt}{1}%
  \DeclareEncodingSubset{TS1}{clm2jv}{1}%
  \DeclareEncodingSubset{TS1}{clm2qs}{1}%
  \DeclareEncodingSubset{TS1}{clm2s}{1}%
  \DeclareEncodingSubset{TS1}{clm2t}{1}%
  \DeclareEncodingSubset{TS1}{clm2v}{1}%
  \DeclareEncodingSubset{TS1}{clmd}{1}%
  \DeclareEncodingSubset{TS1}{clmdj}{1}%
  \DeclareEncodingSubset{TS1}{clmj}{1}%
  \DeclareEncodingSubset{TS1}{clmjqs}{1}%
  \DeclareEncodingSubset{TS1}{clmjs}{1}%
  \DeclareEncodingSubset{TS1}{clmjt}{1}%
  \DeclareEncodingSubset{TS1}{clmjv}{1}%
  \DeclareEncodingSubset{TS1}{clmqs}{1}%
  \DeclareEncodingSubset{TS1}{clms}{1}%
  \DeclareEncodingSubset{TS1}{clmt}{1}%
  \DeclareEncodingSubset{TS1}{clmv}{1}%
}{%
  \RequirePackage{textcomp}}
\UndeclareTextCommand{\textperthousand}{T1}
\ExplSyntaxOn
%%
\bool_new:N \l__clm_rm_osf_bool
\bool_new:N \l__clm_rm_prop_bool
\bool_new:N \l__clm_sf_osf_bool
\bool_new:N \l__clm_sf_prop_bool
\bool_new:N \l__clm_tt_osf_bool
\bool_new:N \l__clm_tt_prop_bool
\bool_new:N \l__clm_tt_mono_bool
\bool_new:N \l__clm_qt_bool
\keys_define:nn { clm }
{
  rm / oldstyle .bool_set:N = \l__clm_rm_osf_bool,
  rm / oldstyle .default:n = true,
  rm / oldstyle .initial:n = true,
  rm / osf .bool_set:N = \l__clm_rm_osf_bool,
  rm / osf .default:n = true,
  rm / lining .bool_set_inverse:N = \l__clm_rm_osf_bool,
  rm / lining .default:n = true,
  rm / lf .bool_set_inverse:N = \l__clm_rm_osf_bool,
  rm / lf .default:n = true,
  rm / proportional .bool_set:N = \l__clm_rm_prop_bool,
  rm / proportional .default:n = true,
  rm / proportional .initial:n = true,
  rm / prop .bool_set:N = \l__clm_rm_prop_bool,
  rm / prop .default:n = true,
  rm / tabular .bool_set_inverse:N = \l__clm_rm_prop_bool,
  rm / tabular .default:n = true,
  rm / tab .bool_set_inverse:N = \l__clm_rm_prop_bool,
  rm / tab .default:n = true,
  sf / oldstyle .bool_set:N = \l__clm_sf_osf_bool,
  sf / oldstyle .default:n = true,
  sf / oldstyle .initial:n = true,
  sf / osf .bool_set:N = \l__clm_sf_osf_bool,
  sf / osf .default:n = true,
  sf / lining .bool_set_inverse:N = \l__clm_sf_osf_bool,
  sf / lining .default:n = true,
  sf / lf .bool_set_inverse:N = \l__clm_sf_osf_bool,
  sf / lf .default:n = true,
  sf / proportional .bool_set:N = \l__clm_sf_prop_bool,
  sf / proportional .default:n = true,
  sf / proportional .initial:n = true,
  sf / prop .bool_set:N = \l__clm_sf_prop_bool,
  sf / prop .default:n = true,
  sf / tabular .bool_set_inverse:N = \l__clm_sf_prop_bool,
  sf / tabular .default:n = true,
  sf / tab .bool_set_inverse:N = \l__clm_sf_prop_bool,
  sf / tab .default:n = true,
  tt / oldstyle .bool_set:N = \l__clm_tt_osf_bool,
  tt / oldstyle .default:n = true,
  tt / oldstyle .initial:n = true,
  tt / osf .bool_set:N = \l__clm_tt_osf_bool,
  tt / osf .default:n = true,
  tt / lining .bool_set_inverse:N = \l__clm_tt_osf_bool,
  tt / lining .default:n = true,
  tt / lf .bool_set_inverse:N = \l__clm_tt_osf_bool,
  tt / lf .default:n = true,
  tt / proportional .bool_set:N = \l__clm_tt_prop_bool,
  tt / proportional .default:n = true,
  tt / proportional .initial:n = true,
  tt / prop .bool_set:N = \l__clm_tt_prop_bool,
  tt / prop .default:n = true,
  tt / tabular .bool_set_inverse:N = \l__clm_tt_prop_bool,
  tt / tabular .default:n = true,
  tt / tab .bool_set_inverse:N = \l__clm_tt_prop_bool,
  tt / tab .default:n = true,
  tt / monowidth .bool_set:N = \l__clm_tt_mono_bool,
  tt / monowidth .default:n = true,
  tt / monowidth .initial:n = false,
  tt / mono .bool_set:N = \l__clm_tt_mono_bool,
  tt / mono .default:n = true,
  tt / variable .bool_set_inverse:N = \l__clm_tt_mono_bool,
  tt / variable .default:n = true,
  tt / var .bool_set_inverse:N = \l__clm_tt_mono_bool,
  tt / var .default:n = true,
  rm .code:n ={
    \keys_set:nn { clm / rm } { #1 }
  },
  rm .value_required:n = true,
  rm .usage:n = load,
  sf .code:n ={
    \keys_set:nn { clm / sf } { #1 }
  },
  sf .value_required:n = true,
  sf .usage:n = load,
  tt .code:n ={
    \keys_set:nn { clm / tt } { #1 }
  },
  tt .value_required:n = true,
  tt .usage:n = load,
  qt .bool_set:N = \l__clm_qt_bool,
  qt .default:n = true,
  qt .initial:n = false,
  qt .usage:n = load,
}
\providecommand \IfFormatAtLeastTF { \@ifl@t@r \fmtversion }
\IfFormatAtLeastTF { 2022-06-01 }
{
  \ProcessKeyOptions [ clm ]
}{
  \RequirePackage { l3keys2e }
  \ProcessKeysOptions { clm }
}
\IfFormatAtLeastTF { 2020-10-01 }{
}{
  \RequirePackage { xparse }
  \providecommand \ExpandArgs [1]
  { \cs_if_exist_use:c { exp_args:N #1 } }
}
\tl_gset:Ne \rmdefault
{
  clm \bool_if:NT \l__clm_rm_prop_bool { 2 }
  \bool_if:NT \l__clm_rm_osf_bool { j }
}
\tl_gset:Ne \sfdefault
{
  clm \bool_if:NT \l__clm_sf_prop_bool { 2 }
  \bool_if:NT \l__clm_sf_osf_bool { j } s
}
\tl_gset:Ne \ttdefault
{
  clm \bool_if:NT \l__clm_tt_prop_bool { 2 }
  \bool_if:NT \l__clm_tt_osf_bool { j }
  \bool_if:NTF \l__clm_tt_mono_bool { t } { v }
}
\hook_gput_code:nnn { begindocument } { . }
{
  \bool_if:NT \l__clm_qt_bool
  {
    \cs_if_exist:NTF { \qtfont }
    {
      \qtfont{\qtstyle}
    }{
      \PackageWarning{cfr-lm}
      {
        Option ~ 'qt' ~ cannot ~ be ~ implemented ~ unless \MessageBreak
        '\backslash qtfont' ~ is ~ defined ~ appropriately. ~ This ~ is ~ not \MessageBreak
        done ~ automatically ~ to ~ maximise ~ compatibility ~ with ~ other \MessageBreak
        classes ~ and ~ packages. ~ The ~ suggested ~ use ~ is ~ to ~ have ~ '\backslash qtfont' \MessageBreak
        redefine ~ a command ~ such ~ as ~ '\backslash quotefont' ~ which ~ is ~ initially \MessageBreak
        set ~ to ~ some ~ reasonable ~ default ~ and ~ used ~ in ~ the \MessageBreak
        definition ~ of ~ the ~ quote ~ and/or ~ quotation ~ environments. \MessageBreak
        A ~ font ~ package ~ has ~ no ~ business ~ meddling ~ in ~ such \MessageBreak
        things ~ so ~ I'm ~ going ~ to ~ ignore ~ this ~ option
      }
    }
  }
}
\ExplSyntaxOff
\SetSymbolFont{operators}   {normal}{OT1}{lmr} {m}{n}
\SetSymbolFont{letters}     {normal}{OML}{lmm} {m}{it}
\SetSymbolFont{symbols}     {normal}{OMS}{lmsy}{m}{n}
\SetSymbolFont{largesymbols}{normal}{OMX}{lmex}{m}{n}
\SetSymbolFont{operators}   {bold}  {OT1}{lmr} {bx}{n}
\SetSymbolFont{letters}     {bold}  {OML}{lmm} {b}{it}
\SetSymbolFont{symbols}     {bold}  {OMS}{lmsy}{b}{n}
\SetSymbolFont{largesymbols}{bold}  {OMX}{lmex}{m}{n}
\DeclareFontSubstitution{OT1}{lmr}{m}{n}
\DeclareFontSubstitution{OML}{lmm}{m}{it}
\DeclareFontSubstitution{OMS}{lmsy}{m}{n}
\DeclareFontSubstitution{OMX}{lmex}{m}{n}
\SetMathAlphabet{\mathbf}{normal}{OT1}{lmr}{bx}{n}
\SetMathAlphabet{\mathsf}{normal}{OT1}{lmss}{m}{n}
\SetMathAlphabet{\mathit}{normal}{OT1}{lmr}{m}{it}
\SetMathAlphabet{\mathtt}{normal}{OT1}{lmtt}{m}{n}
\SetMathAlphabet{\mathbf}{bold}  {OT1}{lmr}{bx}{n}
\SetMathAlphabet{\mathsf}{bold}  {OT1}{lmss}{bx}{n}
\SetMathAlphabet{\mathit}{bold}  {OT1}{lmr}{bx}{it}
\SetMathAlphabet{\mathtt}{bold}  {OT1}{lmtt}{m}{n}
\def\mathsterling{\mathit{\mathchar"70BF}}
\DeclareRobustCommand{\dotdigitenc}{%
  \not@math@alphabet\dotdigitenc\relax
  \fontencoding{U}\selectfont}
\DeclareTextFontCommand{\textdde}{\dotdigitenc}
\newcommand*{\zeroslash}{\textdde{\char 250}}
\ExplSyntaxOn
\cs_new_nopar:Nn \__clm_microtype_hook:
{
  \clist_map_inline:nn
  {
    clm,clm2,clm2j,clmj,% roman
    clms,clm2js,clm2s,clmjs,% sans
    clmqs,clm2jqs,clm2qs,clmjqs%
    %  clm2d,clm2dj,clmd,clmdj,% leave unaliased?
    %  clm2jv,clmjv,clm2v,clmv,% leave unaliased?
    %  clmt,clm2t,clmjt,clm2jt% leave unaliased?
  }{
    \DeclareMicrotypeAlias { ##1 } { cmr }
  }
}
\@ifpackageloaded{microtype}
{
  \__clm_microtype_hook:
}{
  \cs_if_free:cTF { Microtype@Hook }
  {% MinionPro has \global before this
    \cs_new_eq:NN \Microtype@Hook \__clm_microtype_hook:
  }{
    \g@addto@macro\Microtype@Hook{\__clm_microtype_hook:}
  }
}
\ExplSyntaxOff
%% end cfr-lm.sty
\endinput
%%
%% End of file `cfr-lm.sty'.
