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

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

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

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

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

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

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