سلام، لطفا وارد شوید یا عضو شوید.

نویسنده موضوع: عوض کردن رفتار بخشی از یک کلاس بدون تغییر فایل اصلی آن {حل شد}  (دفعات بازدید: 2918 بار)

آفلاین danialbehzadi

  • Newbie
  • *
  • تشکر
  • -اهدا شده: 0
  • -دریافت شده: 2
  • ارسال: 22
  • دانیال بهزادی
    • ديدن مشخصات
    • صفحه‌ی شخصی
سلام. چه طور می‌شه رفتار یه قسمت از کلاس رو عوض کرد، ولی خود فایل اصلی اون رو تغییر نداد؟
 مثلا من می‌خوام برای یک پروژه این بخش از کلاس ریپورت (report.cls)
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}
\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}
\def\@makechapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright \normalfont
    \ifnum \c@secnumdepth >\m@ne
        \huge\bfseries \@chapapp\space \thechapter
        \par\nobreak
        \vskip 20\p@
    \fi
    \interlinepenalty\@M
    \Huge \bfseries #1\par\nobreak
    \vskip 40\p@
  }}
رو با چینین چیزی عوض کنم
\newcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
                    \thispagestyle{plain}%
                    \global\@topnum\z@
                    \@afterindentfalse
                    \secdef\@chapter\@schapter}
\def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
                         \refstepcounter{chapter}%
                         \typeout{\@chapapp\space\thechapter.}%
                         \addcontentsline{toc}{chapter}%
                                   {\@chapapp\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}
\def\@makechapterhead#1{%
  \thispagestyle{plain}%
  \if@twocolumn
    \onecolumn
    \@tempswatrue
  \else
    \@tempswafalse
  \fi
  \null\vfil
  {\centering
     \interlinepenalty \@M
     \normalfont
     \ifnum \c@secnumdepth >-2\relax
       \huge\bfseries \chaptername\nobreakspace\thechapter
       \par
       \vskip 20\p@
     \fi
     \Huge \bfseries #1\par}
     \newpage
     \vspace*{50\p@}%
     \par}
طوری که به بقیه‌ی پروژه‌ها دست نخوره.
« آخرين ويرايش: آوریل 03, 2012, 01:49:23 am توسط danialbehzadi »
سیستم‌عامل: اوبونتو گنو/لینوکس ۱۳.۰۴ * توزیع: تک‌لایو ۲۰۱۲

آفلاین وحید دامن‌افشان

  • Administrator
  • Hero Member
  • *****
  • تشکر
  • -اهدا شده: 452
  • -دریافت شده: 718
  • ارسال: 2,107
    • ديدن مشخصات
    • http://www.damanafshan.ir
**اگه تغییراتی  که می‌خواین توی یه کلاس انجام بدین، کم باشه، می‌تونین این تغییرات رو توی  preamble  فایل اصلی‌تون قرار بدین. در ضمن، اگه حفظ نظم فایل اصلی‌تون براتون اهمیت داره، می‌تونین مثل قالب پایان‌نامه من، یه فایل تک مثل commands درست کنین و این تغییرات رو توش قرار بدین و بعدش اونو با دستور input توی فایل اصلی‌تون فراخوانی کنین. نکته‌ای که باید بهش دقت کنین اینه که اگه دستوری توی یه کلاس با \newcommad شروع شده، هنگام تغییر باید اونو به \renewcommand تغییر بدین چون در غیر این صورت، با خطای «این دستور از قبل تعریف شده است» مواجه می‌شین. اما  دستوراتی که با \def شروع می‌شن، اینطور نیستن. چون اگه دستوری رو با \def تعریف کنین، TeX بدون توجه به اینکه آیا این دستور از قبل وجود داشته یا نه، تعریف شمارو جایگزین تعریف قبل می‌کنه. به عبارت دیگه، تک دیگه اهمیت نمی‌ده که آیا دستور شما از قبل تعریف شده یا نه و بنابراین دیگه با خطای بالا مواجه نمی‌شین.
نکته دیگه‌ای که باید بهش توجه کنین اینه که اگه می‌خواین دستوراتی که داخلشون از کاراکتر @ استفاده شده، رو تغییر بدین، باید اونا رو بین دو دستور
‎\makeatletter‎
...
‎‎\makeatother‎‎
قرار بدین. مثلاً در مورد تغییرات شما، چون از کاراکتر @ استفاده شده، باید اولش دستور ‎\makeatletter‎ و آخرش، دستور ‎‎\makeatother‎‎ رو قرار بدین و حالا همه رو قبل از ‎\begin{document}‎ قرار بدین. در ضمن یادتون نره که دستور \newcommand رو هم به  \renewcommand تغییر بدین.

** اما اگه تغییراتی که می‌خواین توی یه کلاس انجام بدین، زیاد هستش (مثلاً ۵۰٪ به بالا)، به نظر من بهتره که قبل از هر چی، فایل کلاس رو داخل پوشه‌ای که فایل اصلیتون قرار داره، کپی کنی و بعدش تغییرات رو توی همین فایل انجام بدی و بعدش (بخاطر رعایت کردن قوانین مجوز LPPL) اسمشو مثلاً به myreport تغییر بدین و بعدش توی فایل اصلی بجای دستور ‎\documentclass{report}‎ از دستور ‎\documentclass{myreport}‎ استفاده کنین.
نکته دیگه‌ای که بد نیست بدونین اینه که زمانی که از کلاس یا بسته خاصی توی فایل اصلی‌تون استفاده می‌کنین، TeX ابتدا توی همون پوشه‌ خودتون دنبال فایل اون کلاس یا بسته می‌گرده و اگه پیداش نکنه، میره سراغ پوشه‌ای که توزیع تک‌تون اونجا نصب شده. ضمناً همیشه اولویت با پوشه خودتون هستش. یعنی اگه  توی پوشه خودتون و توی پوشه توزیع‌ تک‌تون، یه  فایل همنام با پسوند sty وجود داشته باشه، TeX فقط محتویات فایلی که توی پوشه خودتون هستش رو می‌خونه و کاری با فایل داخل توزیع تک نداره.
امیدوارم که جواب سوال‌تون رو گرفته باشین‎.‎

آفلاین danialbehzadi

  • Newbie
  • *
  • تشکر
  • -اهدا شده: 0
  • -دریافت شده: 2
  • ارسال: 22
  • دانیال بهزادی
    • ديدن مشخصات
    • صفحه‌ی شخصی
بله. خیلی ممنون. خودم هم تو این فاصله یه کارهایی کردم. ولی مشکل اصلی همون makeatletter\ و makeatother\ بودن که خوشبختانه درست شد.

 

استفاده از یک کلاس بدون کپی کردن آن در شاخه xepersian

نویسنده وحید دامن‌افشانانجمن زی‌تک

پاسخ ها: 6
مشاهده: 6022
آخرين ارسال نوامبر 14, 2009, 11:46:30 am
توسط vafa
رنگی کردن حرکت های کلمات بدون تغییر رنگ حروف

نویسنده A.Madanipourانجمن حروف‌چینی مستندات

پاسخ ها: 0
مشاهده: 2269
آخرين ارسال آوریل 17, 2014, 07:24:20 pm
توسط A.Madanipour
سفارشی کردن و تغییر دادن شکل صفحات

نویسنده آسیهانجمن طراحی صفحه

پاسخ ها: 20
مشاهده: 13519
آخرين ارسال اكتبر 01, 2010, 01:56:09 pm
توسط vafa
ضمیمه کردن فایل های بزرگتر از ۲۵۰ کیلو بایت

نویسنده وحید دامن‌افشانانجمن عمومی

پاسخ ها: 1
مشاهده: 3654
آخرين ارسال اكتبر 09, 2009, 08:51:42 pm
توسط محمود امین‌طوسی
تغییر کردن حاشیه‌ها هنگام استفاده از محیط thebibliography

نویسنده وحید دامن‌افشانانجمن باگ‌های نسخه ۱.۰.۴

پاسخ ها: 36
مشاهده: 17626
آخرين ارسال آوریل 09, 2010, 07:25:58 am
توسط vafa
افزایش حداکثر اندازه مجاز فایل برای ضمیمه کردن در پست‌های تالار گفتگو

نویسنده هادی صفی‌اقدمانجمن عمومی

پاسخ ها: 1
مشاهده: 2233
آخرين ارسال ژوئیه 30, 2010, 10:30:29 am
توسط محمود امین‌طوسی
اضافه کردن ورودی «کلمات کلیدی» و «ایمیل» به کلاس article

نویسنده diyanatانجمن عمومی

پاسخ ها: 6
مشاهده: 6090
آخرين ارسال ژوئیه 21, 2010, 04:32:18 pm
توسط وحید دامن‌افشان
تغییر در فایل نمونه پایان نامه

نویسنده shfprانجمن زی‌تک

پاسخ ها: 7
مشاهده: 7276
آخرين ارسال ژوئیه 14, 2011, 12:22:46 pm
توسط vafa