Blame latex/style/dbk_misc.sty

Packit Service 76cb02
%
Packit Service 76cb02
% dblatex - Contains miscellaneous latex macros
Packit Service 76cb02
%
Packit Service 76cb02
%
Packit Service 76cb02
Packit Service 76cb02
%%
Packit Service 76cb02
%% Redefine the `float' behaviour so that it can split over pages.
Packit Service 76cb02
%% Actually there's nothing floating anymore, but the float style is preserved.
Packit Service 76cb02
%% The XSLT templates must be redefined to call this macro instead.
Packit Service 76cb02
%% - #1: float name
Packit Service 76cb02
%% - #2: caption material (including the \caption macro call)
Packit Service 76cb02
%%
Packit Service 76cb02
%% It assumes that floats are created with \newfloat and it
Packit Service 76cb02
%% uses some internal macros of float.sty to emulate the same environment.
Packit Service 76cb02
%% It is compatible with \caption redefined by caption.sty.
Packit Service 76cb02
%%
Packit Service 76cb02
\newenvironment{longfloat}[2]{
Packit Service 76cb02
  \@nameuse{fst@#1}%
Packit Service 76cb02
  \def\@captype{#1}\setbox\@floatcapt=\vbox{}%
Packit Service 76cb02
  \def\@capcontent{#2} % caption material
Packit Service 76cb02
  \vspace{2\parskip}\pagebreak[3]
Packit Service 76cb02
  \@parboxrestore%
Packit Service 76cb02
  \@fs@pre\@fs@iftopcapt%
Packit Service 76cb02
    \@capcontent%
Packit Service 76cb02
    \ifvoid\@floatcapt\else\unvbox\@floatcapt\par\@fs@mid\fi%
Packit Service 76cb02
  \else\fi%
Packit Service 76cb02
}{
Packit Service 76cb02
  \@fs@iftopcapt\else%
Packit Service 76cb02
    \@capcontent%
Packit Service 76cb02
    \ifvoid\@floatcapt\else\par\@fs@mid\unvbox\@floatcapt\fi
Packit Service 76cb02
  \fi\par\@fs@post\vskip\z@%
Packit Service 76cb02
  \vspace{2mm}
Packit Service 76cb02
}
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
%%
Packit Service 76cb02
%% New listing environment based upon the fancyvrb environment. Its role
Packit Service 76cb02
%% is to handle the specific `scale' option.
Packit Service 76cb02
%% 
Packit Service 76cb02
%% Author: Jean-Côme Charpentier.
Packit Service 76cb02
%%
Packit Service 76cb02
\RequirePackage{fancyvrb}
Packit Service 76cb02
\lstset{fancyvrb=true}
Packit Service 76cb02
Packit Service 76cb02
\newbox\lstbox
Packit Service 76cb02
\newlength{\lstwidthw}
Packit Service 76cb02
Packit Service 76cb02
Packit Service 76cb02
%%% New listing option to scale the listing to fit the page width
Packit Service 76cb02
\lst@Key{scale}{true}[t]{\lstKV@SetIf{#1}\lst@ifscale}
Packit Service 76cb02
Packit Service 76cb02
%%% Remember the original fancyvrb macro to handle options
Packit Service 76cb02
\let\FV@UseKeyValuesOrig\FV@UseKeyValues
Packit Service 76cb02
Packit Service 76cb02
\def\code{\FV@Environment{}{lstcode}}
Packit Service 76cb02
\def\FVB@lstcode{%
Packit Service 76cb02
  % Just dump the listing into a file, skip the options used later
Packit Service 76cb02
  \let\FV@UseKeyValues\relax
Packit Service 76cb02
  \FVB@VerbatimOut{lst.tmp}}
Packit Service 76cb02
Packit Service 76cb02
\def\FVE@lstcode{%
Packit Service 76cb02
  \FVE@VerbatimOut
Packit Service 76cb02
  \let\FV@UseKeyValues\FV@UseKeyValuesOrig
Packit Service 76cb02
  % Now, apply the passed options
Packit Service 76cb02
  \expandafter\lstset\expandafter{\FV@KeyValues}
Packit Service 76cb02
  % Is there any scaling required?
Packit Service 76cb02
  \lst@ifscale
Packit Service 76cb02
    \lst@ifbreaklines
Packit Service 76cb02
      \lstwidthw=\lst@linewidth
Packit Service 76cb02
    \else
Packit Service 76cb02
      % Force the style to perform a valid fontsize scaling
Packit Service 76cb02
      \lstset{basicstyle=\ttfamily}
Packit Service 76cb02
      \begin{lrbox}{\lstbox}
Packit Service 76cb02
        \lstinputlisting{lst.tmp}%
Packit Service 76cb02
      \end{lrbox}
Packit Service 76cb02
      \settowidth{\lstwidthw}{\usebox{\lstbox}}
Packit Service 76cb02
    \fi
Packit Service 76cb02
    \ifdim\lstwidthw>\linewidth
Packit Service 76cb02
      % Compute real width with basic font to perform consistent scaling
Packit Service 76cb02
      \lst@ifbreaklines
Packit Service 76cb02
        \setlength{\lstwidthw}{\lstwidthw*% 
Packit Service 76cb02
                               \ratio{\lstcharwidthb}{\lstcharwidth}}
Packit Service 76cb02
      \fi
Packit Service 76cb02
      \lstset{basicstyle=\ttfamily}
Packit Service 76cb02
      \typeout{Listing width <\the\lstwidthw> scaled to fit in <\the\linewidth>}
Packit Service 76cb02
      % Compute the width ratio
Packit Service 76cb02
      \edef\r@tio{\the\numexpr \linewidth/(\lstwidthw/1000)-1}%
Packit Service 76cb02
      \begingroup
Packit Service 76cb02
        \@tempdima\f@size pt
Packit Service 76cb02
        \typeout{\the\@tempdima}
Packit Service 76cb02
        \@tempdima 0.\r@tio\@tempdima
Packit Service 76cb02
        \typeout{\the\@tempdima}
Packit Service 76cb02
        % interlignage = 1.2 x font size
Packit Service 76cb02
        \@tempdimb 1.2\@tempdima
Packit Service 76cb02
        % Redefine the fontsize to apply
Packit Service 76cb02
        \fontsize{\@tempdima}{\@tempdimb}%
Packit Service 76cb02
        % Print out the listing with this new size
Packit Service 76cb02
        \lstinputlisting[linewidth=\linewidth]{lst.tmp}%
Packit Service 76cb02
      \endgroup
Packit Service 76cb02
    \else
Packit Service 76cb02
      % The listing fits in the available width, do nothing special
Packit Service 76cb02
      \lstinputlisting{lst.tmp}%
Packit Service 76cb02
    \fi
Packit Service 76cb02
  \else
Packit Service 76cb02
    % No scaling, do as usual
Packit Service 76cb02
    \lstinputlisting{lst.tmp}
Packit Service 76cb02
  \fi
Packit Service 76cb02
  %\strut
Packit Service 76cb02
}
Packit Service 76cb02
\DefineVerbatimEnvironment{lstcode}{lstcode}{}
Packit Service 76cb02
Packit Service 76cb02
% Redefine \lst@DeInit to disable page break after the listing
Packit Service 76cb02
\def\lst@DeInit{%
Packit Service 76cb02
  \lst@XPrintToken
Packit Service 76cb02
  \lst@EOLUpdate
Packit Service 76cb02
  \global\advance\lst@newlines\m@ne
Packit Service 76cb02
  \lst@ifshowlines
Packit Service 76cb02
    \lst@DoNewLines
Packit Service 76cb02
  \else
Packit Service 76cb02
    \setbox\@tempboxa\vbox{\lst@DoNewLines}%
Packit Service 76cb02
  \fi
Packit Service 76cb02
  \lst@ifdisplaystyle
Packit Service 76cb02
    \par\nobreak
Packit Service 76cb02
    \removelastskip
Packit Service 76cb02
  \fi
Packit Service 76cb02
  \lsthk@ExitVars
Packit Service 76cb02
  \everypar{}%
Packit Service 76cb02
  \lsthk@DeInit
Packit Service 76cb02
  \normalbaselines
Packit Service 76cb02
  \normalcolor
Packit Service 76cb02
  \lst@MakeCaption b%
Packit Service 76cb02
  \lst@ifbox
Packit Service 76cb02
    \egroup
Packit Service 76cb02
    $%
Packit Service 76cb02
    \hss
Packit Service 76cb02
    \egroup
Packit Service 76cb02
    \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
Packit Service 76cb02
  \else
Packit Service 76cb02
    \lst@ifdisplaystyle
Packit Service 76cb02
      \@tempdima\lst@belowskip
Packit Service 76cb02
      \ifdim\@tempdima<\z@
Packit Service 76cb02
        \par\nobreak
Packit Service 76cb02
        \vspace{-\@tempdima}%
Packit Service 76cb02
      \else
Packit Service 76cb02
        \par\penalty-50
Packit Service 76cb02
        \vspace\lst@belowskip
Packit Service 76cb02
      \fi
Packit Service 76cb02
    \fi
Packit Service 76cb02
  \fi
Packit Service 76cb02
  \ifx\lst@multicols\@empty\else
Packit Service 76cb02
    \def\lst@next{\global\let\@checkend\@gobble
Packit Service 76cb02
      \endmulticols
Packit Service 76cb02
      \global\let\@checkend\lst@@checkend
Packit Service 76cb02
    }%
Packit Service 76cb02
    \expandafter\lst@next
Packit Service 76cb02
  \fi
Packit Service 76cb02
  \ifx\lst@float\relax\else
Packit Service 76cb02
    \expandafter\lst@endfloat
Packit Service 76cb02
  \fi
Packit Service 76cb02
  \endgroup
Packit Service 76cb02
} %$
Packit Service 76cb02