راه حل سوم. راه حل سوم که به نظر من بهترین و درستترین راه حل هست اینه که ما به کاراکترهای غیر قابل چاپ و نحوه تعبیر اونها توسط TeXstudio برای نمایش متن درون ویرایشگر توجه کنیم. در واقع اون کنجکاوی آخر من که توی صورت سوال نوشتم باعث شد که این راه حل رو پیدا کنم.
خوب همه احتمالا با مجموعه کارکترهای Unicode آشنا هستین که طبق دو تا استاندارد UTF-8 و UTF-16 پیادهسازی شدند. معمولا بیشتر اسنادی که ما باهاشون کار میکنیم از UTF-8 استفاده میکنن. یه تعدادی از این کاراکترها غیر قابل چاپ هستن و صرفا برای کنترل تفسیرگر متن استفاده میشن. دو تا از این کاراکترها RTL که مخفف Right to Left Mark و LTR که مخفف Left to Right Mark هستن، برای ما اهمیت ویژهای دارن. در صورت سوال توضیح دادم که چطور میتونید با ++Notepade این کاراکترها رو ببنید. در اونجا از LRM
و RLM
برای مخفف این کاراکترها استفاده میشه. شناسه unicode این کاراکترها در زیر اومده.
LTR: u+200E
RTL: u+200F
در واقع TeXstudio ازین کاراکترها برای نحوه نمایش متن داخل ویرایشگر استفاده میکنه. خوب حالا دانستن این جزییات چه کمکی به ما میکنه؟ واقعیت اینه که راه حل دوم در بالا هم خیلی ایدهآل نیست. فرض کنید بخوایم یه معادلهی درونخطی کمی پیچیدهتر مثل زیر رو مطابق با راه حل دوم بنویسیم.
اگرچه این ورودی کامپایل و در خروجی به درستی نمایش داده میشه اما همونطور که میبینید ویرایشگر قسمت آخرشو قرمز کرده و موقعی هم که تایپ معادله تموم میشه و دو تا فلش راست و بعد اسپیس میزنید به انتهای خط نمیرید! دلیل این چیه؟ خوب دلیلش به همون کاراکترایی که ازشون صحبت کردم برمیگرده. بذارین این فایل رو با ++Notepade ببینیم.
کلی کاراکتر LRM
رو TeXstudio داخل محیط معادله درونخطی اضافه کرده که به نظر منطقی نمیاد. راه حل اصولی اینه که کل معادله درونخطی رو داخل یک جفت از کاراکترهای LRM قرار بده. خوب ما مجبوریم این کار رو خودمون با ماکرو انجام بدیم. در واقع ماکروی راه حل دوم رو بهینهتر میکنیم. قبل از ادامه باید دوباره تنظمایت Bi-Di رو عوض کنیم و از TeXstudio بخوایم که دیگه برای ما به صورت خودکار کارکترای LRM
وارد نکنه.
در گام بعدی این ماکروی جدید رو هم اضافه میکنیم و کلید میانبر Ctrl+Shift+I رو برای این ماکروی جدید قرار میدیم.
حالا اگه همون معادلهی درونخطی پیچیدهتر قبلی رو بنویسیم، داخل ویرایشگر این شکلی نمایش داده میشه.
و دیگه قسمت آخر قرمز نشد. همینطور وقتی تایپ معادله تموم میشه اگه دو فلش به سمت راست بزنید و بعدش اسپیس به آخر خط میرید و در واقع مشکلات قبلی ما حل شدند. بد نیست یه نگاهی هم به این متن در ++Notepad بکنیم.
همونطور که مشاهده میکنیم معادلهی درون خطی فقط بین دو کارکتر LRM
قرار گرفته و این دقیقا همون چیزی بود که ما میخواستیم.
خوب حالا ممکنه خیال کنین کار تموم شده اما نه! چون دیگه TeXstudio برای ما کاراکترای LRM
رو به صورت خودکار وارد نمیکنه. این کار باعث میشه اگه در این تنظیمات فرمانهای درونخطی رو بخواید بنویسید، اوضاع خراب بشه. برای این که این اتفاق نیفته کافیه یه ماکرو هم برای وارد کردن یه جفت کارکتر LRM
بنویسیم و قبل از نوشتن هر فرمان درونخطی ازون استفاده کنیم. فکر کنم الان دیگه باید بدونید چطوری این کارو انجام بدین، پس من به گذاشتن عکس زیر بسنده میکنم.
این هم یه نمونه از متنی که معادله و دستور درونخطی داخلش باشه و با این تنظیماتی که گفتم در TeXstudio نوشته شده.
در نهایت برای اطمینان از عملکرد درست ماکروها و خودمون یه نگاهی هم به این فایل در ++Notepad بکنیم.
که کاملا درست به نظر میرسه و در واقع ۳ جفت LRM
داریم که یه جفتش برای معادلهی درونخطی و هر کدوم از جفتای دیگه برای دستورای درونخطی هستند.
در انتها باید بگم که ما نباید این چیزا رو دستی درست میکردیم و خود ویرایشگر باید از پس این ماجراها برمیومد. انجام دادن این چیزا به صورت غیرخودکار احتمال اشتباه رو خیلی بالا میبره ولی خوب ظاهرا این مشکل سالهاست که در ادیتورها وجود داره و نیازمند پیگیری هست تا درست بشه.
ممکنه مثالهایی وجود داشته باشن که این راه حل هم براشون خیلی خوب عمل نکنه! میشه در حد همین مثالای ساده این کار رو به صورت خودکار هم انجام داد. این رو در پاسخ بعدی توضیح میدم.