PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Seitenumbruch verhindern



LuPi
11-07-2013, 11:27
Wie kann ich in dem Makro \test (siehe Beispiel) den Seitenumbruch
verhindern, der ohne Verwendung des Makros nicht auftritt?


\documentclass{scrartcl}
\usepackage{tikz}
\newcommand{\test}[1]{%
#1\nopagebreak\nopagebreak\par%
\nopagebreak\nopagebreak%
\vspace{-0.25\baselineskip}\nopagebreak\nopagebreak\hfill{%
\begin{tikzpicture}
\node[font=\scriptsize,outer sep=1pt,inner sep=0pt]
(a) {siehe Seite XY};
\draw (a.north east) -- (a.south east) -- (a.south west);
\end{tikzpicture}}}
\begin{document}
\vspace*{18cm}

\begin{itemize}
\item foo
\item bar
\item test\nopagebreak\nopagebreak\par%
\nopagebreak\nopagebreak%
\vspace{-0.25\baselineskip}\nopagebreak\nopagebreak\hfill{%
\begin{tikzpicture}
\node[font=\scriptsize,outer sep=1pt,inner sep=0pt]
(a) {siehe Seite XY};
\draw (a.north east) -- (a.south east) -- (a.south west);
\end{tikzpicture}}
\end{itemize}

\newpage

\vspace*{18cm}

\test{%
\begin{itemize}
\item foo
\item bar
\item test
\end{itemize}
}%

\end{document}

esdd
11-07-2013, 15:14
Hallo,
zwischen deinen beiden Varianten gibt es einen wesentlichen Unterschied. An \test{...} übergibst du die komplette itemize Umgebung während in der Variante ohne Makro der Code noch zum letzten item gehört. Um in beiden Fällen das gleiche Ergebnis zu erzielen, reicht es nur den Inhalt des letzten items an das Makro zu übergeben.

Soll wirklich die komplette Listenumgebung im Argument stehen, dann muss der Umbruch am Ende von Listenumgebungen verhindert werden. Eine Möglichkeit ist \@endparpenalty vorübergehend zu ändern. Das wirkt dann aber (mindestens) auf alle listenartigen Umgebungen im Argument.

Gruß
Elke

\documentclass{scrartcl}
\usepackage{tikz}

\newcommand{\test}[1]{%
#1\nopagebreak[4]\par%
\vspace{-0.25\baselineskip}\hfill{%
\begin{tikzpicture}
\node[font=\scriptsize,outer sep=1pt,inner sep=0pt](a) {siehe Seite XY};
\draw (a.north east) -- (a.south east) -- (a.south west);
\end{tikzpicture}}%
}

%% Alternative
\makeatletter
\newcounter{@orgendparpenalty}
\newcommand{\Test}[1]{%
\setcounter{@orgendparpenalty}{\@endparpenalty}%
\@endparpenalty=10000%
#1%
\@endparpenalty=\the@orgendparpenalty%
\nopagebreak[4]\par %
\vspace{-0.25\baselineskip}\hfill%
\begin{tikzpicture}
\node[font=\scriptsize,outer sep=1pt,inner sep=0pt](a) {siehe Seite XY};
\draw (a.north east) -- (a.south east) -- (a.south west);
\end{tikzpicture}%
}
\makeatother
\begin{document}


\vspace*{18cm}

\begin{itemize}
\item foo
\item bar
\item test\nopagebreak[4]\par%
\vspace{-0.25\baselineskip}\hfill%
\begin{tikzpicture}[remember picture,overlay]
\node[font=\scriptsize,outer sep=1pt,inner sep=0pt](a) {siehe Seite XY};
\draw (a.north east) -- (a.south east) -- (a.south west);
\end{tikzpicture}
\end{itemize}

\clearpage

\vspace*{18cm}

\begin{itemize}
\item foo
\item bar
\item \test{test}
\end{itemize}


\clearpage

\vspace*{18cm}

\Test{%
\begin{itemize}
\item foo
\item bar
\item test
\end{itemize}
}%

\end{document}

LuPi
11-07-2013, 15:24
Jau, den Unterschied hatte ich komplett übersehen, aber Deine Erklärung
leuchtet mir ein. Ich muss tatsächlich die komplette Listenumgebung (und
noch etwas mehr) übergeben. Die von Dir vorgeschlagene Modifikation
werde ich übernehmen und mit den Nebenwirkungen leben (es könnte
tatsächlich hin und wieder vorkommen, dass dann der Umbruch nicht nach
einer Liste erfolgt; das sollte aber selten sein und weniger 'hässlich'
aussehen als bisher).

Vielen Dank für Deine schnelle und kompetente Hilfe!