%% %% 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'.