Verwenden Sie den neuen Befehl in einer neuen Umgebung.

Verwenden Sie den neuen Befehl in einer neuen Umgebung.

Ich möchte eine Umgebung erstellen, newenvironmentdie 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, \newenvironmenteine Umgebung zu definieren, die wiederum \newcommandeinen Befehl definiert \todouble , der den Inhalt der Umgebung enthält. Am Ende \todoublewird 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 \bgroupzur 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}

Bildbeschreibung hier eingeben

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}

verwandte Informationen