اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
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 شماره قسمت قسمت عنوان جدول
17 نفر آنلاین
0 عضو و 17 مهمان در سایت حاضرند
بازدید امروز: 3177
بازدید دیروز: 5389
بازدید کل: 25837108

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

+3 رای
1,591 بازدید

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

۱ این پرسش و پاسخ، یک پرسش و پاسخ طولانی به شمار می‌رود و طی زمان تکمیل خواهد شد.

سوال شده آذر 4, 1393 توسط وفا (24,609 امتیاز)

2 پاسخ

+7 رای

بخش نخست

\@bidi@saveprimitive

این دستور دو آرگومان دارد، آرگومان اول یک دستور بدوی است و آرگومان دوم دستوری است که می‌خواهید آن را معادل دستور بدوی (آرگومان اول) کنید. چنانچه دستور بدوی (آرگومان اول) یک دستور بدوی باشد (ماکرو نباشد یا دستور بدوی از نو تعریف نشده باشد) آرگومان دوم معادل، آرگومان اول خواهد شد (بصورت global) در غیر اینصورت (آرگومان اول دستور بدوی نباشد یا دستور بدوی از نو تعریف شده باشد)، آگر معنای آرگومان اول و دوم یکی باشد، کاری انجام نمی‌شود، در غیر اینصورت خطایی دریافت می‌شود که می‌گوید نمی‌توان آرگومان دوم را تعریف کند زیرا آرگومان اول دیگر یک دستور بدوی نیست.

به عنوان مثال:

\documentclass{article}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\@bidi@saveprimitive\hskip\vafaskip
\makeatother
\begin{document}
0\vafaskip2cm1

\end{document}

دستور \vafaskip همانند دستور بدوی \hskip عمل خواهد کرد.

\@iftagsloaded

این دستور سه آرگومان دارد. آرگومان اول نام فایلی است که پسوند clo دارد (احتیاجی به وارد کردن این پسوند نیست و تنها نام فایل کافی است)، آرگومان دوم در صورتی اجرا می‌شود که این فایل فراخوانی شده باشد و اگر این فایل فراخوانی نشده باشد، آرگومان سوم اجرا می‌شود.

\@ifdefinitionfileloaded

این دستور سه آرگومان دارد. آرگومان اول نام فایلی است که پسوند def دارد (احتیاجی به وارد کردن این پسوند نیست و تنها نام فایل کافی است)، آرگومان دوم در صورتی اجرا می‌شود که این فایل فراخوانی شده باشد و اگر این فایل فراخوانی نشده باشد، آرگومان سوم اجرا می‌شود.

\eqnewif

این دستور دو آرگومان دارد که هر دو آرگومان دستورهای شرطی هستند که می‌خواهیم تعریف کنیم به علاوه دو دستور شرطی دقیقاً معادل هم خواهند بود. به عنوان مثال:

\eqnewif{\ifdraft}{\ifDraft}

دو دستور شرطی \ifdraft و \ifDraft را تعریف می‌کند که دقیقاً معادل هم خواهند بود یعنی \drafttrue معادل \Drafttrue خوهد بود و \draftfalse معادل \Draftfalse خواهد بود.

\if@bidi@csdef

این دستور سه آرگومان دارد. آرگومان اول نام یک دستور است بدون \. در صورتی که این دستور تعریف شده باشد آرگومان دوم اجرا می‌شود و اگر این دستور تعریف نشده باشد، آرگومان سوم اجرا می‌شود.

\if@bidi@csundef

این دستور سه آرگومان دارد. آرگومان اول نام یک دستور است بدون \. در صورتی که این دستور تعریف نشده باشد آرگومان دوم اجرا می‌شود و اگر این دستور تعریف شده باشد، آرگومان سوم اجرا می‌شود.

\if@bidi@def

این دستور سه آرگومان دارد. آرگومان اول نام یک دستور است با \. در صورتی که این دستور تعریف شده باشد آرگومان دوم اجرا می‌شود و اگر این دستور تعریف نشده باشد، آرگومان سوم اجرا می‌شود.

\if@bidi@undef

این دستور سه آرگومان دارد. آرگومان اول نام یک دستور است با \. در صورتی که این دستور تعریف نشده باشد آرگومان دوم اجرا می‌شود و اگر این دستور تعریف شده باشد، آرگومان سوم اجرا می‌شود.

\if@bidi@blank

این دستور سه آرگومان دارد. آرگومان اول یک string است. در صورتی که این string خالی باشد (خالی یا دارای فاصله)، آرگومان دوم اجرا می‌شود و در غیر اینصورت آرگومان سوم اجرا می‌شود.

\bidi@notblank

این دستور سه آرگومان دارد. آرگومان اول یک string است. در صورتی که این string خالی نباشد (خالی یا دارای فاصله)، آرگومان دوم اجرا می‌شود و در غیر اینصورت آرگومان سوم اجرا می‌شود.

\if@bidi@defmacro

این دستور سه آرگومان دارد. آرگومان اول نام دستور با \ است. در صورتی که این دستور تعریف شده باشد و یک ماکرو باشد (دستور بدوی نباشد)، آرگومان دوم اجرا می‌شود و در غیر اینصورت آرگومان سوم اجرا می‌شود.

\if@bidi@csmacro

این دستور سه آرگومان دارد. آرگومان اول نام دستور بدون \ است. در صورتی که این دستور تعریف شده باشد و یک ماکرو باشد (دستور بدوی نباشد)، آرگومان دوم اجرا می‌شود و در غیر اینصورت آرگومان سوم اجرا می‌شود.

\if@bidi@defprimitive

این دستور سه آرگومان دارد. آرگومان اول نام دستور با \ است. در صورتی که این دستور، یک دستور بدوی باشد، آرگومان دوم اجرا می‌شود و اگر این دستور یک ماکرو باشد، آرگومان سوم اجرا می‌شود.

\if@bidi@csprimitive

این دستور سه آرگومان دارد. آرگومان اول نام دستور بدون \ است. در صورتی که این دستور، یک دستور بدوی باشد، آرگومان دوم اجرا می‌شود و اگر این دستور یک ماکرو باشد، آرگومان سوم اجرا می‌شود.

\bidi@csdefcs

شکل کلی این دستور به صورت زیر است:

\bidi@csdefcs{<csname>}<arguments>{<csname>}

این دستور همانند دستور بدوی \def است با این تفاوت که آرگومان‌های اول و سوم، نام دستور، بدون \ است. این دستور robust است.

\bidi@csletcs

شکل کلی این دستور به صورت زیر است:

\bidi@csletcs{<csname>}{<csname>}

این دستور همانند دستور بدوی \let است با این تفاوت که هر دو آرگومان نام دستور بدون \ هستند. اگر دستور دوم تعریف نشده باشد، دستور اول نیز تعریف نشده خواهد بود. این دستور robust است و می‌توانید دستور بدوی \global را قبل از آن قرار دهید.

\bidi@cslet

شکل کلی این دستور بصورت زیر است:

\bidi@cslet{<csname>}{<command>}

این دستور، همانند دستور بدوی \let است با این تفاوت که آرگومان اول نام دستور بدون \ است و آرگومان دوم نام دستور با \ است. اگر آرگومان دوم تعریف نشده باشد، آرگومان اول نیز تعریف نشده خواهد بود. این دستور robust است و می‌توان دستور بدوی \global را قبل از آن به کار برد.

\bidi@namelongdef

این دستور نسخه \long دار دستور \@namedef در لاتک است. به عنوان مثال:

\bidi@namelongdef{vafa}{I am Vafa.}

معادل

\long\def\vafa{I am Vafa.}

خواهد بود.

\bidi@ensure@newcommand

این دستور همان \newcommand است با این تفاوت که اگر دستوری که می‌خواهید تعریف کنید، قبلاً تعریف شده باشد، از \renewcommand برای تعریف دوباره استفاده می‌کند و اگر دستور قبلاً تعریف نشده باشد، از \newcommand برای تعریف دستور استفاده می‌کند.

\bidi@ensure@newlength

این دستور یک آرگومان دارد و آن length است. در صورتی که length تعریف شده باشد کاری انجام نمی‌دهد اما اگر length تعریف نشده باشد، معادل \newlength خواهد بود.

\bidi@newrobustcmd و \bidi@newrobustcmd*

این دستور همانند دستور \newcommand کار می‌کند با این تفاوت که دستوری که تعریف می‌کنیم robust خواهد بود.

\bidi@renewrobustcmd و \bidi@renewrobustcmd*

این دستور همانند دستور \renewcommand کار می‌کند با این تفاوت که دستوری که از دوباره تعریف می‌کنیم، robust خواهد بود.

\bidi@providerobustcmd و \bidi@providerobustcmd*

این دستور همانند دستور \providecommand کار می‌کند با این تفاوت که دستوری که تعریف می‌شود robust خواهد بود.

\bidi@csuse

شکل کلی این دستور به صورت زیر است:

\bidi@csuse{<csname>}

این دستور تنها یک آرگومان دارد و آن نام دستور بدون \ است. این دستور همانند دستور @nameuse لاتک است با این تفاوت که اگر دستور تعریف نشده باشد، هیچ خطایی نمی‌گیرید و به یک string خالی گسترش پیدا می‌کند.

\bidi@expandonce

شکل کلی این دستور بصورت زیر است:

\bidi@expandonce<command>

بنابراین این دستور یک آرگومان دارد و آن نام دستور با \ است. کاری که این دستور انجام می‌دهد این است که دستور داده شده را تنها یک بار گسترش می‌دهد و از گسترش بیشتر «متن جایگزین‌شده» دستور جلوگیری می‌کند. این دستور قابل گسترش است.

\bidi@appto

این دستور شکل کلی زیر را دارد:

\bidi@appto<hook>{<code>}

این دستور <code> را به <hook> اضافه می‌کند. اگر <code> کاراکترهای پارامتری داشته باشند (#)، احتیاجی نیست که دوتایی شوند (##). این دستور robust است. یک مثال:

\documentclass{article}
\usepackage{xepersian}
\settextfont{Yas}
\def\vafa{وفا}
\makeatletter
\bidi@appto\vafa{خلیقی}
\makeatother
\begin{document}
\vafa
\end{document}

\bidi@eappto

این دستور شکل کلی زیر را دارد:

\bidi@eappto<hook>{<code>}

این دستور <code> را به <hook> اضافه می‌کند. <code> در زمان تعریف گسترش پیدا می‌کند. تنها <code> جدید گسترش پیدا می‌کند و متن جایگزین فعلی <hook> گسترش پیدا نمی‌کند. این دستور robust است.

پاسخ داده شده آذر 4, 1393 توسط وفا (24,609 امتیاز)
ویرایش شده آذر 7, 1393 توسط وفا
+4 رای

بخش دوم

\bidi@gappto

شکل کلی این دستور بصورت زیر است:

\bidi@gappto<hook>{<code>}

این دستور همانند \bidi@appto عمل می‌کند با این تفاوت که assignment بصورت global خواهد بود. این دستور می‌تواند به جای دستور \g@addto@macro لاتک، استفاده شود.

\bidi@xappto

این دستور شکلی کلی زیر را دارد:

\bidi@xappto<hook>{<code>}

این دستور همانند \bidi@eappto عمل می‌کند با این تفاوت که assignment بصورت global خواهد بود.

\bidi@protected@eappto

این دستور شکل کلی زیر را دارد:

\bidi@protected@eappto<hook>{<code>}

این دستور همانند \bidi@eappto است با این تفاوت که مکانیزم protection لاتک بصورت موقت فعال می‌شود.

\bidi@protected@xappto

این دستور شکل کلی زیر را دارد:

\bidi@protected@xappto<hook>{<code>}

این دستور همانند \bidi@xappto است با این تفاوت که مکانیزم protection لاتک بصورت موقت فعال می‌شود.

\bidi@preto

این دستور شکل کلی زیر را دارد:

\bidi@preto<hook>{<code>}

این دستور همانند دستور \bidi@appto است با این تفاوت که <code> به ابتدای <hook> افزودی می‌شود.

\bidi@epreto

این دستور شکل کلی زیر را دارد:

\bidi@epreto<hook>{<code>}

این دستور همانند دستور \bidi@eappto است با این تفاوت که <code> به ابتدای <hook> افزوده می‌شود.

\bidi@gpreto

این دستور شکل کلی زیر را دارد:

\bidi@gpreto<hook>{<code>}

این دستور همانند دستور \bidi@gappto است با این تفاوت که <code> به ابتدای <hook> افزوده می‌شود.

\bidi@xpreto

این دستور شکل کلی زیر را دارد:

\bidi@xpreto<hook>{<code>}

این دستور همانند دستور \bidi@xappto است با این تفاوت که <code> به ابتدای <hook> افزوده می‌شود.

\bidi@protected@epreto

این دستور شکل کلی زیر را دارد:

\bidi@protected@epreto<hook>{<code>}

این دستور همانند \bidi@epreto است با این تفاوت که مکانیزم protection لاتک بصورت موقت فعال می‌شود.

\bidi@protected@xpreto

این دستور شکل کلی زیر را دارد:

\bidi@protected@xpreto<hook>{<code>}

این دستور همانند \bidi@xpreto است با این تفاوت که مکانیزم protection لاتک بصورت موقت فعال می‌شود.

\bidi@csappto

این دستور شکل کلی زیر را دارد:

\bidi@csappto{<csname>}{<code>}

این دستور همانند \bidi@appto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@cseappto

این دستور شکل کلی زیر را دارد:

\bidi@cseappto{<csname>}{<code>}

این دستور همانند \bidi@eappto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@csgappto

این دستور شکل کلی زیر را دارد:

\bidi@csgappto{<csname>}{<code>}

این دستور همانند \bidi@gappto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@csxappto

این دستور شکل کلی زیر را دارد:

\bidi@csxappto{<csname>}{<code>}

این دستور همانند \bidi@xappto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@protected@cseappto

این دستور شکل کلی زیر را دارد:

\bidi@protected@cseappto<hook>{<code>}

این دستور همانند \bidi@protected@eappto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@protected@csxappto

این دستور شکل کلی زیر را دارد:

\bidi@protected@csxappto<hook>{<code>}

این دستور همانند \bidi@protected@xappto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@cspreto

این دستور شکل کلی زیر را دارد:

\bidi@cspreto{<csname>}{<code>}

این دستور همانند \bidi@preto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@csepreto

این دستور شکل کلی زیر را دارد:

\bidi@csepreto{<csname>}{<code>}

این دستور همانند \bidi@epreto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@csgpreto

این دستور شکل کلی زیر را دارد:

\bidi@csgpreto{<csname>}{<code>}

این دستور همانند \bidi@gpreto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@csxpreto

این دستور شکل کلی زیر را دارد:

\bidi@csxpreto{<csname>}{<code>}

این دستور همانند \bidi@xpreto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@protected@csepreto

این دستور شکل کلی زیر را دارد:

\bidi@protected@csepreto<hook>{<code>}

این دستور همانند \bidi@protected@epreto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

\bidi@protected@csxpreto

این دستور شکل کلی زیر را دارد:

\bidi@protected@csxpreto<hook>{<code>}

این دستور همانند \bidi@protected@xpreto است با این تفاوت که آرگومان اول نام دستور بدون \ است.

پاسخ داده شده آذر 7, 1393 توسط وفا (24,609 امتیاز)
ویرایش شده آذر 7, 1393 توسط وفا
بسمه تعالی
سلام علیکم
آیا منظور از robust همان بدوی بودن است ؟
چقدر دستورات مشابه داره
وفای عزیز
من را به خاطر دانش اندکم ببخشید.
اگر امکان دارد طریقه‌ی استفاده از دستور \if@bidi@defprimitive را با ذکر مثال توضیح بدهید.
راستش اصلا نمی‌دونم کجا باید این دستور را وارد کنم.
در پاسخ به پرسش دیگر شما نحوه استفاده از آن را با یک نمونه نشان دادم.
...