Sie sind hier

Seitenstile mit unterschiedlichen Satzspiegeln in einem Dokument

Hallo Markus,
ich melde mich mal wieder mit einem neuen Problem. Ich möchte einen Seitenstil kreieren, der aufgrund der Verwendung eines Logos eine wesentlich höhere Kopfzeile benötigt, als die normalen Seitenstile. Dieser soll allerdings nicht für das komplette Dokument genutzt werden, sondern lediglich für Titel, Teile- und Kapitelseiten.

Außerdem soll auch der Anwender diesen im Dokument nutzen können. Das Problem dabei ist, dass bei einer Vergrößerung des Kopfes die Höhe für den Textbereich entsprechend verkleinert werden muss, damit die Fußzeilen alle auf der selben Höhe sind. Prinzipiell habe ich eine funktionierende Lösung gefunden, allerdings hat sich mittlerweile herausgestellt, dass diese alles andere als einfach und praktikabel nutzbar ist. Daher meine Frage, ob du mir zumindest einen Tipp geben könntest, wie sich mein Problem (besser) lösen lassen würde. Im Idealfall wäre es wünschenswert, wenn man mit \pagestyle bzw. \thispagestyle einfach zwischen den Seitenstile wechseln könnte und die Änderungen am Satzspiegel automatisch vollzogen würden. Als Minimalbeispiel eine (vereinfachte) Version meiner Lösung.

Grüße
Falk

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={}}
\usepackage{blindtext}
\usepackage{showframe}
 
\makeatletter
\newlength{\headdiff}
\setlength{\headdiff}{-1in}%
\addtolength{\headdiff}{40mm}%
\addtolength{\headdiff}{12mm}%
\addtolength{\headdiff}{-\topmargin}%
\addtolength{\headdiff}{-\headheight}%
\addtolength{\headdiff}{-\headsep}%
\newcommand*\ps@tudpage{%
  \setlength{\topmargin}{-1in}%
  \setlength{\headheight}{40mm}%
  \setlength{\headsep}{12mm}%
  \ifdim\headdiff<0pt\relax%
    \addtolength{\headsep}{-\headdiff}%
  \fi%
  \addtolength{\textheight}{-\headdiff}
  \renewcommand*\@oddhead{%
    \def\tud@head@hl{%
      \rule{\textwidth}{0.5pt}\newline%
    }%
    \vbox{%
      \hspace*{-18mm}
      \rule{50mm}{20mm}%
      \vspace*{5mm}\newline%
      \tud@head@hl%
      Fakultät, Institut, Professur\newline%
      \tud@head@hl%
    }%
  }%
  \let\@evenhead\@oddhead%
}
\makeatother
 
\begin{document}
 
\blindtext[4] % normaler Seitenstil
 
\clearpage % Umschalten auf neuen Seitenstil
\begingroup
\pagestyle{tudpage}
\activateareas
 
\blindtext[8]
 
\clearpage % und zurück auf den normalen Seitenstil
\endgroup
\pagestyle{plain}
\activateareas
 
\blindtext[4]
 
\end{document}
Bild von Markus Kohm

Ich würde das nicht am Seitenstil festmachen. Das ist mir persönlich eine zu unsaubere Lösung. Stattdessen würde ich eine Umgebung dafür definieren:

\documentclass[headinclude]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={}}
\usepackage[demo]{graphicx}
\usepackage{blindtext}
\usepackage{showframe}
 
\usepackage{scrpage2}
\pagestyle{scrheadings}
\newenvironment{tudpages}{%
  \newpage
  \csname tudpages*\endcsname
}{%
  \newpage
  \csname endtudpages*\endcsname
}
\newenvironment{tudpages*}{%
  \tudpagetypearea
  \ohead{}%
  \chead{}%
  \ihead{%
    \raggedright
    \hspace*{\tudlogoindent}%
    \usebox\tudlogo\\[\dimexpr\tudlogoskip-\baselineskip\relax]
    \rule{\textwidth}{.4pt}\\[-\dp\strutbox]
    \strut\ignorespaces\headmark\unskip\strut\\[-\ht\strutbox]
    \rule{\textwidth}{.4pt}
  }%
  \markboth{\faculty, \institute, \professor}{\faculty, \institute, \professor}%
}{%
  \markboth{}{}%
}
\newsavebox\tudlogo
\AtBeginDocument{%
  \sbox\tudlogo{\includegraphics[width=50mm,height=20mm]{tudlogo}}%
}
\newlength\tudlogoskip
\setlength\tudlogoskip{5mm}
\newlength\tudlogoindent
\setlength\tudlogoindent{-18mm}
\AtBeginDocument{%
  \storeareas\normaltypearea
  \KOMAoptions{%
    headheight=\dimexpr \ht\tudlogo+\tudlogoskip+\baselineskip\relax,%
    DIV=last}%
  \storeareas\tudpagetypearea
  \normaltypearea
}
\newcommand*{\faculty}{Fakultät}
\newcommand*{\institute}{Institut}
\newcommand*{\professor}{Professur}
 
\begin{document}
 
\blindtext[4] % normaler Seitenstil
 
\begin{tudpages} 
\blindtext[8]
\end{tudpages} 
 
\blindtext[4]
 
\end{document}

Problematisch könne dabei allenfalls sein, wenn man Teile-Überschriften in diese Umgebung packen will. Dann sollte es eventuell eine Umgebung ohne Gruppe sein:

\documentclass[headinclude]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={}}
\usepackage[demo]{graphicx}
\usepackage{blindtext}
\usepackage{showframe}
 
\usepackage{scrpage2}
\pagestyle{scrheadings}
\makeatletter
% Ganz übler Trick, damit tudpages zwar eine Umgebung aber keine Gruppe ist:
\newcommand*{\restoretudpageenvir}{}%
\newcommand*{\storetudpageenvir}[2]{%
  \endgroup
  \edef\restoretudpageenvir{%
    \def\noexpand\@currenvir{\@currenvir}%
    \def\noexpand\@currenvline{\@currenvline}%
    \noexpand\begingroup
      \def\noexpand\@currenvir{#1}%
      \def\noexpand\@currenvline{#2}%
  }%
}
\newenvironment{tudpages}{%
  \@expandtwoargs\storetudpageenvir{\@currenvir}{\@currenvline}%
  \newpage
  \csname tudpages*\endcsname
}{%
  \newpage
  \csname endtudpages*\endcsname
  \restoretudpageenvir
}
\makeatother
% tudpages* ist hingegen eine echte Umgebung mit Gruppe, außer man ruft es wie
% in tudpages gar nicht als Umgebung auf, dann hat es auch keine Gruppe und
% deshalb erweitern wir den \end-Teil um ein paar Aufräumarbeiten.
\newenvironment{tudpages*}{%
  \tudpagetypearea
  \ohead{}%
  \chead{}%
  \ihead{%
    \raggedright
    \hspace*{\tudlogoindent}%
    \usebox\tudlogo\\[\dimexpr\tudlogoskip-\baselineskip\relax]
    \rule{\textwidth}{.4pt}\\[-\dp\strutbox]
    \strut\ignorespaces\headmark\unskip\strut\\[-\ht\strutbox]
    \rule{\textwidth}{.4pt}
  }%
  \markboth{\faculty, \institute, \professor}{\faculty, \institute, \professor}%
}{%
  \ihead{}%
  \chead{\headmark}%
  \markboth{}{}%
  \normaltypearea
}
\newsavebox\tudlogo
\AtBeginDocument{%
  \sbox\tudlogo{\includegraphics[width=50mm,height=20mm]{tudlogo}}%
}
\newlength\tudlogoskip
\setlength\tudlogoskip{5mm}
\newlength\tudlogoindent
\setlength\tudlogoindent{-18mm}
\AtBeginDocument{%
  \storeareas\normaltypearea
  \KOMAoptions{%
    headheight=\dimexpr \ht\tudlogo+\tudlogoskip+\baselineskip\relax,%
    DIV=last}%
  \storeareas\tudpagetypearea
  \normaltypearea
}
\newcommand*{\faculty}{Fakultät}
\newcommand*{\institute}{Institut}
\newcommand*{\professor}{Professur}
 
\begin{document}
 
\blindtext[4] % normaler Seitenstil
 
\begin{tudpages} 
\blindtext[8]
\end{tudpages} 
 
\blindtext[4]
 
\end{document}

Dafür wäre es allerdings besser, wenn man tatsächlich einen echten zweiten Seitenstil hätte, was wiederum mit scrlayer-scrpage deutlich einfacher wird als derzeit mit scrpage2 und \defpagestyle.

Wobei das bei \part tatsächlich weniger wichtig sein dürfte als beispielsweise bei \chapter (da wird es aber normalerweise auch nur kritisch, wenn nicht das gesamte Kapitel, sondern nur die Überschrift alleine in einer Gruppe steht).

...habe es in meiner Klasse allerdings bei weitem nicht so elegant umgesetzt wie du. Ich werde mir das in einer ruhigen Minute mal genauer anschauen und meine Klasse entsprechend anpassen. Etwas problematisch dabei könnte noch die Kopfzeile werden, da diese ggf. um eine zweite Zeile erweitert wird, welche unterhalb der zweiten Linie liegen muss.

Der eigentliche Grund, warum ich nachgefragt habe war, dass ich gestern auch Titelköpfe in meiner Klasse mit dem entsprechenden Layout implementieren wollte. Also habe ich für diesen Fall nach dem \maketitle Befehl einfach noch mit \thispagestyle meinen eigenen Seitenstil eingefügt und wollte mit \enlargethispage den entsprechenden Versatz ausgleichen. Das ging natürlich nicht so einfach wie erhofft. Mit ein bisschen trial and error habe ich es dann doch irgendwie mit \activateareas hinbekommen, allerdings nur für den einspaltigen Satz. Bei zweispaltigem bin ich dann ausgestiegen. Wenn du weiterhin Muße hast mir bei meinem Problem zu helfen, würde ich mal aus meinen Klassen den Seitenstil und die Umgebung vollständig extrahieren und ein etwas umfangreicheres Beispiel bereitstellen. Ich möchte dir aber bestimmt keine Umstände bereiten. Falls du dir mal ein Bild vom umzusetzenden Layout machen möchtest, das findest du hier.

Ich werde mich demnächst deswegen auch einmal in scrlayer einarbeiten, allerdings kann ich aufgrund des Beta-Status nicht schon jetzt eine damit arbeitende Lösung für den Endanwender anbieten. Mir stellt sich halt die Frage, ob es sinnvoll ist, die Klassen jetzt noch umzustricken oder ich doch besser noch auf scrlayer zu warten, um dann eine saubere Lösung final anzubieten.

Grüße
Falk

Bild von Markus Kohm

Ich bin eigentlich im Augenblick mit scrlayer komplett ausgelastet. Vor allem die Anleitung lässt mir kaum Zeit für die Dinge, die ich eigentlich machen will. Ich bin also nicht böse, wenn Du ohne meine Hilfe auskommst …

Auf den zweiten Blick stellt sich die Lösung dann doch nicht als das raus, wie ich es brauche. Die Anforderungen an das Layout sind vom CD der Uni -- wieder typisch -- ohne jeglichen typographischen Anspruch, dafür aber durchaus rigide. Unter anderem sind sowohl Seitenränder als auch die Position des Logos exakt festgelegt. Dafür nutze ich das Paket geometry. Allerdings lasse ich dem Anwender noch ein Hintertürchen offen. Per Option kann explizit geometry deaktiviert werden und typearea übernimmt die Gestaltung des Satzspiegels. Allerdings muss ich bezüglich des Logos einen Kompromiss machen. Dieses muss zumindest in der Höhe auf der exakt gleichen Position bleiben und auch die horizontale Position ist abhängig vom linken Rand des Satzspiegels. Alle Interessenten können sich gerne die Vorgaben sowie die daraus resultierende Umsetzung in LaTeX ansehen.

Falls dich die Muße irgendwann doch noch einmal packen sollte würde ich mich über Anregungen freuen. Sobald scrlayer fertig sein sollte und veröffentlicht ist, werde ich auf alle Fälle eine neue und hoffentlich auch elegantere Lösung in Angriff nehmen. Leider kann ich -- wie üblich -- jedoch nicht davon ausgehen, dass jeder Anwender mit der dann aktuellen KOMA-Script-Version arbeitet, was mich dazu zwingen wird, aus Kompatibilitätsgründen auch die alte Version durch meine Klassen zu unterstützen.

Bild von Markus Kohm

Zum einen kann man auch mit geometry innerhalb des Dokuments das Layout ändern. Nur das Seitenformat ist davon ausgenommen. AFAIR kennt geomtry sogar ebenfalls eine Anweisung, um ein Layout zu speichern und wieder zu reaktivieren. Das musst Du dann eben entsprechend im meinem Beispiel anpassen.

Für die absolute Platzierung des Logos würde ich derzeit eso-pic oder textpos empfehlen. Zukünftig sollte das mit scrlayer ebenfalls einfach zu bewerkstelligen sein. Derzeit fehlt aber noch eine Endanwenderschnittstelle dafür, so dass man die Low-Level-Befehle von scrlayer selbst verwenden müsste.

Da es inzwischen bei allen gängigen TeX-Distributionen ein Kinderspiel ist, Updates einzuspielen, würde ich übrigens auf veraltete Pakete wenig Rücksicht nehmen. Sonst musst Du am Ende noch auf den uralten Standardklassen aufbauend alles selbst machen. Wozu machen sich Leute (wie ich) die Mühe, die Entwicklung weiter zu treiben, wenn andere nicht darauf zurückgreifen dürfen. Der Zwang zum Update kann manchmal auch ein Segen sein! So muss ich mich beispielsweise bei den Leuten dann schon nicht mehr mit Fragen zu KOMA-Script 2.9t herumschlagen (ja, kam erst kürzlich wieder ein ­– bei mir allerdings an die ganz falsche Adresse …).

Mit geometry ist das tatsächlich kein großes Problem. Allerdings sträube ich mich davor, das Paket tatsächlich zu nutzen. Ich habe von Typographie keine große Ahnung. Allerdings würde ich mir genau deswegen nicht anmaßen, irgendwelche beliebig gewählten Satzspiegel vorzugeben -- oder zwangsweise umzusetzen -- sondern auf die Erfahrungen guter Typographen zurückgreifen. Deswegen auch der Wunsch, typearea auf alle Fälle nutzen zu können.

Da kommt mir gerade in den Sinn: Wäre es theoretisch möglich, den Satzspiegel durch typearea berechnen zu lassen und anschließend an geometry weiterzureichen, also typearea indirekt zu nutzen? Das müsste doch gehen, oder? Könnte man dafür eventuell \AfterCalculatingTypearea bzw. \AfterSettingArea verwenden?

Was die Updates anbelangt ist es so, dass einige der Anwender PCs an verschiedenen Lehrstühlen der Universität nutzen, welche mit Ubuntu 12.04 laufen. Für dieses OS ist lediglich die TeX Live 2009 Distribution erhältlich, was schon zu einigen Problemen geführt hat. Ich habe mich jetzt dazu entschieden, die neue Version meiner aktuellen Klassen fertigzustellen und dahin die Kompatibilität bis KOMA-Script 3.11 zu gewährleisten. Mit KOMA-Script 3.12 werde ich zeitnah auf scrlayer umsteigen und die momentan aktuelle Version zwar weiterhin bereitstellen, jedoch als deprecated deklarieren und auch nur noch beschränkt Support liefern.

Comments for "Seitenstile mit unterschiedlichen Satzspiegeln in einem Dokument" abonnieren