برای حروفچینی دوجهته بصورت کلی ما دو نوع الگوریتم داریم که هر دو در سطح موتور تک انجام میشود:
- الگوریتم TeX-XeT
- الگوریتم Omega
الگوریتم نخستین توسط Knuth و MacKay ابداع شده است که برای توضیحات آن میتوانید این مقاله را بخوانید. الگوریتم TeX--XeT که در موتور e-TeX وجود دارد و بسته bidi
از آن استفاده میکند نسخه تغییریافته این الگوریتم است که مشکلاتی دارد که بارها در این سایت و سایت قبلی به آن اشاره شد. به عنوان نمونه، یکی از مشکلات اصلی این است که این الگوریتم تغییریافته whatsitها را در متون راست به چپ برعکس میکند و در نتیجه هر چیزی که با دستور بدوی \special
سر و کار دارد و توسط درایور تولید میشود (مانند رنگ، لینک و ...) مشکلساز است به این خاطر که ترتیب \special
ها در متون راست به چپ برعکس وارد میشود. الگوریتم اصلی این مشکل را ندارد اما مشکلات دیگری دارد.
الگوریتم به کار رفته در سیستم omega که در aleph نیز وجود دارد و به LuaTeX هم راه یافته است مشکلات زیادی دارد و وضعیت بهتری ندارد اما این مشکلات از دسته متفاوتی هستند. طی تجربهای که در ۱۵ سال گذشته با حروفچینی دوجهته داشتهام، الگوریتم TeX--XeT با تمام مشکلاتش stableتر از الگوریتم Omega است و به آن اعتماد بیشتری میتوان کرد.
Legally در این مقاله توضیح میدهد که چگونه میتوان تنها با استفاده از تک کنوث متنهای راست به چپ و چپ به راست را حروفچینی کرد. الگوریتمهای توضیح داده شده پیچیده هستند و حدود ۸ ساعت طول کشید تا من بفهمم که نحوه دقیق انجام این کار چگونه است. این مقاله بسیار جالب است و حداقل خواندن آن من را به این تشویق کرد که با استفاده از الگوریتمهای توضیح داده شده نسخهای از بسته bidi
را بنویسم که در آن حروفچینی دوجهته تنها با استفاده از ماکروهای تک و تنها با استفاده از امکانات موجود در موتور تک کنوث انجام شود. یکی از ایرادهای این روش این است که به خاطر پیچیدگی الگوریتمهای موجود منابع کامپیوتری زیادی نیاز دارد و اگر از کامپیوتر ۲۰ سال پیش استفاده کرد ممکن است پردازش نوشتارها زمان زیادی بگیرد اما امروزه کامپیوترها بسیار سریع هستند و این سرعت روز به روز رو به افزایش است بنابراین به نظر نمیرسد این مشکل امروزه حتی به چشم بیاید. یکی از مهمترین مزایای این روش آن است که بسته حاصل portable است و با هر موتور تکی کار خواهد کرد زیرا تنها به موتور تک کنوث نیاز دارد و مزیت دیگر مهم آن این است که مشکلات الگوریتمهای بالا را ندارد.