این جواب ناقص است و در آینده در صورت داشتن زمان کافی تکمیل خواهد شد.
بسته 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
) امکانات بسیار زیادی را در اختیار نویسندگان بستهها/کلاسها در اختیار قرار میدهد و به این ترتیب نویسندگان بستهها/کلاسها آزادی کامل دارند.