اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
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 تصویر شمارنده texlive2015 longtable زیرنویس خطا رسم نمودار شماره‌گذاری صفحات پایان نامه دیاگرام فهرست جداول میک‌تک texlive2016 تنظیم جدول kashida texworks caption اندیس lollipop iust-thesis multicol فصل‌نویسی شعر سوال چهارگزینه‌ای بولد تورفتگی آکولاد اعداد فارسی فاصله عمودی xindy چپ‌چینی اوبونتو میکروسافت ورد قاب geometry fancyhdr تک لایو 2015 عنوان بخش به‌روزرسانی بسته aimc46 صفر توخالی فرمول طولانی بیرون‌زدگی texlive کاما وسط‌چینی پوستر شماره گذاری فاصله سطرها نوشتافت شکست خط tex-programming فونت اعداد pgfplots قرآن tabriz-thesis ایتالیک winedt جستجوی معکوس xelatex فلش جایابی تصویر tcolorbox قالب کتاب پاراگراف‌بندی بازیابی اطلاعات هایپرلینک فهرست نمادها شمارنده فصل محیط ریاضی رسم کادر جداکننده جدول طولانی فهرست تصاویر شماره‌گذاری فرمول algorithm2e font فونت بولد proof equation bidipoem eps جدول افقی عکس به‌روزرسانی پانویس چندستونی کمک مالی فاصله خطوط حروف‌چینی شعر زیرشکل minipage قلم پانویس پاراگرافی ltrfootnote پیوست computeautoilg متن فارسی و انگلیسی فرمول چندخطی neveshtuft غلط‌گیری املایی تک‌پارسی پیکان لاتکس tabular baselineskip شماره قسمت قسمت عنوان جدول
7 نفر آنلاین
0 عضو و 7 مهمان در سایت حاضرند
بازدید امروز: 6190
بازدید دیروز: 12293
بازدید کل: 20635827

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

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

بسته 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,380 امتیاز)

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,380 امتیاز)
ویرایش شده بهمن 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,380 امتیاز)
...