در نسخه 17.7
بسته bidi
که تازه به CTAN داده شده است، دو دستور \bidi@collect@body
و \bidi@collect@long@body
اضافه شدهاند. این دو دستور محتوای یک محیط را برای استفاده به عنوان آرگومان یک دستور ممکن میسازند. دستور اول زمانی استفاده میشود که محتوای محیط طولانی نباشد و دستور دوم زمانی که محتوای محیط طولانی باشد.
فرض کنید که میخواهید محیطی تعریف کنید متن داخل این این محیط داخل یک کادر با استفاده از \fbox
قرار بگیرد:
\documentclass{article}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\newcommand{\BoxMe}[1]{\fbox{\parbox{2cm}{#1}}}
\newenvironment{test}{\bidi@collect@body\BoxMe}{}
\newenvironment{longtest}{\bidi@collect@long@body\BoxMe}{}
\makeatother
\begin{document}
\begin{test}
وفا ۱ وفا ۲ وفا
\end{test}
\bigskip
\begin{longtest}
وفا ۱ \par
وفا ۲ \par
وفا ۳ \par
وفا ۴
\end{longtest}
\end{document}
نتیجه بصورت زیر خواهد بود:
به عنوان مثال دیگر فرض کنید که میخواهید محیطی تعریف کنید که محتوایش در یک نوشتار دوستونه، بصورت یکستونه حروفچینی شود:
\documentclass[twocolumn]{article}
\usepackage{ptext}
\usepackage{xecolor}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\newcommand*{\MakeOneColumn}[1]{\@twocolumnfalse\twocolumn[\textxecolor{red}{#1}]}
\newenvironment{test}{\bidi@collect@long@body\MakeOneColumn}{}
\makeatother
\begin{document}
\begin{test}
مقداری متن که من در حال نوشتن آن هستم و مقدار بیشتر و بیشتر متن مقداری متن که من در حال نوشتن آن هستم و مقدار بیشتر و بیشتر متن مقداری متن که من در حال نوشتن آن هستم و مقدار بیشتر و بیشتر متن مقداری متن که من در حال نوشتن آن هستم و مقدار بیشتر و بیشتر متن مقداری متن که من در حال نوشتن آن هستم و مقدار بیشتر و بیشتر متن مقداری متن که من در حال نوشتن آن هستم و مقدار بیشتر و بیشتر متن
\end{test}
\ptext[1-10]
\end{document}
نتیجه بصورت زیر خواهد بود: