lockstep
11-12-2009, 18:53
In der Standardklasse article.cls ist die Umgebung theindex folgendermaßen definiert:
\newenvironment{theindex}
{\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\twocolumn[\section*{\indexname}]%
\@mkboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\thispagestyle{plain}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\columnseprule \z@
\columnsep 35\p@
\let\item\@idxitem}
{\if@restonecol\onecolumn\else\clearpage\fi}
Die Definition in den Klassen book und report unterscheidet sich hiervon nur durch eine einzige Codezeile (statt \section* wird \@makeschapterhead verwendet).
Die Dokumentation zu den Standardklassen (Version 1.4h, 2007/10/19) hält auf S. 44 zur Umgebung theindex folgendes fest: "Parameter changes to \columnseprule and \columnsep have to be done after \twocolumn has acted. Otherwise they can affect the last page before the index." Diese Aussage wirft für mich folgende Fragen auf:
1. Wodurch genau droht eine Beeinflussung früherer Seiten? Die Änderungen der beiden Parameter sollten doch nur lokal (innerhalb der Umgebung theindex) wirksam werden.
2. Die Definition von theindex in den KOMA-Script-Klassen ähnelt grundsätzlich der der Standardklassen; die Parameter von \columnsep und \columnseprule werden jedoch gesetzt, bevor \twocolumn aufgerufen wird. Die theindex-Definition der Klasse memoir ändert die beiden Parameter ebenfalls vor dem (in dieser Klasse optionalen) Aufruf von \twocolumn. Ein Irrtum des KOMA-Script-Autors und des Autors von memoir?
3. Definiert man testhalber eine Umgebung, in der (ähnlich wie in theindex) auf \twocolumn geschaltet wird, so wird eine Änderung von \columnsep nur berücksichtigt, wenn sie vor \twocolumn erfolgt. Änderungen des Spaltenabstands nach dem Befehl \twocolumn werden dagegen ignoriert. Deutet dies auf einen Bug in der theindex-Definition der Standardklassen hin? Minimalbeispiel:
\documentclass{article}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{blindtext,microtype}
\makeatletter
\newenvironment{colseptest}{%
\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
% \columnsep 35pt% Diese Änderung des Spaltenabstands wird erkannt
\twocolumn[\section*{Versuch über den Spaltenabstand}]
\columnsep 35pt% Diese Änderung des Spaltenabstands wird ignoriert
}{%
\if@restonecol\onecolumn\else\clearpage\fi
}
\makeatother
\begin{document}
\begin{colseptest}
\blindtext[3]
\end{colseptest}
\showthe\columnsep%Der Wert außerhalb der Umgebung colseptest
% bleibt jedenfalls unverändert
\end{document}
Über Hinweise von einem der LaTeX-Kundigen dieses Forums wäre ich sehr dankbar.
lockstep
\newenvironment{theindex}
{\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
\twocolumn[\section*{\indexname}]%
\@mkboth{\MakeUppercase\indexname}%
{\MakeUppercase\indexname}%
\thispagestyle{plain}\parindent\z@
\parskip\z@ \@plus .3\p@\relax
\columnseprule \z@
\columnsep 35\p@
\let\item\@idxitem}
{\if@restonecol\onecolumn\else\clearpage\fi}
Die Definition in den Klassen book und report unterscheidet sich hiervon nur durch eine einzige Codezeile (statt \section* wird \@makeschapterhead verwendet).
Die Dokumentation zu den Standardklassen (Version 1.4h, 2007/10/19) hält auf S. 44 zur Umgebung theindex folgendes fest: "Parameter changes to \columnseprule and \columnsep have to be done after \twocolumn has acted. Otherwise they can affect the last page before the index." Diese Aussage wirft für mich folgende Fragen auf:
1. Wodurch genau droht eine Beeinflussung früherer Seiten? Die Änderungen der beiden Parameter sollten doch nur lokal (innerhalb der Umgebung theindex) wirksam werden.
2. Die Definition von theindex in den KOMA-Script-Klassen ähnelt grundsätzlich der der Standardklassen; die Parameter von \columnsep und \columnseprule werden jedoch gesetzt, bevor \twocolumn aufgerufen wird. Die theindex-Definition der Klasse memoir ändert die beiden Parameter ebenfalls vor dem (in dieser Klasse optionalen) Aufruf von \twocolumn. Ein Irrtum des KOMA-Script-Autors und des Autors von memoir?
3. Definiert man testhalber eine Umgebung, in der (ähnlich wie in theindex) auf \twocolumn geschaltet wird, so wird eine Änderung von \columnsep nur berücksichtigt, wenn sie vor \twocolumn erfolgt. Änderungen des Spaltenabstands nach dem Befehl \twocolumn werden dagegen ignoriert. Deutet dies auf einen Bug in der theindex-Definition der Standardklassen hin? Minimalbeispiel:
\documentclass{article}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{blindtext,microtype}
\makeatletter
\newenvironment{colseptest}{%
\if@twocolumn
\@restonecolfalse
\else
\@restonecoltrue
\fi
% \columnsep 35pt% Diese Änderung des Spaltenabstands wird erkannt
\twocolumn[\section*{Versuch über den Spaltenabstand}]
\columnsep 35pt% Diese Änderung des Spaltenabstands wird ignoriert
}{%
\if@restonecol\onecolumn\else\clearpage\fi
}
\makeatother
\begin{document}
\begin{colseptest}
\blindtext[3]
\end{colseptest}
\showthe\columnsep%Der Wert außerhalb der Umgebung colseptest
% bleibt jedenfalls unverändert
\end{document}
Über Hinweise von einem der LaTeX-Kundigen dieses Forums wäre ich sehr dankbar.
lockstep