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