هدف از ایجاد این پرسش آموزش ماکرنویسی است تا بتوان محیطی تعریف کرد که رنگی باشد و قالیت شکستن بین صفحات را داشته باشد بنابراین نحوه انجام کار در سطح خیلی پائینی توضیح داده میشود.
کد و خروجی آن
\documentclass[draft]{article}
\usepackage{color}
\usepackage{ptext}
\usepackage[computeautoilg=on]{xepersian}
\settextfont{Yas}
\newbox\mycolorbox
\newenvironment{shadedtext}{\bigskip%
\setbox\mycolorbox\vbox\bgroup
\hsize=\dimexpr\textwidth-2\fboxsep\relax}{%
\egroup
\loop
\ifdim\ht\mycolorbox>\dimexpr\textheight-\pagetotal-2\fboxsep-2\fboxrule\relax
\noindent\colorbox{yellow}{\vsplit\mycolorbox to \dimexpr\textheight-\pagetotal-2\fboxsep-2\fboxrule\relax}%
\eject
\repeat
\noindent\colorbox{yellow}{\vsplit\mycolorbox to \ht\mycolorbox}\bigskip}
\begin{document}
\ptext[1]
\begin{shadedtext}
\ptext[1-100]
\end{shadedtext}
\ptext[1]
\end{document}
توضیح کد
برای قرار دادن متن داخل کادر رنگی میتوان از دستور \colorbox استفاده کرد اما این دستور قابلیت شکسته شدن بین صفحات را ندارد. کاری که انجام میدهیم این است که متنی را که قرار است داخل کادر رنگی قرار دهیم داخل یک \vbox ذخیره میکنیم و اگر ارتفاع کادر از ارتفاع فضای موجود برای حروفچینی متن بیشتر بود کادر رنگی را قرار میدهیم این کار را تا زمانی تکرار میکنیم که ارتفاع کادر کمتر از ارتفاع فضای موجود باشد و سپس بقیه کادر را میچینیم.