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

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

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

امکانات برنامه‌نویسی برای نویسندگان بسته‌ها/کلاس‌ها

+9 رای
782 بازدید

بسته biditools چه امکاناتی برای نویسندگان بسته‌ها/کلاس‌ها در اختیار قرار می‌دهد؟

به عنوان مثال فرض کنیم که کلاسی به نام myclass.cls نوشته‌ایم:

...
\LoadClass{article}
\RequirePackage{xepersian}
\settextfont{XB Yas}
...

از آن‌جایی که بسته xepersian در این کلاس فراخوانی شده است، اگر کاربر بسته color را فراخوانی کند:

\documentclass{myclass}
\usepackage{color}
\begin{document}
...
\end{document}

به خطا برمی‌خوریم زیرا که بسته color بعد از بسته xepersian فراخوانی شده است. در اینگونه موارد و بصورت کلی اگر بخواهیم کدی را قبل/بعد از یک بسته/کلاس قرار دهیم چه امکاناتی در بسته biditools وجود دارد؟

سوال شده بهمن 27, 1393 توسط وفا (24,609 امتیاز)

2 پاسخ

+11 رای

این جواب ناقص است و در آینده در صورت داشتن زمان کافی تکمیل خواهد شد.

بسته biditools در گذشته هم امکانات بسیار زیادی در اختیار نویسندگان بسته‌ها/کلاس‌ها در اختیار قرار می‌داد که منتها به علت محدودیت زمانی، در راهنما این امکانات توضیح داده نشده‌اند.

به علاوه، همچنین نسخه 16.7 بسته bidi که به تازگی به CTAN داده شده است که در این نسخه امکانات بسیاری به بسته biditools برای نویسندگان بسته‌ها/کلاس‌ها افزوده شده است. این امکانات شامل دستورات زیر است:

\bidi@BeforeFile{<file>}{<instructions>}
\bidi@AfterFile{<file>}{<instructions>}
\bidi@BeforeClass{<class>}{<instructions>}
\bidi@BeforePackage{<package>}{<instructions>}
\bidi@AfterClass{<class>}{<instructions>}
\bidi@AfterClass*{<class>}{<instructions>}
\bidi@AfterClass+{<class>}{<instructions>}
\bidi@AfterClass!{<class>}{<instructions>}
\bidi@AfterAtEndOfClass{<class>}{<instructions>}
\bidi@AfterPackage{<package>}{<instructions>}
\bidi@AfterPackage*{<package>}{<instructions>}
\bidi@AfterPackage+{<package>}{<instructions>}
\bidi@AfterPackage!{<package>}{<instructions>}
\bidi@AfterAtEndOfPackage{<package>}{<instructions>}
\bidi@BeforeClosingMainAux{<instructions>}
\bidi@AfterReadingMainAux{<instructions>}
\bidi@ReplaceInput{<source file name>}{<replacement file name>}
\bidi@ReplaceClass{<source class>}{<replacement package>}
\bidi@ReplacePackage{<source package>}{<replacement package>}
\bidi@UnReplaceInput{<file name>}
\bidi@UnReplacePackage{<package>}
\bidi@UnReplaceClass{<class>}
\bidi@PreventPackageFromLoading[<instead code>]{<package list>}
\bidi@PreventPackageFromLoading*[<instead code>]{<package list>}
\bidi@StorePreventPackageFromLoading{<\command>}
\bidi@ResetPreventPackageFromLoading
\bidi@UnPreventPackageFromLoading{<package list>}
\bidi@UnPreventPackageFromLoading*{<package list>}
\bidi@patch@AfterPackage{<package>}{<patch code>}

به عنوان یک مثال از چگونگی استفاده از این دستورات فرض کنید کلاسی دارید می‌نویسید که در آن کلاس article فراخوانی شده است. در کلاس خود می‌خواهید تعریف دستور \l@section را به طور مثال تغییر دهید اما از آن‌جایی که در فایل .tex بسته xepersian و بنابراین بسته bidi فراخوانی می‌شود، بسته bidi تعریف دستور \l@section شما را به تعری خودش تغییر می‌دهد و تغییرات شما در کلاستان ناپدید می‌شود. برای حل این مشکل چه باید کنید؟

راه‌حل ساده است و آن این است که در کلاس خود تعریف دستور \l@section را به این صورت تغییر دهید:

\bidi@patch@AfterPackage{bidi}{%
\renewcommand*\l@section[2]{%
...
}}

بنابراین کاری که انجام می‌شود این است که دستور \l@section فقط بعد از فراخوانی بسته bidi از نو تعریف می‌شود و بدین ترتیب تغییرات شما دیگر ناپدید (یا بهتر رونویسی) نمی‌شوند.

بدیهی است که این تنها گوشه‌ای از امکانات بسته biditools است و نسخه 16.7 بسته bidi (نسخه 0.4 بسته biditools) امکانات بسیار زیادی را در اختیار نویسندگان بسته‌ها/کلاس‌ها در اختیار قرار می‌دهد و به این ترتیب نویسندگان بسته‌ها/کلاس‌ها آزادی کامل دارند.

پاسخ داده شده بهمن 27, 1393 توسط وفا (24,609 امتیاز)
ویرایش شده بهمن 27, 1393 توسط وفا
+5 رای

یک نکته دیگر (اما در پاسخی جداگانه) که می‌خواستم اضافه کنم این است که با امکانات اضافه شده در بسته biditools می‌توان کل بسته bidi و xepersian را از نو بازنویسی کرد (متأسفانه این کار وقت زیادی می‌]واهد و از آن‌جایی که من دانشجو هستم نمی‌توانم همچین زمانی هزینه کنم) تا یکی از محدودیت‌های مهم بسته xepersian و bidi را از بین برد.

این محدودیت این است که به عنوان یک قانون تا به امروز بسته bidi و xepersian باید آخرین بسته‌ای بود که استفاده می‌کردید و اگر اینگونه نبود خطا می‌گرفتید. این به این خاطر است که بسته bidi و xepersian باید بداند که چه بسته/کلاسی فراخوانی شده است تا در صورت فراخوانی یک بسته/کلاس خاص، تغییرات مناسب در آن کلاس/بسته داده شود.

با وجود امکاناتی که به بسته biditools اضافه شده است می‌توان بسته bidi و xepersian را از نو بازنویسی کرد تا:

  1. محدودیت فراخوانی بسته xepersian یا bidi به عنوان آخرین بسته از بین برود. این به این معنی است که می‌توانید بسته xepersian یا bidi را هر جایی که در Preamble خواستید فراخوانی کنید و حتماً نیازی نیست که آخرین بسته باشد.
  2. خطاهایی که یک بسته بعد از بسته xepersian یا bidi فراخوانی شده باشند، هم حذف می‌شوند.

با وجود امکانات جدید در بسته biditools مهم نیست که یک بسته کجا (قبل از xepersian یا bidi یا بعد از آن) فراخوانی شده باشد چون با وجود امکانات جدید براحتی می‌توان، اگر بسته فراخوانی شده باشد، تغییرات لازم را بده و اگر بسته هنوز فراخوانی نشده است، فعلاً صبر کن و هر زمانی که بسته فراخوانی شد، تغییرات لازم را در آن بده.

جای بسی تأسف است که قبل از نوشتن بسته‌های bidi و xepersian به فکر اضافه کردن این امکانات مفید نیفتادم!

پاسخ داده شده بهمن 28, 1393 توسط وفا (24,609 امتیاز)
...