PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seitenumbruch erkennen und darauf reagieren



Meta
18-08-2010, 04:32
Hallo,

ich schreibe an einer Klasse zum Erstellen von Hörspielskripten.
Darin möchte ich in Kopf- und Fußzeile kenntlich machen, wenn es innerhalb eines Takes (also eines Redeabschnitts) einer Person zu einem Seitenumbruch kommt.

Ich repräsentiere einen Take durch eine eigene Umgebung, daher war meine Idee, eine Bool'sche Variable zu setzen und in Kopf- und Fußzeile zu überprüfen.

Hier der Code dazu:


\newboolean{insidetake}
\setboolean{insidetake}{false}

\newenvironment{take}[1]{%
\setboolean{insidetake}{true}%
\textbf{\uppercase{#1}}\\[-2em]%
\begin{addmargin}[10mm]{0pt}%
}{%
\setboolean{insidetake}{false}%
\end{addmargin}%
}

\fancyfoot[R]{\ifthenelse{\boolean{insidetake}}{(FORTSETZUNG)}{ }}
\fancyhead[L]{\ifthenelse{\boolean{insidetake}}{FORTSETZUNG:}{} }


Leider funktioniert das nicht.

Ein Minimalbeispiel:


\documentclass{scrbook}

\usepackage{lipsum}
\usepackage{ifthen}

\newboolean{insidetake}
\setboolean{insidetake}{false}

\newenvironment{take}[1]{%
\setboolean{insidetake}{true}%
\textbf{\uppercase{#1}}%
\begin{addmargin}[10mm]{0pt}%
}{%
\setboolean{insidetake}{false}%
\end{addmargin}%
}

\usepackage{fancyhdr}
\fancyhead[L]{\ifthenelse{\boolean{insidetake}}{FORTSETZUNG:}{} }
\fancyfoot[R]{\ifthenelse{\boolean{insidetake}}{(FORTSETZUNG)}{ }}

\pagestyle{fancy}

\begin{document}

\begin{take}{Tom}
\lipsum
\end{take}

\begin{take}{Erzähler}
\lipsum[1-2]
\end{take}

\begin{take}{Sam}
\lipsum[3]
\end{take}

\begin{take}{Erzähler}
\lipsum[1]
\end{take}

\end{document}


Auf der ersten Seite sollte KEIN Vermerk im Kopf sein!
Der Fußvermerk stimmt, aber der zugehörige Kopf auf der nächsten Seite fehlt.
Auf Seite 2 fehlt dann auch der Fuß und Seite 3 hat auch keinen Kopf.

Mache ich einen Denkfehler - und die Variable wird zur falschen Zeit ausgewertet?

Kennt jemand eine ander Möglichkeit, wie ich einen Block/Absatz auf einen Seitenumbruch überprüfen kann?

Vielen Dank schon mal!

rais
18-08-2010, 08:34
Moin moin,


Auf der ersten Seite sollte KEIN Vermerk im Kopf sein!
Der Fußvermerk stimmt, aber der zugehörige Kopf auf der nächsten Seite fehlt.
Auf Seite 2 fehlt dann auch der Fuß und Seite 3 hat auch keinen Kopf.

dazu müsstest Du Dir eine zweite Variable einfallen lassen, die Du im Kopf auswertest und im Fuß global (damit die Wirkung außerhalb des Fußbereichs nicht wieder erlischt) setzt.
Versuch mal


\documentclass{scrbook}

\usepackage{lipsum}

\newif\ifinsidetake\insidetakefalse
\newif\ifstillinsidetake\stillinsidetakefalse
\newenvironment{take}[1]{%
\insidetaketrue
\textbf{\MakeUppercase{#1}}%
\begin{addmargin}[10mm]{0pt}%
}{%
\end{addmargin}%
\insidetakefalse
}

\usepackage{fancyhdr}
\fancyhead[L]{%
\ifstillinsidetake
Fortsetzung:%
\fi
}
\fancyfoot[R]{%
\ifinsidetake
(wird fortgesetzt)%
\global\stillinsidetaketrue
\else
\global\stillinsidetakefalse
\fi
}

\pagestyle{fancy}

\begin{document}

\begin{take}{Tom}
\lipsum
\end{take}

\begin{take}{Erzähler}
\lipsum[1-2]
\end{take}

\begin{take}{Sam}
\lipsum[3]
\end{take}

\begin{take}{Erzähler}
\lipsum[1]
\end{take}

\end{document}

MfG

u_fischer
18-08-2010, 10:14
Nein, das scheitert. Wenn du mal bei Sam das hier benützt:


\enlargethispage{-1\baselineskip}
\begin{take}{Sam}
\lipsum[2]
\end{take}


Dann ist direkt vor dem letzten Erzähler ein Seitenumbruch und die Fußzeile schreibt dennoch "wird fortgesetzt".

Ich würde Marken oder \label benutzen. Ich würde auch den Namen des Sprechers als Überschrift setzen, damit danach kein Seitenumbruch stattfindet. Ich habe jetzt gerade Zeit mir das zu überlegen, aber hier ein Beispiel, anhand dessen ihr mal schauen könnt, ob eine geeignete Kombination von \botmarks etc zu einen korrekten Ergebnis führt (ggfs. kann man die Marken auch vergleichen!).


\documentclass{scrbook}

\usepackage{lipsum}
\usepackage{etex}
\newmarks\takemark

\newif\ifinsidetake\insidetakefalse
\newif\ifstillinsidetake\stillinsidetakefalse
\newenvironment{take}[1]{%
\newcommand\takeauthor{#1}%
\minisec{\MakeUppercase{#1}%
\marks\takemark{Beginn: Take #1}}%
\marks\takemark{Fortsetzung: Take #1}
\begin{addmargin}[10mm]{0pt}%
}{%
\marks\takemark{Ende: Take \takeauthor}%
\end{addmargin}%

}

\usepackage{fancyhdr}

\fancyhead[L]{}
\fancyfoot[R]{%
Bot: \botmarks\takemark, first: \firstmarks\takemark , top: \topmarks\takemark
}

\pagestyle{fancy}

\begin{document}

\begin{take}{Tom}
\lipsum
\end{take}

\begin{take}{Erzähler}
\lipsum[1-2]
\end{take}

\enlargethispage{\baselineskip}
\begin{take}{Sam}
\lipsum[2]
\end{take}

\begin{take}{Erzähler}
\lipsum[1]
\end{take}

\end{document}

Meta
18-08-2010, 15:00
Vielen Dank für eure Antworten! :)

Ich mache es jetzt so:


\fancyfoot[R]{\ifthenelse{\equal{\botmarks\insidetake}{true}}{( \MakeUppercase{Fortsetzung})}{}}
\fancyhead[L]{\ifthenelse{\equal{\topmarks\insidetake}{true}}{\ MakeUppercase{Fortsetzung:}}{}}

\newmarks\insidetake
\newcounter{takecounter}
\setcounter{takecounter}{0}
\newenvironment{take}[1]{%
\addtocounter{takecounter}{1}%
\subsubsection*{\arabic{takecounter}.\quad\MakeUpp ercase{#1}\marks\insidetake{true}\\[-1ex]}%
\addmargin[10mm]{0pt}%
}{%
\marks\insidetake{false}%
\endaddmargin%
}

Sehr nette Sachen mit den Marken.

Grüße
Meta