در مورد سوالت: چیزی به نام محیط @twocolumnfalse
وجود نداره و بنابراین تعریف شما استباه است. \if@twocolumn
یک دستور شرطی هست که مشخص میکنه آیا متن باید بصورت دوستونه حروفچینی باشه یا بصورت تکچینی؟ من واقعاً نمیدونم هدف از تعریف همچین محیطی چیه ولی چیزی مانند این باید تعریف کنی:
\newenvironment{myonecolumn}{\@twocolumnfalse}{}
در مورد کلاسی که نوشتی چند پیشنهاد دارم:
۱) آیا واقعاً وجود این همه بسته لازم است؟ بهتر نیست کلاس دارای حداقل بستهها باشد تا زمان پردازش کوتاهتر و سریعتر باشد؟
۲) همه \usepackage
ها را به \RequirePackage
تغییر بده.
۳) فراخوانی زیپرشین در کلاس اشتباه است. اگر فردی بستهای را فراخوانی کرد که نباید بعد از زیپرشین فراخوانی بشود، آنوقت چه باید کرد؟ دستکاری کلاس توسط کاربر مناسب نیست. اگر واقعاً میخواهی بسته زیپرشین را در کلاس فراخوانی کنی، از امکاناتی که بسته biditools
در اختیارت قرار میدهد، استفاده کن تا زیپرشین آخرین بستهای باشد که فراخوانی میشود (این کار بصورت خودکار توسط خود کلاس انجام شود).
۴) تعریف زیر لازم نیست چون زیپرشین و bidi
این کار خودکار انجام میدهند:
\makeatletter
\let\orig@lr\lr
\renewcommand*{\lr}[1]{\texorpdfstring{\orig@lr{#1}}{#1}}
\makeatother
۵) در کلاس احتیاجی به دستورات \makeatletter
و \makeatother
نیست. این دو دستور بصورت خودکار توسط لاتک در ابتدا و انتهای کلاس (به ترتیب) قرار میگیرند.
۶) abstract
دستور نیست بنابراین کد زیر اشتباه است:
\renewcommand\abstract{}
به جای آن تعریف زیر بهتر است:
\renewenvironment{abstract}{%
\ClassError{CSICC2016}{You can not use abstract environment in this class}{}
}{}
۷) من تنها تغییری که در دستور \@maketitle
میبینم این است که شما دستور \NazaninBold
را اضافه کردهای. اولاّ این تعریف اشتباه است چون از کلاس article
برداشته شده است و از فایل article-bidi-xetex.def
برداشته نشده است بنابراین تغییرات بسته bidi
پاک شدهاند. و بعد اینکه برای تغییر یک یا دو دستور در یک دستور لازم نیست کل دستور را از نو تعریف کنی. میتونی از دستور \bidi@patchcmd
که توسط بسته biditools
تعریف شده است، استفاده کنی.
۸) تعریف زیر دوباره بهترین حالت ممکن نیست:
\let\oldabstract\abstract
\let\endoldabstract\endabstract
\renewenvironment{abstract}{%
\oldabstract%
\AbstractBold
\noindent
\textbf{\Large چکیده}%
}
{\endoldabstract%
}
برای قرار دادن چیزی در آغاز یک محیط میتوانی از دستور \bidi@AtBeginEnvironment
که توسط بسته biditools
تعریف شده است، استفاده کنی.
۹) مورد ۸ در مورد تعریف figure
نیز صدق میکند.
۱۰) موذد ۸ در مورد بازتعریف proof
نیز صدق میکند.
۱۱) مورد ۸ در مورد بازتعریف محیط bibliography
نیز صدق میکند.
اگر طریقه انجام هر کدام از این موارد را نمیدانی، میتوانی برای هر کدام یک پرسش جداگانه ایجاد کنی.