Seite 1 von 2

Titelkopf mit anderem Layout als restlicher Satzspiegel

Verfasst: Di 25. Jun 2013, 21:02
von mrpiggi
Hallo zusammen,
ich würde gerne einen Titelkopf (keine Titelseite) mit einem anderen Layout als den restlichen Text setzen. Dabei soll das Paket geometry zum Einsatz kommen. Der Hintergrund ist, dass ich in einer eigenen Klasse für den Titelkopf gerne ein Logo in der Kopfzeile setzen möchte, welches relativ hoch ist und im weiteren Dokument nicht mehr in der Kopfzeile auftauchen soll. Eine Verwendung von \titlehead möchte ich ausschließen, damit dieser Befehl dem Anwender weiterhin zur freien Gestaltung zur Verfügung steht.

So ähnlich war das bereits hier schon mal Thema, blieb allerdings ungelöst.

Grüße
Falk
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={€}}
\usepackage[automark]{scrpage2}
\usepackage{blindtext}
\usepackage{showframe}
\usepackage{geometry}
\newgeometry{left=3cm,right=3cm,top=5cm,head=4cm,bottom=3cm}
\savegeometry{title}
\newgeometry{left=3cm,right=3cm,top=2cm,head=1cm,bottom=3cm}
\savegeometry{text}
\usepackage{afterpage}
\begin{document}
\title{Title}
\renewcommand{\titlepagestyle}{scrheadings}
\lohead{\rule{5cm}{3cm}}
\loadgeometry{title}
\maketitle
\afterpage{\clearpage\restoregeometry}
\Blindtext[4][2]
\end{document}

Verfasst: Mi 26. Jun 2013, 10:12
von Noch so einer
\afterpage-Code wird in min. einer Gruppe ausgeführt. Globale Änderungen sind damit also nicht sauber möglich.

Die einfachste Lösung wäre, das Logo mit textpos oder eso-pic an die gewünschte zu klatschen. Ggf. musst Du dann aber auch noch \maketitle manipulieren, um am Anfang genügend Abstand einzufügen. Beispielsweise:
\renewcommand{\titlehead}[1]{%
  \gdef\@titlehead{\vskip 2cm #1}}
\titlehead{}
Natürlich könntest Du bei der Umdefinierung von \titlehead auch direkt das Logo mit einbauen. Um es hoch genug zu setzen:
\renewcommand*{\titlehead}[1]{%
  \gdef\@titlehead{\vspace*{-3cm}\includegraphics{Logo}\par\vspace{1cm}#1}%
}
\titlehead{}
Der Code sei hier nur als Beispiel betrachtet.

Am Saubersten wäre natürlich, wenn Du tatsächlich \maketitle umdefinieren würdest.

Wenn Du hingegen einen ganz üblen Hack verwenden willst, der sich auf diverse LaTeX-Interna verlässt und außerdem Sicherheitsmechanismen von geometry umgeht, dann ginge:
% Bastle das in die Präambel
\newcommand*{\localrestoregeometry}{%
  \expandafter\let\expandafter\clearpage\expandafter\relax
  \expandafter\restoregeometry\expandafter\def\expandafter\clearpage\expandafter{\clearpage}
}
% Und verwende das besser niemals im Dokument
\afterpage{\aftergroup\aftergroup\aftergroup\localrestoregeometry}

Verfasst: Mi 26. Jun 2013, 10:15
von mrpiggi
Alles klar, dann doch über die \titlehead-Variante. Dankeschön.

Verfasst: Mi 26. Jun 2013, 10:30
von Epllus
Noch ein kleiner Zusatz zu Noch so einer:

Soweit ich es verstanden habe, ist die Änderung des Satzspiegels zwischen zwei Seiten mit automatischen Seitenumbruch nicht möglich.

Das liegt daran, dass TeX immer komplette Absätze umbricht, und beim Zerlegen über eine/mehrere Seiten den Absatzumbruch beibehält. Um den Absatz während eines Seitenumbruches umstrukturieren zu können, würden Informationen wie Trennung, Strafpunkte etc. benötigt. Das Problem ist nun, dass TeX diese Informationen scheinbar nicht benötigt und wegwirft.

Um es kurz zu machen: Automatischer Seitenumbruch und Layoutänderung nicht möglich (jedenfalls so lange nicht, bis jemand TeX entsprechend modifiziert).

Hier meine (auch nicht ganz koschere) Lösung:
\documentclass{scrartcl} 
\usepackage[T1]{fontenc} 
\usepackage{selinput} 
\SelectInputMappings{adieresis={ä},germandbls={ß},Euro={€}} 
\usepackage[automark]{scrpage2} 
\usepackage{blindtext} 
\usepackage{showframe} 
\usepackage{geometry} 
\newgeometry{left=3cm,right=3cm,top=2cm,head=1cm,bottom=3cm} 

\begin{document} 
\title{\vspace{2cm}Title} 
\renewcommand{\titlepagestyle}{scrheadings} 
\lohead{\parbox[b][4cm]{5cm}{\rule{5cm}{3cm}}} 
\maketitle 

\Blindtext[4][2] 

\end{document} 
Hoffe meine Erklärung ist richtig
Epllus

Edit: Da ich nicht genau weiß, wie der Status ist, werde ich ihn mal auf „offen“ lassen.

Dann doch noch mal...

Verfasst: Mi 26. Jun 2013, 10:39
von mrpiggi
...zum Verständnis. Was ist an diesem Hack denn so übel, dass ich den nicht nutzen sollte? Der macht schließlich genau das, was ich will.

Verfasst: Mi 26. Jun 2013, 10:50
von Besserwisser
\vspace gehört eigentlich nicht in das Argument von \title. Außerdem ist das nicht idiotensicher. Wenn der Anwender das \vspace weglässt, dann fehlt der Abstand. Es hängt also letztlich wieder am Anwender, also könntest Du auch gleich \titlehead dafür verwenden …

Verfasst: Mi 26. Jun 2013, 14:38
von Epllus
Besserwisser hat geschrieben:\vspace gehört eigentlich nicht in das Argument von \title. Außerdem ist das nicht idiotensicher. Wenn der Anwender das \vspace weglässt, dann fehlt der Abstand. Es hängt also letztlich wieder am Anwender, also könntest Du auch gleich \titlehead dafür verwenden …
Stimmt, das habe ich noch gar nicht bedacht. Ich werde es mir merken; und im Endeffekt ist die Umdefinition von \titlehead sauberer.

Verfasst: Mi 26. Jun 2013, 14:41
von Besserwisser
:lol:

Mein Hinweis war eigentlich gar nicht als Kritik an Deiner Lösung, sondern als Antwort auf mrpiggis Frage gedacht.

Verfasst: Mi 26. Jun 2013, 14:58
von mrpiggi
Besserwisser hat geschrieben::lol:

Mein Hinweis war eigentlich gar nicht als Kritik an Deiner Lösung, sondern als Antwort auf mrpiggis Frage gedacht.
Gut zu wissen, denn eigentlich bezog sich meine Frage eher auf diesen Hack:
Noch so einer hat geschrieben: Wenn Du hingegen einen ganz üblen Hack verwenden willst, der sich auf diverse LaTeX-Interna verlässt und außerdem Sicherheitsmechanismen von geometry umgeht, dann ginge:
% Bastle das in die Präambel
\newcommand*{\localrestoregeometry}{%
  \expandafter\let\expandafter\clearpage\expandafter\relax
  \expandafter\restoregeometry\expandafter\def\expandafter\clearpage\expandafter{\clearpage}
}
% Und verwende das besser niemals im Dokument
\afterpage{\aftergroup\aftergroup\aftergroup\localrestoregeometry}
Ich würde dieses Konstrukt ja auch nicht im Dokument sondern vielmehr in der Klasse verwenden. Warum genau sollte ich dies also nicht tun?

Verfasst: Mi 26. Jun 2013, 18:23
von Noch so einer
Das habe ich eigentlich bereits angegeben. Nochmal ausführlich:
  1. Er verlässt sich absolut auf Interna von LaTeX und von afterpage, nämlich auf den Gruppenlevel, um die Anweisung \localrestoregeometry aus den Gruppen ausbrechen zu lassen. Wenn sich diesbezüglich irgend etwas ändert (einen Gruppenlevel mehr oder weniger), funktioniert das nicht nur nicht mehr, es kann auch zu unerwünschten Effekten führen.
  2. Normalerweise sorgt geometry selbst dafür, dass \restoregeometry nicht innerhalb einer Seite ausgeführt werden kann, indem es ein \clearpage ausführt. \localrestoregeometry deaktivert nun genau dieses \clearpage. Die Randeinstellungen einfach mal eben innerhalb einer Seite zu ändern, ist aber eigentlich ein absolutes "Denke nicht einmal daran!", weil das allgemein eben nicht funktioniert. Dazu müssten bereits umbrochene Absätze nämlich ggf. erneut umbrochen werden. Sogar die bereits getroffene Entscheidung für den Seitenumbruch müsste ggf. revidiert werden. Ich garantiere beispielsweise für gar nichts, falls ein Absatz auf Seite 1 beginnt, auf Seite 2 fortgesetzt wird und frühestens auf Seite 3 endet und dabei auch noch \footnote oder Gleitumgebungen innerhalb dieses Absatzes vorkommen.
Daher sollte man das so nicht machen!

BTW: Ich habe einmal eine ähnliche Lösung für eine sehr spezielle Verlagsvorlage mit doppelspaltigem Satz gebaut, bei der nur die erste Seite um zwei Zeilen kürzer und deren Fuß um zwei Zeilen höher sein musste. Das knallte alle Nase lang (dabei wurde teilweise sogar Text verschluckt) und konnte nur deshalb verwendet werden, weil der Setzer genau wusste, was ggf. zu tun ist, um die Probleme zu lösen. Auf die Autoren wurde dieses Spezialmakro nie losgelassen.