% \iffalse meta-comment
%
% Copyright (C) 1993-2023
% The LaTeX Project and any individual authors listed elsewhere
% in this file.
%
% This file is part of the LaTeX base system.
% -------------------------------------------
%
% It 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 or later.
%
% This file has the LPPL maintenance status "maintained".
%
% The list of all files belonging to the LaTeX base distribution is
% given in the file `manifest.txt'. See also `legal.txt' for additional
% information.
%
% The list of derived (unpacked) files belonging to the distribution
% and covered by LPPL is defined by the unpacking scripts (with
% extension .ins) which are part of the distribution.
%
% \fi
% \iffalse
%%% From File: ltfsscmp.dtx
%% Copyright (C) 1989-1995 Frank Mittelbach and Rainer Sch\"opf,
%% all rights reserved.
%
%<*driver>
% \fi
%
%
\ProvidesFile{ltfsscmp.dtx}
             [2020/12/05 v3.0f LaTeX Kernel (NFSS1 Compatibility)]
% \iffalse
\documentclass{ltxdoc}
\begin{document}
\DocInput{ltfsscmp.dtx}
\end{document}
%</driver>
% \fi
%
% \iffalse
%<+checkmem>\def\CHECKMEM{\tracingstats=2
%<+checkmem>  \newlinechar=`\^^J
%<+checkmem>  \message{^^JMemory usage: \filename}\shipout\hbox{}}
%<+checkmem>\CHECKMEM
% \fi
%
%
%
% \GetFileInfo{ltfsscmp.dtx}
% \title{A new font selection scheme for \TeX{} macro packages\\
%        (Compatibility with NFSS1)\thanks
%       {This file has version number
%       \fileversion\ dated \filedate}}
%
% \author{Frank Mittelbach \and Rainer Sch\"opf}
%
% \MaintainedByLaTeXTeam{latex}
% \maketitle
%
% This file contains the  implementation of commands giving
% compatibility with the original `NFSS1' release of the Font Selection
% Scheme.
%
% \begin{quote}
%   \textbf{Warning:}
%  The macro documentation is still basically the documentation from the
%  first NFSS release  and therefore in some cases probably not
%  completely accurate.
% \end{quote}
%
% Version 1 of NFSS is obsolete now for about 20 years (and was
%   ``current'' only for a short intermediate time) so with the 2015
%   release these internal interface commands are removed from the
%   kernel and  made available via \textsf{latexrelease} package so that
%   backward compatibility remains ensured for very old documents.
%
% \MaybeStop{}
%
%
% \changes{v3.0b}{1995/06/15}
%         {(DPC) minor documentation edits}
% \changes{v3.0a}{1995/05/24}
%         {(DPC) Make file from previous file, fam.dtx 1995/05/20 v2.2d}
% \changes{v3.0d}{2015/02/21}
%         {Removed autoload code}
% \changes{v3.0e}{2015/02/22}
%         {Moved all code into latexrelease - obsolete commands are no
%   longer automatically part of the kernel}
%
%
%    \begin{macrocode}
%<*latexrelease>
\IncludeInRelease{2015/01/01}{\new@fontshape}%
                             {NFSS version1 commands}%
\let\new@fontshape\@undefined
\let\warn@rel@i\@undefined
\let\scan@fontshape\@undefined
\let\scan@@fontshape\@undefined
\let\subst@fontshape\@undefined
\let\extra@def\@undefined
\let\default@mextra\@undefined
\let\preload@sizes\@undefined
\let\err@rel@i\@undefined
\let\newmathalphabet\@undefined
\let\newmathalphabet@\@undefined
\let\newmathalphabet@@@\@undefined
\let\if@no@font@opt\@undefined
\let\@no@font@optfalse\@undefined
\let\define@mathalphabet\@undefined
\let\define@mathgroup\@undefined
\let\addtoversion\@undefined
\EndIncludeInRelease
%    \end{macrocode}
%
%    In older releases we provide the original definitions.
%
%    \begin{macrocode}
\IncludeInRelease{0000/00/00}{\new@fontshape}%
                             {NFSS version1 commands}%
%    \end{macrocode}
%
% \begin{macro}{\new@fontshape}
%    The interface is now |\DeclareFontShape|.
%    \begin{macrocode}
\gdef\new@fontshape#1#2#3#4{%
     \warn@rel@i\new@fontshape\DeclareFontShape
     \expandafter\scan@fontshape\@gobble#4<\@nil><<%
     \DeclareFontShape U{#1}{#2}{#3}\reserved@f}%
\@onlypreamble\new@fontshape
%    \end{macrocode}
% \end{macro}
%
%
%  \begin{macro}{\warn@rel@i}
%    The warning message used above.
%    \begin{macrocode}
\gdef\warn@rel@i#1#2{%
 \@font@warning{***  NFSS release 1 command
               \noexpand#1found\MessageBreak
   ***  Update by using release 2 command
        \string#2.\MessageBreak
   ***  Recovery is probably possible}%
}%
\@onlypreamble\warn@rel@i
%    \end{macrocode}
%  \end{macro}
%
%
%
%  \begin{macro}{\scan@fontshape}
%    This will scan the old font shape definition syntax.
%    \begin{macrocode}
\gdef\scan@fontshape{%
  \let\reserved@f\@empty
  \let\reserved@e\@empty %        holds last info
  \scan@@fontshape
}%
\@onlypreamble\scan@fontshape
%    \end{macrocode}
%  \end{macro}
%
%
%  \begin{macro}{\scan@@fontshape}
%    \begin{macrocode}
\gdef\scan@@fontshape#1>#2#3<{%
  \ifx\@nil#1%
    \edef\reserved@f{\reserved@f\reserved@e}%
  \else
    \def\reserved@b{#1}%       nick names
    \def\reserved@c{#3}%
    \in@{ at}{#3}%
    \ifin@
      \in@{pt}{#3}%  not a proof but a good chance
      \ifin@
%    \end{macrocode}
%    We grab also everything after pt and discard it if people have
%    forgotten to place a percent sign there.
% \changes{v2.1d}{1994/02/10}{scan away stuff after pt}
%    \begin{macrocode}
        \def\reserved@a##1 at##2pt##3\@nil{%
           \def\reserved@b{##2}%
           \def\reserved@c{##1}%
           }%
        \reserved@a#3\@nil
      \fi
    \fi
    \ifnum 0<0#2
      \edef\reserved@d{subf*\reserved@c}%
      \ifcase #2\or
      \or
      \else
        \errmessage{*** What's this? NFSS release 0? ***}%
      \fi
    \else
      \edef\reserved@d{#2\reserved@c}%
    \fi
    \ifx\reserved@d\reserved@e
      \edef\reserved@f{\reserved@f<\reserved@b>}%
    \else
      \edef\reserved@f{\reserved@f\reserved@e<\reserved@b>}%add old info
      \let\reserved@e\reserved@d
    \fi
    \expandafter\scan@@fontshape
  \fi
}%
\@onlypreamble\scan@@fontshape
%    \end{macrocode}
%  \end{macro}
%
%
%
% \begin{macro}{\subst@fontshape}
%    This is now also handled by the extend syntax of
%    |\DeclareFontShape|.
%    \begin{macrocode}
\gdef\subst@fontshape#1#2#3#4#5#6{%
     \warn@rel@i\subst@fontshape\DeclareFontShape
     \DeclareFontShape{U}{#1}{#2}{#3}{<->sub*#4/#5/#6}{}}%
\@onlypreamble\subst@fontshape
%    \end{macrocode}
% \end{macro}
%
%
%
%  \begin{macro}{\extra@def}
%    This was replaced by |\DeclareFontFamily|.
%    \begin{macrocode}
\gdef\extra@def#1#2#3{%
     \warn@rel@i\extra@def\DeclareFontFamily
     \DeclareFontFamily{U}{#1}{}%
}%
\@onlypreamble\extra@def
%    \end{macrocode}
%  \end{macro}
%
%
%
%
%  \begin{macro}{\default@mextra}
%    The new name is |\DeclareFontEncodingDefaults| but in this case
%    we don't feel comfortable with this either.
%    \begin{macrocode}
\gdef\default@mextra{%
  \warn@rel@i\default@mextra\DeclareFontEncodingDefaults
%    \end{macrocode}
%    We pick up the argument to |\default@mextra| implicitly as
%    the second argument of |\DeclareFontEncodingDefaults|.
%    \begin{macrocode}
  \DeclareFontEncodingDefaults\relax
}%
\@onlypreamble\default@mextra
%    \end{macrocode}
%  \end{macro}
%
%
%
%  \begin{macro}{\preload@sizes}
%    The new interface is |\DeclarePreloadSizes|.
%    \begin{macrocode}
\gdef\preload@sizes{%
     \warn@rel@i\preload@sizes\DeclarePreloadSizes
     \DeclarePreloadSizes U%
}%
\@onlypreamble\preload@sizes
%    \end{macrocode}
%  \end{macro}
%
%
%  \begin{macro}{\err@rel@i}
%    This macro is used in cases where emulation with NFSS2 features
%    is not really possible.
%    \begin{macrocode}
\gdef\err@rel@i#1#2{%
  \@latex@error{***  NFSS release 1 command \noexpand#1found%
          ^^J***  Recovery not possible. Use \string#2}%
       {The new release of NFSS doesn't support the
        \noexpand#1command^^Jany longer.
        Please upgrade your file to the syntax of NFSS
        release 2^^Jusing the \noexpand#2command.}%
%    \end{macrocode}
%    Let's die.
%    \begin{macrocode}
  \batchmode\input.\relax
}%
\@onlypreamble\err@rel@i
%    \end{macrocode}
%  \end{macro}
%
%
%
% \begin{macro}{\newmathalphabet}
% \begin{macro}{\newmathalphabet@@}
% \begin{macro}{\newmathalphabet@@@}
%    |\newmathalphabet| is the old form.
%    \begin{macrocode}
\gdef\newmathalphabet{%
  \if@no@font@opt
    \@latex@error{*** NFSS release 1 command
                    \noexpand\newmathalphabet found%
     ^^J \space*** Automatic recovery not possible.%
     ^^J \space*** TYPE H for Help%
              }%
       {Please look at the file usrguide.tex for hints on
        how to resolve this problem.}%
  \else
     \warn@rel@i\newmathalphabet\DeclareMathAlphabet
  \fi
  \@ifstar\newmathalphabet@@@
          \newmathalphabet@@}%
\gdef\newmathalphabet@@#1{\DeclareMathAlphabet#1{U}{}{}{}}%
\gdef\newmathalphabet@@@#1#2#3#4{%
       \DeclareMathAlphabet{#1}{U}{#2}{#3}{#4}}%
\@onlypreamble\newmathalphabet
\@onlypreamble\newmathalphabet@@
\@onlypreamble\newmathalphabet@@@
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%  \begin{macro}{\if@no@font@opt}
%  \begin{macro}{\@no@font@optfalse}
%    \begin{macrocode}
\global\let\if@no@font@opt\iftrue
\gdef\@no@font@optfalse{\let\if@no@font@opt\iffalse}%
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%  \begin{macro}{\define@mathalphabet}
%    This is a case where dying is best.
%    \begin{macrocode}
\gdef\define@mathalphabet{%
      \err@rel@i\define@mathalphabet\DeclareMathAlphabet
}%
\@onlypreamble\define@mathalphabet
%    \end{macrocode}
%  \end{macro}
%
%
%
%
%  \begin{macro}{\define@mathgroup}
%    And here is another one
%    \begin{macrocode}
\gdef\define@mathgroup{%
      \err@rel@i\define@mathgroup\DeclareSymbolFont
}%
\@onlypreamble\define@mathgroup
%    \end{macrocode}
%  \end{macro}
%
% \begin{macro}{\addtoversion}
%    |\addtoversion| is the old form.
%    \begin{macrocode}
\def\addtoversion#1#2{%
  \warn@rel@i\addtoversion\SetMathAlphabet
  \SetMathAlphabet#2{#1}{U}}%
\@onlypreamble\addtoversion
%    \end{macrocode}
% \end{macro}
%
% Finishing off this huge |\IncludeInRelease| argument:
%    \begin{macrocode}
\EndIncludeInRelease
%</latexrelease>
%    \end{macrocode}
%
% \Finale
%
