%%
%% The LaTeX Companion, 3rd ed
%%
%% Copyright (C) 2017-2022 Frank Mittelbach
%%
%% 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.
%%
%% See https://www.latex-project.org/lppl.txt for details.
%%
%
\LoadClass[twoside]{article}

\RequirePackage[T1]{fontenc}

\RequirePackage{tgtermes}
\RequirePackage[matchuppercase]{tgheros}

\renewcommand{\ttdefault}{lmtt}

\let\StartShownPreambleCommands\relax
\let\StopShownPreambleCommands\relax


\let\ps@origplain\ps@plain
\let\ps@plain\ps@empty % this class doesn't produces page numbers
                      % since this would make examples too big
                      % but if necessary there is origplain


% Improve \LaTeX and \TeX logo when used with slanted fonts

\DeclareRobustCommand\TeX{T%
 \ifdim\fontdimen1\font>\z@ \kern-.04em\fi     % new
 \kern-.1667em\lower.5ex\hbox{E}%
 \ifdim\fontdimen1\font>\z@ \kern.07em\fi      % new
 \kern-.125emX\@}

\DeclareRobustCommand{\LaTeX}{L%
 \ifdim\fontdimen1\font>\z@ \kern.1em\fi       % new
 \kern-.36em%
       {\sbox\z@ T%
        \vbox to\ht\z@{\hbox{\check@mathfonts
                             \fontsize\sf@size\z@
                             \math@fontsfalse\selectfont
                             A}%
                       \vss}%
       }%
       \kern-.15em%
       \TeX}

% Book version restricts to two colors. This is set up in the
% code below after \endinput.
%
% \endinput


% As the book is printed in two colors only (black and blue) we need
% to ensure that other colors are replaced by gray if necessary:

%shadings defined in the preamble muss use cmyk:
\PassOptionsToPackage{cmyk}{xcolor}

\AddToHook{package/xcolor/after}{%
  \def\XC@col@rlet[#1]#2[#3]#4%
{\begingroup
 \edef\@@cls{#1}\XC@edef\@@nam{#2}\XC@sdef\@@mod{#3}\XC@edef\@@clr{#4}%
 \XC@info\@@clr\@@tmp\XC@@tstfalse
 \ifnum\@@tmp<2 \ifx\@@mod\@empty %instead of =\@ne
   \ifx\@@cls\@empty
     \XC@@tsttrue
   \else
     \edef\@@tmp
      {\expandafter\expandafter\expandafter\@secondoffive
        \csname\@backslashchar color@\@@clr\endcsname}%
     \ifx\@@cls\@@tmp\XC@@tsttrue\fi
   \fi
 \fi\fi
 \ifXC@@tst
   \XC@logdef\@@nam\XC@c@l@rlet\@@nam\@@clr
 \else
   \extractcolorspec\@@clr\@@clr
   \ifx\@@mod\@empty\else
     \expandafter\convertcolorspec\@@clr\@@mod\@@clr
     \edef\@@clr{{\@@mod}{\@@clr}}\fi
   \edef\@@tmp{\noexpand\XC@definecolor[\@@cls]{\@@nam}\@@clr}%
 \fi
 \expandafter\endgroup\@@tmp\xglobal@stop}%
}

\ExplSyntaxOn
%if the color is not a spot color, color space shouldn't set it.
%this is a simple test looking if the specification starts with a /:
\AddToHook{package/colorspace/after}{%
\cs_set:cpn {pgfsys@color@&spot@fill} #1{%
 \spc@getir{\string\color@pgffillcolor}%
 \tl_if_head_eq_charcode:fNT {\spc@ir}/
 {
   \pgfsysprotocol@literal{\spc@ir\space cs}%
   \pgfsysprotocol@literal{#1~sc}
 }}
\cs_set:cpn {pgfsys@color@&spot@stroke} #1{%
 \spc@getir{\string\color@pgfstrokecolor}%
 \tl_if_head_eq_charcode:fNT {\spc@ir}/
  {
    \pgfsysprotocol@literal{\spc@ir\space CS}%
    \pgfsysprotocol@literal{#1~SC}
  }}}

%for the deviceN we need to declare a few pgf commands
% they don't harm if not used
\def\pgfsys@color@bluexblack@fill#1#2{
\spc@getir{\string\color@pgffillcolor}
 \tl_if_head_eq_charcode:fNT {\spc@ir}/
  {
    \pgfsysprotocol@literal{\spc@ir\space cs}%
    \pgfsysprotocol@literal{#1~#2~scn}
  }}

\def\pgfsys@color@bluexblack@stroke#1#2{
\spc@getir{\string\color@pgfstrokecolor}
 \tl_if_head_eq_charcode:fNT {\spc@ir}/
  {
    \pgfsysprotocol@literal{\spc@ir\space CS}%
    \pgfsysprotocol@literal{#1~#2~SCN}
  }}

\def\pgfsys@color@bluexblack#1#2{\pgfsys@color@bluexblack@stroke{#1}{#2}%
 \pgfsys@color@bluexblack@fill{#1}{#2}}
\ExplSyntaxOff


\AddToHook{begindocument/before}{
\ifx\color\@undefined
\else
 \def\pgfutil@colorlet#1#2{\colorlet{#1}{#2}}
 %in case it hasn't been loaded
 \usepackage{xcolor}

 %we need natural model when setting up the spot colors
 \selectcolormodel{natural}
 \usepackage{colorspace}
 \definespotcolor{blue}{PANTONE 3005 U}{1,0.56,0,0}      % what we call ``blue'' in this book
 \definecolorspace{bluexblack}{mixed}{blue,black}
 \definecolor{spotblack}{bluexblack}{0,1}
 \definecolor{spotblue}{bluexblack}{1,0}

 %
 \definecolor{red}{gray}{.7}
 \definecolor{green}{gray}{.8}
 \definecolor{yellow}{gray}{.9}
 %
 \definecolor{orange}{gray}{.75}      % for todo notes
 %for shadings defined later
 \selectcolormodel{cmyk}
 %don't convert colors anymore!
 \convertcolorsUfalse
 \convertcolorsDfalse
\fi
}


% for margin rules in math examples we need color to make them
% blue. So in this class color is actually always present:

\RequirePackage{color}

\newcommand \EX@rulewidth {0.25pt}

%% Keep on hacking!
\newcommand \SetupMarginLines{%
%
% with new kernel this should use a later hook ...
% \AtBeginDocument
 \AddToHook{begindocument/end}%
    {\hbox\bgroup \kern-\EX@rulewidth
     {\color{blue}\vrule width \EX@rulewidth}%
     \vbox\bgroup}%
 \AtEndDocument
    {\egroup
     {\color{blue}\vrule width \EX@rulewidth}%
     \kern-\EX@rulewidth \egroup}%
}


\SetupMarginLines


\endinput