新しい環境で新しいコマンドを使用する

新しい環境で新しいコマンドを使用する

次のことを実行する環境を作成したいと考えていますnewenvironment: 環境の高さを評価し、それを 1 ページに収まる回数 (texttheight/height) で印刷します。

以下は環境を 2 回印刷する試みです。

\documentclass{article}
\newenvironment{double}{\newcommand{\todouble}\bgroup}{\egroup\todouble\todouble}
\begin{document}
\begin{double}
    Hello, World!
\end{double}
\end{document}

私の最初のアイデアは、環境の内容を含むコマンドを定義するために\newenvironment使用する環境を定義するためにを使用することです 。環境の最後に2 回呼び出されます。\newcommand\todouble\todouble

しかし、次のエラーが発生して失敗します:

! Extra }, or forgotten \endgroup.
\enddouble ->\egroup 
                 \todouble \todouble 
l.6 \end{double}

どうすれば修正できますか?

答え1

必須の議論を区切るために使用することはできません\bgroup。そして、リーダーにあなたが吸収した内容のコピーでページを埋めてもらいたいのです。

\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}

ここに画像の説明を入力してください

少なくとも 2 つのボックスのコピーがページに収まるかどうかを確認し、収まらない場合はボックスを印刷する拡張バージョンです。

\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}

関連情報