با استفاده از ماکرو
این بهترین چیزی است که میتوانی داشته باشی:
\documentclass{article}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
% classes 1-3 are used in unicode-letters.tex, so we'll put the Latin letters in 4
\newcount\xp@n
\xp@n=`\A \loop \XeTeXcharclass \xp@n=4 \ifnum\xp@n<`\Z \advance\xp@n by 1 \repeat
\xp@n=`\a \loop \XeTeXcharclass \xp@n=4 \ifnum\xp@n<`\z \advance\xp@n by 1 \repeat
% when we encounter class 4, we'll do \startlatin
\XeTeXinterchartoks 0 4 {\startlatin}
\XeTeXinterchartoks 255 4 {\startlatin}
% and when we encounter class 0, we'll do \finishlatin
\XeTeXinterchartoks 255 0 {\finishlatin}
\XeTeXinterchartoks 4 0 {\finishlatin}
\newcommand{\startlatin}{\if@Latin\else\bgroup\beginL\latinfont\@Latintrue\fi}
\newcommand{\finishlatin}{\if@Latin\unskip\endL\egroup{ }\fi}
\makeatother
\XeTeXinterchartokenstate=1
\begin{document}
این یک آزمایش است
One Two Three
و ادامه آن
\end{document}
که خالی از مشکل نیست. متأسفانه این روش برای فایلهای بزرگ و رسمی قابل استفاده نیست و در اینگونه فایلها باید از mark-up (همان دستور \lr) استفاده کنی. دلیل اصلیش این است که در متنهای دوجهته چیزهایی مانند نقطهگذاری و فاصله هنگامی که جهت نوشته تغییر میکند بسیار سخت خواهد بود و غیرقابل تشخیص. اگر متن تنها یک جهته بود زیاد مهم نبود که نقطهگذاری یا فاصله قبل از تغییر زبان اتفاق میافتد یا بعد از آن اما در متنهای دوجهته مهم است. بنابراین اگر میخواهی متن دوجهته رو به درستی حروفچینی کنی استفاده از دستور \lr الزامی است.
با استفاده از یک pre-processor
میتوانی یک pre-processor بنویسی یا یک pre-processor مانند BiDiTeX را تغییر بدهی. کاری که این pre-processor انجام میدهد این است که یک فایل filename.tex را به filename.ltx تبدیل میکند و خودکار دستور \lr را برای متنهای لاتین وارد میکند. آنوقت فقط باید فایل filename.ltx را با xelatex پردازش کنی.
خالد حسنی مقداری BiDiTeX را بری زیتک تغییر داده است اما اگر بخواهی آن را برای زیپرشین استفاده کنی، باز هم به تغییرات بیشتری نیاز خواهی داشت. کد موجود از اینجا قابل دریافت است.