اولین بار است که به اینجا می‌آیید؟ راهنمای سایت را بخوانید!
0 رای
3.2k بازدید

سلام به همه
من دارم از سبک دانشگاه تبریز استفاده می‌کنم. می‌خوام توی فهرستم شماره فصل‌ها ترتیبی باشه. قبلا توی سبک کتاب (book) از این کد:

\usepackage{fmtcount}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\@chapter}{\addcontentsline{toc}{chapter}
 {\protect\numberline{\thechapter}#1}}{\addcontentsline{toc}{chapter}
{\protect{\numberline{\chaptername~\tartibi{chapter} #1}}}}{}{}
\makeatother

استفاده می‌کردم. حالا باید چه کار کنم؟

فایل(های) پیوست:
فصل پیوست هم دارید؟ شماره پیوست‌ها توی فهرست مطالب باید به چه صورت باشه؟
توسط (6.6k امتیاز)
بانو تاتار، مگر همین کد در پایانامه تبریز کار نمی‌کند؟ در صورتی که کار نمی‌کند، لطفاً یک فایل کمینه قرار دهید.
توسط (25.0k امتیاز)
راستی بسته xepersian بسته bidi را فراخوانی می‌کند و بسته bidi هم بسته‌ای به نام biditools را. بنابراین احتیاجی به استفاده از بسته etoolbox نیست و می‌توانید به جای استفاده از \patchcmd از دستور \bidi@patchcmd استفاده نمایید.
توسط (25.0k امتیاز)
پیوست‌ها به صورت حروف باشن آقای دامن‌افشان.
توسط (48 امتیاز)

1 پاسخ

+3 رای
 
بهترین پاسخ

در این پاسخ فرض می‌کنم که کلاس tabriz-thesis از کلاس report استفاده می‌کند (این در اصل موضوع تغییری اجاد نمی‌کند). اول اینکه همانطور که در نظرم در پایین پرسش شما گفتم احتیاجی به بسته etoolbox نیست. بسته xepersian از بسته bidi استفاده می‌کند و بسته bidi بسته biditools را بصورت خودکار فراخوانی می‌کند. بسته biditools بسیاری امکانات برنامه‌نویسی را در اختیار شما قرار می‌دهد که متأسفانه در راهنما برای آن توضیحی وجود ندارد. همانطور که گفتم به جای دستور \patchcmd از دستور \bidi@patchcmd استفاده می‌کنیم. دستور \bidi@patchcmdی که من قرار است در اینجا استفاده کنم شکل کلی زیر را دارد:

\bidi@patchcmd{command}{search}{replace}{success}{failure}

که آرگومان‌ها آن را با ذکر مثال، توضیح خواهم داد. برای تغییری که شما مدنظر دارید، ما باید تعریف دستور \@chapter را تغییر دهیم. این دستور در فایل report.cls بصورت زیر تعریف شده است:

\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
                         \refstepcounter{chapter}%
                         \typeout{\@chapapp\space\thechapter.}%
                         \addcontentsline{toc}{chapter}%
                                   {\protect\numberline{\thechapter}#1}%
                    \else
                      \addcontentsline{toc}{chapter}{#1}%
                    \fi
                    \chaptermark{#1}%
                    \addtocontents{lof}{\protect\addvspace{10\p@}}%
                    \addtocontents{lot}{\protect\addvspace{10\p@}}%
                    \if@twocolumn
                      \@topnewpage[\@makechapterhead{#2}]%
                    \else
                      \@makechapterhead{#2}%
                      \@afterheading
                    \fi}

برای تغییری که شما مدنظر دارید، ما باید در تعریف دستور \@chapter

\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%

را با

\addcontentsline{toc}{chapter}%
{\protect\numberline{\chaptername~\tartibi{chapter}}#1}%

جایگزین کنیم. یک راه تعریف دوباره دستور \@chapter است که ممکن است خیلی طولانی باشد. بنابراین بسته biditools دستور \bidi@patchcmd را در اختیار شما قرار می‌دهد که در بالا شکل کلی آن ذکر شد. آرگومان اول یا همان command دستوری است که می‌خواهیم تعریفش را عوض کنیم. آرگومان دوم یا serach تکه کدی است در تعریف command که می‌خواهیم دنبالش بگردیم و آن را با آرگومان سوم جایگزین کنیم. آرگومان چهارم در صورتی اجرا خواهد شد که command به درستی از دوباره تعریف شده باشد و آرگومان پنجم در صورتی اجرا خواهد شد که command به درستی از نو تعریف نشده باشد. با همه این توضیحات پاسخ پرسش شما این خواهد بود:

\documentclass{report}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\bidi@patchcmd{\@chapter}{%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
}{%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\chaptername~\tartibi{chapter}}#1}%
}{\typeout{We succeded in redefining \string\@chapter}}
{\typeout{We failed in redefining \string\@chapter}}
\bidi@patchcmd{\l@chapter}{%
\setlength\@tempdima{1.5em}%
 }{%
\setlength\@tempdima{4em}%
}{\typeout{We succeded in redefining \string\l@chapter}}
{\typeout{We failed in redefining \string\l@chapter}}
\makeatother
\begin{document}
\tableofcontents
\chapter{همینجوری}
\end{document}

همانطور که در بالا می‌بینید من تعریف دستور \l@chapter را نیز تغییر داده‌ام تا «فصل اول» با «همینجوری» تداخل نداشته باشد. مقدار \@tempdima برابر با 1.5em بوده است که من آن را به 4em افزایش داده‌ام. در ترمینال و فایل .log متن زیر ظاهر می‌شود:

We succeded in redefining \@chapter
We succeded in redefining \l@chapter

که به ما می‌گوید ماکروهای \@chapter و \l@chapter به درستی تغییر یافته‌اند.


کلاس tabriz-thesis

وقتی در نمونه بالا از کلاس tabriz-thesis استفاده می‌کنیم:

\documentclass{tabriz-thesis}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\bidi@patchcmd{\@chapter}{%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
}{%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\chaptername~\tartibi{chapter}}#1}%
}{\typeout{We succeded in redefining \string\@chapter}}
{\typeout{We failed in redefining \string\@chapter}}
\bidi@patchcmd{\l@chapter}{%
\setlength\@tempdima{1.5em}%
 }{%
\setlength\@tempdima{4em}%
}{\typeout{We succeded in redefining \string\l@chapter}}
{\typeout{We failed in redefining \string\l@chapter}}
\makeatother
\begin{document}
\tableofcontents
\chapter{همینجوری}
\end{document}

در ترمینال و فایل .log پیغام زیر ظاهر می‌شود:

We failed in redefining \@chapter
We succeded in redefining \l@chapter

که گویای این است که دستور \@chapter به درستی تعریف نشده است. مشکل از کجاست؟ کلاس tabriz-thesis از بسته hyperref استفاده می‌کند (بگذریم که این کار اشتباه است و این کلاس انتخاب خودش رو به کاربر تحمیل می‌کنه) و درایور بسته hyperref برای xetex به نام hxetex.def فراخوانی می‌شود. در این فایل تعریف \@chapter تغییر یافته است و به همین خاطر نمونه ما برای کلاس tabriz-thesis کار نمی‌کند. راه‌حل چیست؟ راه‌حل ساده است و آن اینکه از ماکروی معادل \@chapter بسته hyperref به جای \@chapter استفاده کنیم و آن ماکرو \Hy@org@chapter\ است. بنابراین فایل زیر به خوبی کار می‌کند:

\documentclass{tabriz-thesis}
\usepackage{hyperref}
\usepackage{xepersian}
\settextfont{Yas}
\makeatletter
\bidi@patchcmd{\Hy@org@chapter}{%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
}{%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\chaptername~\tartibi{chapter}}#1}%
}{\typeout{We succeded in redefining \string\@chapter}}
{\typeout{We failed in redefining \string\@chapter}}
\bidi@patchcmd{\l@chapter}{%
\setlength\@tempdima{1.5em}%
 }{%
\setlength\@tempdima{4em}%
}{\typeout{We succeded in redefining \string\l@chapter}}
{\typeout{We failed in redefining \string\l@chapter}}
\makeatother
\begin{document}
\tableofcontents
\chapter{همینجوری}
\end{document}

سلام
ببخشید دیر شد. ممنون از جواب کامل و قشنگتون. خیلی دوست داشتم بدونم این کدها چه طوری عمل می‌کنند. چه طوری می‌تونم استفاده از این کدها را یاد بگیرم تا برای کارهام استفاده کنم. کتابی هست؟ بازهم از جواب خیلی قشنگتون  تشکر می‌کنم.
اما این کد روی کلاس tabriz-thesis کار نمی‌کنه.
چون نمی‌دونستم چه طوری باید فایل کمینه بفرستم، سوالم رو ویرایش کردم.
خیلی ممنون
توسط (48 امتیاز)
من پاسخ خودم را ویرایش کردم. انتهای پاسخم رو اگر ببینید در مورد کلاس tabriz-thesis توضیح دادم. منظورتون کدهایی مثل \bidi@patchcmd هست؟ یا \@chapter؟ کدومشون رو می‌خواهید یاد بگیرید؟
توسط (25.0k امتیاز)
خیلی ممنون درست شد. کدهایی مثل \bidi@patchcmd .
توسط (48 امتیاز)
ممکن است بدانید یا ندانید که من مولف بسته زی‌پرشین هستم. همچنین من مولف بسته bidi هستم که بسته biditools هم جزیی از آن است. بنابراین تمام کدها توسط من نوشته شده است و متأسفانه من تنها شخصی هستم که می‌دانم کدها چگونه کار می‌کنند. متأسفانه من کمی تنبل هستم و راهنمایی در این مورد وجود ندارد. اگر دوست داشتید و خواستید راهنمایی در این مورد نوشته شود، می‌توانید به من به آدرس persian-tex@tug.org ایمیل کنید من تمام دستورات را با ایمیل به شما توضیح خواهم داد و شما هم راهنما را بنویسید تا دیگران نیز از آن استفاده کنند.
توسط (25.0k امتیاز)
وااای خدای من! راستی؟
گفتم کسی که این سوالا را جواب میده باید آدمه بزرگی باشه. نمی دونم چرا آدما علمشون که زیادتر میشه اینقدر متواضع میشن.
حتما، فکر خیلی خوبیه. فکر کنم بعد از دفاعم بتونم این کارو بکنم که منم در کار بزرگ شما سهمی داشته باشم.
خیلی ممنون
توسط (48 امتیاز)
من یک پرسش ایجاد کرده‌ام که پاسخ آن به مرور زمان تکمیل می‌شود: http://qa.parsilatex.com/1159/
توسط (25.0k امتیاز)
پرسیدن سوال
وب‌سایت پرسش و پاسخ پارسی‌لاتک جایی برای پرسش و پاسخ درباره سیستم حروف‌چینی لاتک و بسته زی‌پرشین است. در اینجا می‌توانید سوال‌های خود را بپرسید و به سوال‌های دیگران پاسخ دهید.

7.1k پرسش

6.6k پاسخ

23.4k نظر

7.0k کاربر

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

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