لینکها و رنگها از امکانات خود تک نیستند بلکه با استفاده از دستور \special
ایجاد میشوند. برای اینکه به عنوان مثال نحوه کار کردن بسته color
را بدانید، در سطح خیلی پایین این کاری است که بسته color
برای رنگ کردن انجام میدهد:
This is \special{color push rgb 1 0 0}RED COLOR\special{color pop} as you can see.
\bye
اگر نام این فایل test.tex
باشد، میتوانید آن را با دستور xetex test
پردازش کنید و خروجی را ببینید.
حالا اگر دستورات بدوی \beginR
و \endR
را دور متن رنگی قرار دهید:
\TeXXeTstate=1
This is \beginR\special{color push rgb 1 0 0}RED COLOR\special{color pop}\endR{} as you can see.
\bye
میبینید که رنگ به متن مورد نظر اعمال نشده است. در واقع وقتی دو \special
با \beginR...\endR
محصور میشود، جای دو \special
عوض میشود. اگر جای دو \special
را عوض کنید مشکل حل میشود:
\TeXXeTstate=1
This is \beginR\special{color pop}RED COLOR\special{color push rgb 1 0 0}\endR{} as you can see.
\bye
و این دقیقاً کاری است که بسته bidi
برای حل مشکل بستههایی چون hyperref
و color
میکند. اما چنانچه متن رنگی شما بیشتر از یک خط باشد، این روش دیگر کار نخواهد کرد:
\TeXXeTstate=1
This is \beginR\special{color pop}RED COLOR as you can see and this can go to the next line too as you can see and here is the rest as we need to do\special{color push rgb 1 0 0}\endR{} as you can see.
\bye
مشکل فوق باگ موتور e-tex
است و با ماکرونویسی قابل حل نیست. بنابراین تا زمانی که مشکل فوق در موتور e-tex
حل نشود، در زیپرشین نیز مشکل وجود خواهد داشت.