% \iffalse meta-comment
%/GitFileInfo=tudscr-twocolfix.dtx
%
%  TUD-Script -- Corporate Design of Technische Universität Dresden
% ----------------------------------------------------------------------------
%
%  Copyright (C) Falk Hanisch <hanisch.latex@outlook.com>, 2012-2022
%
% ----------------------------------------------------------------------------
%
%  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
%  any later version. The latest version of this license is in
%    http://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 and author of this work is Falk Hanisch.
%
% ----------------------------------------------------------------------------
%
% \fi
%
% \iffalse ins:batch + dtx:driver
%<*ins>
\ifx\documentclass\undefined
  \input docstrip.tex
  \ifToplevel{\batchinput{tudscr.ins}}
\else
  \let\endbatchfile\relax
\fi
\endbatchfile
%</ins>
%<*dtx>
\ProvidesFile{tudscr-twocolfix.dtx}[2022/08/09]
\RequirePackage{tudscr-gitinfo}
\documentclass[english,ngerman,xindy]{tudscrdoc}
\iftutex
  \usepackage{fontspec}
\else
  \usepackage[T1]{fontenc}
  \usepackage[ngerman=ngerman-x-latest]{hyphsubst}
\fi
\usepackage{babel}
\usepackage{tudscrfonts}
\usepackage[babel]{microtype}

\GitHubBase{\TUDScriptRepository}
\begin{document}
  \author{Falk Hanisch\TUDScriptContactTitle}
  \maketitle
  \tableofcontents
  \DocInput{\filename}
\end{document}
%</dtx>
% \fi
%
% \selectlanguage{ngerman}
%
% \changes{v2.05}{2016/04/25}{Überprüfen der Definition von \cs{@topnewpage}
%   des \LaTeXe"~Kernels}^^A
%
% \ToDo{Als eingenständiges Paket herauslösen}[v2.08]
% \ToDo{CheckCommand verwenden?}[v2.08]
%
%
%
% \section{Das Paket \pkg{twocolfix} -- Bugfix für den zweispaltigen Satz}
%
% Der \LaTeXe"~Kernel enthält einen
% \href{http://latex-project.org/cgi-bin/ltxbugs2html?pr=latex/3126}{Fehler},
% wodurch im zweispaltigen Satz Kapitelüberschriften höher als im 
% einspaltigen Layout gesetzt werden. Zwar ist dieser schon länger bekannt, 
% jedoch bisher noch nicht behoben (\GitHubRepo(latex3/latex2e)<509>).
%
% Das Paket \pkg{twocolfix} soll dies beheben. Eine Integration des Bugfixes 
% in \KOMAScript{} wurde bereits bei Markus Kohm angefragt, jedoch
% \href{http://www.komascript.de/node/1681}{von ihm nicht weiter verfolgt}.
%
%    \begin{macrocode}
%<*package>
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{twocolfix}[%
%!TUD@Version
  package (twocolumn layout bugfix)%
]
%</package>
%    \end{macrocode}
%
% \iffalse
%<*package>
% \fi
%
% Es wird der fehlerhafte Befehl aus dem \LaTeXe"~Kernel neu definiert. 
% Allerdings definieren die \KOMAScript-Klassen das Makro \cs{@topnewpage} 
% um und sichern vorher das Original in \cs{scr@topnewpage}. Daher wird der 
% neue Befehl erst temporär definiert. 
%    \begin{macrocode}
\long\def \@tempa [#1]{%
  \@nodocument%
  \@next\@currbox\@freelist{}{}%
  \global \setbox\@currbox%
    \vbox {%
      \break%
      \prevdepth\z@%
      \begingroup%
      \normalcolor%
      \hsize\textwidth%
%    \end{macrocode}
% Damit der Inhalt des optionale Argumentes mit den gleichen Absatzeinstellungen
% gesetzt wird, werden diese nach \cs{@parboxrestore} für \KOMAScript-Klassen
% wiederhergestellt.
%    \begin{macrocode}
      \@parboxrestore%
      \ifcsname KOMAClassName\endcsname%
        \KOMAoptionOf[\KOMAoption{parskip}]{\KOMAClassFileName}{parskip}%
      \fi%
      \col@number \@ne%
      \ignorespaces #1\par%
      \ifdim\parskip>\z@\null\fi%
      \vskip -\dbltextfloatsep%
      \endgroup%
      \ifdim\parskip>\z@\vskip\parskip\else\null\fi%
      \vskip -\topskip%
  }%
  \begingroup%
    \splitmaxdepth\maxdepth \splittopskip\topskip%
    \setbox\@tempboxa \vsplit\@currbox to\z@%
  \endgroup%
  \ifdim \ht\@currbox>\textheight%
    \ht\@currbox \textheight%
  \fi%
  \global \count\@currbox \tw@%
  \@tempdima -\ht\@currbox%
  \advance \@tempdima -\dbltextfloatsep%
  \global \advance \@colht \@tempdima%
  \ifx \@dbltoplist \@empty%
  \else%
    \@latexerr{Float(s) lost}\@ehb%
    \let \@dbltoplist \@empty%
  \fi%
  \@cons \@dbltoplist \@currbox%
  \global \@dbltopnum \m@ne%
  \ifdim \@colht<2.5\baselineskip%
    \@latex@warning@no@line {Optional argument of \noexpand\twocolumn
                too tall on page \thepage}%
    \@emptycol%
    \if@firstcolumn%
    \else%
      \@emptycol%
    \fi%
  \else%
    \global \vsize \@colht%
    \global \@colroom \@colht%
    \@floatplacement%
  \fi%
}
%    \end{macrocode}
% Um eine Änderung am \LaTeXe-Kernel feststellen zu können, wird auf die zum
% Zeitpunkt des Paketes aktuelle Definition von \cs{@topnewpage} geprüft.
%    \begin{macrocode}
\long\def\@tempb[#1]{%
  \@nodocument
  \@next\@currbox\@freelist{}{}%
  \global \setbox\@currbox
    \color@vbox
      \normalcolor
      \vbox {%
        \hsize\textwidth
        \@parboxrestore
        \col@number \@ne
        #1%
        \vskip -\dbltextfloatsep
      }%
    \color@endbox
  \ifdim \ht\@currbox>\textheight
    \ht\@currbox \textheight
  \fi
  \global \count\@currbox \tw@
  \@tempdima -\ht\@currbox
  \advance \@tempdima -\dbltextfloatsep
  \global \advance \@colht \@tempdima
  \ifx \@dbltoplist \@empty
  \else
    \@latexerr{Float(s) lost}\@ehb
    \let \@dbltoplist \@empty
  \fi
  \@cons \@dbltoplist \@currbox
  \global \@dbltopnum \m@ne
  \ifdim \@colht<2.5\baselineskip
    \@latex@warning@no@line {Optional argument of \noexpand\twocolumn
                        too tall on page \thepage}%
    \@emptycol
    \if@firstcolumn
    \else
      \@emptycol
    \fi
  \else
    \global \vsize \@colht
    \global \@colroom \@colht
    \@floatplacement
  \fi
}
%    \end{macrocode}
% \begin{macro}{\@topnewpage}
% \begin{macro}{\scr@topnewpage}
% Nachdem der neue Befehl sowie die Definition aus dem \LaTeXe-Kernel zuerst 
% temporär definiert wurden, wird nun abhängig von der aktiven Klasse der
% notwendige Befehl mit der neuen Definition überschrieben.
%    \begin{macrocode}
\ifx\scr@topnewpage\@undefined
  \@check@eq\@topnewpage\@tempb%
  \let\@topnewpage\@tempa%
\else
  \@check@eq\scr@topnewpage\@tempb%
  \let\scr@topnewpage\@tempa%
\fi
%    \end{macrocode}
% \end{macro}^^A \scr@topnewpage
% \end{macro}^^A \@topnewpage
%
% \iffalse
%</package>
% \fi
%
% \PrintBackMatter
%
\endinput
