هدف از ایجاد این پرسش آموزش ماکرنویسی است تا بتوان محیطی تعریف کرد که رنگی باشد و قالیت شکستن بین صفحات را داشته باشد بنابراین نحوه انجام کار در سطح خیلی پائینی توضیح داده میشود.
کد و خروجی آن
\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
ذخیره میکنیم و اگر ارتفاع کادر از ارتفاع فضای موجود برای حروفچینی متن بیشتر بود کادر رنگی را قرار میدهیم این کار را تا زمانی تکرار میکنیم که ارتفاع کادر کمتر از ارتفاع فضای موجود باشد و سپس بقیه کادر را میچینیم.