Ich möchte eine Umgebung erstellen, newenvironment
die Folgendes tut: Sie wertet die Höhe der Umgebung aus und druckt sie dann so oft (Texthöhe/Höhe), wie auf eine Seite passt.
Hier ist ein Versuch, die Umgebung zweimal auszudrucken:
\documentclass{article}
\newenvironment{double}{\newcommand{\todouble}\bgroup}{\egroup\todouble\todouble}
\begin{document}
\begin{double}
Hello, World!
\end{double}
\end{document}
Meine erste Idee ist, \newenvironment
eine Umgebung zu definieren, die wiederum \newcommand
einen Befehl definiert \todouble
, der den Inhalt der Umgebung enthält. Am Ende \todouble
wird die Umgebung zweimal aufgerufen.
Dies schlägt jedoch mit dem Fehler fehl:
! Extra }, or forgotten \endgroup.
\enddouble ->\egroup
\todouble \todouble
l.6 \end{double}
Wie kann ich es reparieren?
Antwort1
Sie können es nicht \bgroup
zur Abgrenzung eines obligatorischen Arguments verwenden. Und Sie möchten, dass Führungskräfte die Seite mit Kopien dessen füllen, was Sie aufgenommen haben.
\documentclass{article}
\newenvironment{double}
{%
\par % be in vertical mode
\setbox0=\vbox\bgroup % start a box
\strut % ensure good height for the first line
\ignorespaces % ignore the end of line
}
{%
\egroup % end the box
\hrule height0pt % vertical analog of \leavevmode
\cleaders\copy0\vfill % repeat as much as necessary
}
\begin{document}
\begin{double}
Hello, World!
\end{double}
\end{document}
Eine erweiterte Version, die prüft, ob mindestens zwei Kopien der Box auf die Seite passen und andernfalls nur die Box druckt.
\documentclass{article}
\usepackage{lipsum}
\newenvironment{double}
{%
\par % be in vertical mode
\setbox0=\vbox\bgroup % start a box
\strut % ensure good height for the first line
\ignorespaces % ignore the end of line
}
{%
\ifhmode\strut\fi\egroup % end the box
% see if at least two copies of the box fit in the page
\ifdim\ht0 < \dimexpr .5\textwidth-4ex\relax
\hrule height0pt % vertical analog of \leavevmode
\cleaders\copy0\vfill % repeat as much as necessary
\clearpage
\else
\unvbox0
\clearpage
\fi
}
\begin{document}
\begin{double}
Hello, World!
\end{double}
\begin{double}
\lipsum*[2]
\end{double}
\begin{double}
\lipsum
\end{double}
\end{document}