اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
Close Sidebar
وب‌سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

محبوب‌ترین برچسب‌ها

رفع خطا جدول مراجع xepersian ریاضی‌نویسی شکل فونت فهرست مطالب شماره‌گذاری منابع bidi پانویس بیب‌تک tikz تک‌لایو parsilatex بیمر اسلاید زی‌پرشین پاورقی bibtex سربرگ نماد رسم شکل فرمول‌نویسی قالب ارجاع‌دهی biditexmaker هدر ویرایشگر beamer واژه‌نامه اندازه فونت texstudio عنوان فصل ماتریس اعمال نشدن تغییرات در پی‌دی‌اف رسم جدول bidipresentation شماره صفحه حاشیه رنگ عنوان شکل اسلاید فارسی محیط قضیه گراف مکان شکل tikzpicture حروف‌چینی کد شماره فصل enumerate tabriz_thesis نمایه align زیرنویس شکل کادر itemize فهرست اشکال الگوریتم listings عدم اجرا نیم‌فاصله متن لاتین و فارسی بسته فاصله بین خطوط قالب پایان‌نامه فرمول نصب تک‌لایو فارسی‌تک hyperref شماره فرمول glossaries کپشن نمودار خروجی لاتک حروف‌چینی چندستونی فونت فارسی و انگلیسی ماکرونویسی biditools شماره پاورقی پیوست‌ سوال امتحانی فاصله‌گذاری فرمول چندضابطه‌ای subfigure extrafootnotefeatures header texmaker pdf tex biditufte-book longtable تصویر شمارنده texlive2015 زیرنویس خطا رسم نمودار شماره‌گذاری صفحات پایان نامه دیاگرام فهرست جداول میک‌تک texlive2016 تنظیم جدول آکولاد kashida texworks caption اندیس lollipop iust-thesis multicol فصل‌نویسی شعر سوال چهارگزینه‌ای بولد تورفتگی اعداد فارسی فاصله عمودی xindy چپ‌چینی اوبونتو میکروسافت ورد قاب geometry texlive fancyhdr وسط‌چینی تک لایو 2015 عنوان بخش شماره گذاری به‌روزرسانی بسته aimc46 صفر توخالی فرمول طولانی بیرون‌زدگی xelatex کاما tcolorbox پوستر فاصله سطرها نوشتافت شکست خط tex-programming فونت اعداد pgfplots قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس فلش جایابی تصویر قالب کتاب پاراگراف‌بندی بازیابی اطلاعات هایپرلینک فهرست نمادها شمارنده فصل font محیط ریاضی رسم کادر جداکننده جدول طولانی فهرست تصاویر شماره‌گذاری فرمول algorithm2e فونت بولد proof equation bidipoem eps جدول افقی عکس به‌روزرسانی پانویس چندستونی کمک مالی فاصله خطوط حروف‌چینی شعر زیرشکل minipage قلم پانویس پاراگرافی ltrfootnote پیوست computeautoilg متن فارسی و انگلیسی فرمول چندخطی neveshtuft غلط‌گیری املایی تک‌پارسی پیکان لاتکس tabular baselineskip شماره قسمت قسمت عنوان جدول
12 نفر آنلاین
0 عضو و 12 مهمان در سایت حاضرند
بازدید امروز: 10137
بازدید دیروز: 27333
بازدید کل: 25317624

نمایش معادلات و فرمان‌های درون‌خطی در ویرایشگر

0 رای
794 بازدید

یه مشکل قدیمی همیشه وجود داشته که وقتی داخل ویرایشگر TeXstudio کار می‌کنی و می‌خوای یه معادله درون‌خطی بنویسی ظاهرش داخل ویرایشگر به هم می‌ریزه. این مشکل قبل‌تر در مورد دستورات درون‌خطی هم وجود داشته که تا حدی برطرف شده. به عنوان مثال عکس زیر رو ببینید.

enter image description here

همانطور که مشخصه ظاهر معادله به هم ریخته. من انتظار دارم که یه همچین چیزی داشته باشم که این دومی رو توی word نوشتم.

enter image description here

آیا راهی وجود داره که این مشکلو در TeXstudio حل کنیم؟
آیا ویرایشگری هست که این مشکلات نمایش رو نداشته باشه؟

کمی که بیشتر فکر کردم دیدم که ایده بدی نیست که کاراکترای غیرقابل چاپی که ویرایشگر TeXStudio استفاده می‌کنه رو هم نگاه کنم و برام عجیب بود که دور معادله درون‌خطی رو کارکتر LRM نذاشته ولی دور دستورات درون‌خطی رو گذاشته. عکس این رو هم این زیر گذاشتم. اگر فایل main.tex که ضمیمه شده رو با ++Notepad باز کنید، می‌تونید این کاراکترا رو هم خودتون ببیند. برای این منظور به view -> show symbol‌ برید و توجه کنید show non-printing characters فعال باشه.

enter image description here

فایل‌های پیوست
سوال شده مرداد 30, 1402 توسط حسین رهنما (146 امتیاز)
ویرایش شده شهریور 2, 1402 توسط حسین رهنما
در ادامه روند پیدا کردن راه حل بهینه رو کامل توضیح دادم. اگه کسی حوصله خوندن همه اینا رو نداره، من سعی کردم یه خلاصه از بهترین راه حل رو [اینجا](https://tex.stackexchange.com/questions/493146/latex-editor-that-correctly-supports-mixed-rtl-presentation/694262#694262) بنویسم.

4 پاسخ

0 رای

راه حل اول. من یه راه قدیمی و خیلی ساده برای حل این مشکل بلد بودم که خیلی مورد علاقه‌ام نبود. در واقع باید هر معادله یا دستور درون‌خطی رو توی خط جداگانه بنویسید. به عکس زیر نگاه کنید.

enter image description here

این روش دو تا عیب داره. اول این که تعداد خط‌ها خیلی زیاد می‌شه. دوم این که خوانایی رو پایین میاره. دو تا خوبی هم داره. اول این که اگه این فایلو داخل ادیتورای دیگه باز کنین همینو بهتون نمایش می‌ده و شاید فقط خط‌های فارسی رو از چپ شروع کنه. دوم این که نحوه نمایش فرمان‌های درون‌خطی مشابه همدیگه هستن، اگرچه متن‌ داخل یکیشون انگلیسی و متن داخل اون یکی فارسی هست. اگه دقت کنید توی صورت سوال می‌بینید نحوه نمایش این دو دستور درون‌خطی فرق می‌کنه اگه همه رو داخل یه خط بنویسیم. ولی خوب من فکر می‌کنم هر دوی این نمایش‌ها قابل تحمله و مثل معادله‌ی درون خطی در صورت سوال گیج‌کننده نیست.

اگر با این راه حل مشکلی ندارید، می‌تونید همین‌جا متوقف بشین چون راه حل‌های دوم و سوم به هم مرتبط هستن و یه کمی طولانی!

پاسخ داده شده مرداد 31, 1402 توسط حسین رهنما (146 امتیاز)
ویرایش شده شهریور 1, 1402 توسط حسین رهنما
0 رای

راه حل دوم. یه چیزی که اخیرا متوجهش شدم اینه که اگه در فرمول‌های درون‌خطی خودتون از علامت دلار فاصله بدین، نمایش به صورتی که انتظار داریم درمیاد. شکل زیر رو نگاه کنید.

enter image description here

خوب این روش یه عیبی که داره اینه که اول باید دو تا علامت دلار رو تایپ کنید، بعدش نشانگر ویرایشگر رو به وسط اونا ببرین. یه دونه اسپیس بزنید و یه بار جهت راست رو بزنید و بعدش دوباره اسپیس بزنید. حالا می‌تونید معادله خودتونو تایپ کنید. می‌شه کل این فرآیندی که گفتم رو به شکل یه ماکرو درآورد. یه عیب دیگه هم داره که ممکنه داخل ویرایشگرای دیگه همچین چیزی رو نبینید. به عنوان مثال اگر از vscode‌ استفاده کنید، ترتیب کلمات به هم ریخته هستن. خوبیش اما این که اون چیزی که می‌خواستیم یعنی تعداد خط‌های کم و خوانایی بهتر رو در TeXstudio به دست آوردیم.

ازینجا به بعد می‌خوام در مورد ایجاد ماکرو برای راه حل دوم توضیح بدم. اول در ویرایشگر TeX Studio خودتون به

Options -> Configure TeXstudio -> Adv. Editor -> Bi-Di

برید و اطمینان حاصل کنین که تنظیمات مثل شکل زیر باشه.

enter image description here

بعدش به

Macros -> Edit Macros

برید و یه ماکرو مطابق با شکل زیر ایجاد کنین.

enter image description here

من برای این ماکرو یه کلید میان‌بر هم درست کردم که این کار رو می‌تونید از طریق منوی

Options -> Configure TeXstudio -> Shortcuts -> Macros

انجام بدین. حالا هر موقع یه معادله درون خطی بخوام کافیه که کلید میان‌بر رو که اینجا Ctrl+Shift+I هست رو بزنم، کیبوردم رو به انگلیسی تغییر بدم و شروع به تایپ کردن معادله کنم.

پاسخ داده شده مرداد 31, 1402 توسط حسین رهنما (146 امتیاز)
ویرایش شده مرداد 31, 1402 توسط حسین رهنما
0 رای

راه حل سوم. راه حل سوم که به نظر من بهترین و درست‌ترین راه حل هست اینه که ما به کاراکترهای غیر قابل چاپ و نحوه تعبیر اون‌ها توسط 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‌ ازین کاراکترها برای نحوه نمایش متن داخل ویرایشگر استفاده می‌کنه. خوب حالا دانستن این جزییات چه کمکی به ما می‌کنه؟ واقعیت اینه که راه حل دوم در بالا هم خیلی ایده‌آل نیست. فرض کنید بخوایم یه معادله‌ی درون‌خطی کمی پیچیده‌تر مثل زیر رو مطابق با راه حل دوم بنویسیم.

enter image description here

اگرچه این ورودی کامپایل و در خروجی به درستی نمایش داده می‌شه اما همونطور که می‌بینید ویرایشگر قسمت آخرشو قرمز کرده و موقعی هم که تایپ معادله تموم می‌شه و دو تا فلش راست و بعد اسپیس می‌زنید به انتهای خط نمی‌رید! دلیل این چیه؟ خوب دلیلش به همون کاراکترایی که ازشون صحبت کردم برمی‌گرده. بذارین این فایل رو با ++Notepade ببینیم.

enter image description here

کلی کاراکتر LRM رو TeXstudio داخل محیط معادله درون‌خطی اضافه کرده که به نظر منطقی نمیاد. راه حل اصولی اینه که کل معادله درون‌خطی رو داخل یک جفت از کاراکترهای LRM قرار بده. خوب ما مجبوریم این کار رو خودمون با ماکرو انجام بدیم. در واقع ماکروی راه حل دوم رو بهینه‌تر می‌کنیم. قبل از ادامه باید دوباره تنظمایت Bi-Di رو عوض کنیم و از TeXstudio بخوایم که دیگه برای ما به صورت خودکار کارکترای LRM‌ وارد نکنه.

enter image description here

در گام بعدی این ماکروی جدید رو هم اضافه می‌کنیم و کلید میان‌بر Ctrl+Shift+I رو برای این ماکروی جدید قرار می‌دیم.

enter image description here

حالا اگه همون معادله‌ی درون‌خطی پیچیده‌تر قبلی رو بنویسیم، داخل ویرایشگر این شکلی نمایش داده می‌شه.

enter image description here

و دیگه قسمت آخر قرمز نشد. همینطور وقتی تایپ معادله تموم می‌شه اگه دو فلش به سمت راست بزنید و بعدش اسپیس به آخر خط می‌رید و در واقع مشکلات قبلی ما حل شدند. بد نیست یه نگاهی هم به این متن در ++Notepad بکنیم.

enter image description here

همونطور که مشاهده می‌کنیم معادله‌ی درون خطی فقط بین دو کارکتر LRM‌ قرار گرفته و این دقیقا همون چیزی بود که ما می‌خواستیم.

خوب حالا ممکنه خیال کنین کار تموم شده اما نه! چون دیگه TeXstudio برای ما کاراکترای LRM‌ رو به صورت خودکار وارد نمی‌کنه. این کار باعث می‌شه اگه در این تنظیمات فرمان‌های درون‌خطی رو بخواید بنویسید، اوضاع خراب بشه. برای این که این اتفاق نیفته کافیه یه ماکرو هم برای وارد کردن یه جفت کارکتر LRM بنویسیم و قبل از نوشتن هر فرمان درون‌خطی ازون استفاده کنیم. فکر کنم الان دیگه باید بدونید چطوری این کارو انجام بدین، پس من به گذاشتن عکس زیر بسنده می‌کنم.

enter image description here

این هم یه نمونه از متنی که معادله و دستور درون‌خطی داخلش باشه و با این تنظیماتی که گفتم در TeXstudio نوشته شده.

enter image description here

در نهایت برای اطمینان از عملکرد درست ماکروها و خودمون یه نگاهی هم به این فایل در ++Notepad بکنیم.

enter image description here

که کاملا درست به نظر می‌رسه و در واقع ۳ جفت LRM داریم که یه جفتش برای معادله‌ی درون‌خطی و هر کدوم از جفتای دیگه برای دستورای درون‌خطی هستند.

در انتها باید بگم که ما نباید این چیزا رو دستی درست می‌کردیم و خود ویرایشگر باید از پس این ماجراها برمیومد. انجام دادن این چیزا به صورت غیرخودکار احتمال اشتباه رو خیلی بالا می‌بره ولی خوب ظاهرا این مشکل سال‌هاست که در ادیتورها وجود داره و نیازمند پیگیری هست تا درست بشه.

ممکنه مثال‌هایی وجود داشته باشن که این راه حل هم براشون خیلی خوب عمل نکنه! می‌شه در حد همین مثالای ساده این کار رو به صورت خودکار هم انجام داد. این رو در پاسخ بعدی توضیح می‌دم.

پاسخ داده شده مرداد 31, 1402 توسط حسین رهنما (146 امتیاز)
ویرایش شده شهریور 2, 1402 توسط حسین رهنما
0 رای

خودکار کردن راه حل سوم. همونطور که دیدیم مشکل اساسی راه حل سوم اینه که ما باید با زدن کلید‌های میان‌بر به ویرایشگر بگیم که چه زمانی از ماکروها استفاده کنه و این کار می‌تونه در مرور زمان باعث بروز خطا بشه، به خصوص که کاراکترهایی که ما استفاده می‌کنیم غیر قابل چاپ هستند. خوشبختانه می‌شه این فرآیند رو برای نیاز خاص ما به صورت خودکار درآورد. این کار رو با استفاده از Triggers یا ماشه‌ها برای ماکروها می‌تونیم انجام بدیم. یه ماشه در واقع یه Regular Expression‌ یا عبارت منظمه که به ما کمک می‌کنه وقتی یه الگویی در متن پدیدار شد، ماکروی نظیر اون الگو به صورت خودکار فراخوانی بشه. بنابراین دیگه ما به کلید میان‌بر برای ماکروها نیازی نداریم. عبارت‌های منظم بحث مفصلی دارن و می‌تونید در مورد اونا در اینترنت بیشتر بخونید.

ماکروی زیر رو برای معادله‌ی درون‌خطی ایجاد کنین.

enter image description here

دقت کنید که در قسمت Trigger از عبارت منظم

\$\.\$

استفاده کردم. این هم کد خود ماکرو هست.

%SCRIPT
editor.write("\u200E$$\u200E")
cursor.shift(-2)

حالا هر موقع شما در ویرایشگر عبارت $.$ رو تایپ کنید (توجه کنید که نقطه‌ی بین دو علامت دلار رو هم باید تایپ کنید)، ویرایشگر به صورت خودکار اون رو به ‍‍LRM$$LRM تبدیل می‌کنه که شما کارکترهای LRM رو می تونید در ++Notepad‌ ببینید ولی در ویرایشگر مشخص نیستند. حالا نشانگر شما در بین دو علامت دلار قرار دارد. می‌تونید شروع به نوشتن معادله کنید. به ویدیویی که در انتهای پست قرار دادم با دقت نگاه کنید.

ماکروی زیر رو هم برای دستورهای درون‌خطی خاصی که معمولا استفاده می‌کنیم مثل ‍‍‍‍\lr و دستوراتی مثل ‍‍‍\textbf، ‍‍‍\textit یا هر چی که با ‍\text... شروع بشه ایجاد می‌کنیم.

enter image description here

این بار در قسمت Trigger از عبارت منظم

\\((text.+)|(lr))\{.*\}

استفاده کردم. این هم کد خود ماکرو هست.

%SCRIPT
editor.write("\u200E");
editor.write(triggerMatches[0]);
editor.write("\u200E");
var pos = cursor.columnNumber();
cursor.selectColumns(pos, pos + 1);
cursor.removeSelectedText();

حالا هر موقع شما مثلا \lr{something} رو بزنید به محض تایپ کردن کروشه بسته } ماکرو به صورت خودکار فراخوانی می‌شه و کل اون دستور درون‌خطی رو با یه جفت کاراکتر ‍‍‍‍LRM محصور می‌کنه تا به درستی در ویرایشگر نمایش داده بشه. دقت کنید که اگه از autocomplete استفاده می‌کنید حتما باید کروشه بسته رو خودتون تایپ کنید و اگه فلش راست بزنید و از روی کروشه بسته رد بشین، ماکرو فراخوانی نمی‌شه. این ویدیو هم نشون می‌ده اوضاع بر وفق مراده.

enter image description here

اگر دوست داشتید در مورد جزییات ماکرو و کداشون در TeXstudio بیشتر بدونید اینجا مثالای زیادی هست که می‌تونید نگاه کنید. شاید بشه از عبارت‌های منظم بهتری که الگوها رو بهتر تشخیص بدن هم استفاده کرد، ولی همین هم در حال حاضر کار ما رو راه می‌اندازه. امیدوارم خود ویرایشگرا یه روزی از عهده‌ی تمام این داستان‌ها بربیان! ولی در هر صورت به نظر نمی‌رسه که کار ساده‌ای باشه چون یه ویرایشگری مثل vscode از سال ۲۰۱۶ هنوز این مساله رو حل نکرده. اگه کنجکاو هستین این issue در github رو بخونید.

پاسخ داده شده شهریور 1, 1402 توسط حسین رهنما (146 امتیاز)
ویرایش شده آبان 11, 1402 توسط حسین رهنما
با سلام
راه حل سوم شما بسیار عالی و کاربردی بود.
نکته‌ این که با راه‌حل سوم(یعنی استفاده از شورت‌کات) مشکل نمایش عبارتی مثل $(.,+,F)$ حل شد. ولی با استفاده از عبارت‌های منظم که توضیح دادین دوباره عبارت بالا به‌صورت $(F,+,.)$ نمایش داده می‌شود.
درود. دقت کنیدکه بایدابتدا عبارت $.$ را تایپ کنید تا ماکرو فراخوانی شود. به نقطه‌ی وسط دو علامت دلار توجه کنید. آن را هم باید تایپ کنید. بعد از فراخوانی ماکرو شما عبارت $$ را در ویرایشگر مشاهده خواهید کرد. حال نشانگر شما در بین دو علامت دلار قرار دارد. می‌توانید شروع به نوشتن معادله کنید. به ویدیویی که در انتهای پست آخر قرار دادم با دقت نگاه کنید.
به نقطه وسط توجه نکرده بودم. درست شد.
...