次のことを実行する環境を作成したいと考えています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}