با استفاده از ماکرو
این بهترین چیزی است که میتوانی داشته باشی:
\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
را بری زیتک تغییر داده است اما اگر بخواهی آن را برای زیپرشین استفاده کنی، باز هم به تغییرات بیشتری نیاز خواهی داشت. کد موجود از اینجا قابل دریافت است.