%% Date: 11 May 2019
%

%%% ================================================================================================== اضافه کردن یکسری بسته‌های پایه
%% در مورد تقدم و تاخر وارد کردن بسته ها تنها باید به چند نکته دقت کرد:
%% الف) بسته xepersian حتما حتما باید آخرین بسته ای باشد که فراخوانی می شود، به استثنای بسته  های bidi
%% ب) بسته hyperref جزو آخرین بسته هایی باید باشد که فراخوانی می شود.
%% ج) بسته glossaries حتما باید بعد از hyperref فراخوانی شود. 
%% د) بسته listings باید حتما قبل از  hyperref فراخوانی شود. 

\usepackage{etex}
\reserveinserts{28}

%%% تمام بسته های مورد نیاز برای  کارهای ریاضیاتی به صورت کامل اینجا آورده شده است در صورتی که بخواهید از بسته های دیگر استفاده کنید بهتر است که آن‌ها را به گونه ای انتخاب کنید که با این بسته ها تداخل نداشته باشد. به نظر من استفاده از همین بسته ها کافی است.
%%% amsthm: It introduces the proof environment and the \theoremstyle command.
%%%  amssymb: It adds new symbols in to be used in math mode.
%%% amsmath: It contains the advanced math extensions for LaTeX. The complete documentation should be in your LaTeX distribution; the file is called amsdoc, and can be dvi or pdf.

\usepackage{amsthm,amssymb,amsmath}
\usepackage{thmtools}
\usepackage{dsfont}
\usepackage{fancyhdr}

%%% بسته‌ای برای فعال‌سازی پارامتر H در وارد کردن شکل. این پارامتر شکل را در همان‌جایی که دقیقا فراخوانی کرده‌ایم، وارد می‌کند.
\usepackage{float}

%%% برای تنظیم حاشیه صفحات
\usepackage{geometry}

% بسته ای برای تنظیم فونت، اندازه و نحوه نمایش caption
\usepackage{caption}
\usepackage{subcaption}

%%% بسته‌ای برای تنظیم حاشیه و کادر دور فرمول و ... 
\usepackage{empheq,fancybox}

%%% برای رنگی کردن متن و استفاده از رنگ در متن این دو بسته مورد نیاز است.
\usepackage[usenames,dvipsnames]{color,xcolor}

%%% It extends the possibility of LaTeX to handle tables, fixing some bugs and adding new features. Using it, you can create very complicated and customized tables. For more information, see the Tables section.
\usepackage{array}

%%% بسته ای برای استفاده از اشکال برای آیتم‌ها
\usepackage{pifont}

\usepackage{booktabs}
\setlength{\heavyrulewidth}{1.5pt}
\setlength{\abovetopsep}{4pt}

%%% بسته‌ای برای رسم اشکال و تصاویر با Latex
\usepackage{tikz}
\usetikzlibrary{calc}

\RequirePackage[framemethod=TikZ]{mdframed}

\usepackage[explicit]{titlesec}

%% Line spacing
%%To change line spacing in the whole document use the command \linespread covered in Text Formatting.
% %To change line spacing in specific environments use setspace
\usepackage{setspace}

%%% بسته ای برای وارد کردن الگوریتم در متن
%\usepackage{algorithm}
%\usepackage{algorithmicx}
%\usepackage{algpseudocode}


%%% در این قالب از بسته graphx برای انجام کارهای گرافیکی استفاده می‌شود. این بسته برای اضافه کردن تصویرها به متن استفاده شده است.
\usepackage{graphicx}

%%% دوبسته برای اضافه کردن دستورات if و else به برنامه.
\usepackage{xparse,ifthen}

\usepackage{colortbl}

%%% بسته ای برای وارد کردن کدهای برنامه نویسی (MATLAB، JAVA و ...) در متن. بسته listings باید قبل از hyperref باشد و گرنه با خطا مواجه خواهیم شد. برای مطالب بیشتر در مورد نحوه کارکرد این بسته سایت زیر را مشاهده کنید.
%%% http://www.parsilatex.com/mediawiki/index.php?title=%D8%B1%D8%A7%D9%87%D9%86%D9%85%D8%A7%DB%8C_%D9%88%D8%A7%D8%B1%D8%AF_%DA%A9%D8%B1%D8%AF%D9%86_%DA%A9%D8%AF_%D8%AF%D8%B1_%D9%85%D8%AA%D9%86
\usepackage{listings}

\usepackage{makeidx}
\makeindex

\usepackage{etoolbox}

%%% بسته ای برای رنگی کردن لینک ها و فعال سازی لینک ها در یک نوشتار، بسته hyperref باید جزو آخرین بسته‌هایی باشد که فراخوانی می‌شود. 
\usepackage{hyperref}


%%% بسته‌ای برای وارد کردن واژه نامه در متن، این بسته باید بعد از hyperref حتما صدا زده شود. 
\usepackage[xindy,acronym,nonumberlist=true]{glossaries}
%%%زی‌پرشین (به انگلیسی: XePersian) یک بسته حروف‌چینی رایگان و متن‌باز برای نگارش مستندات پارسی/انگلیسی با زی‌لاتک است.
%%% در واقع، زی‌پرشین، کمک می‌کند تا به آسانی، مستندات را به پارسی، حروف‌چینی کرد. این بسته را وفا خلیقی نوشته است،
%%% و به طور منظم، آن را بروز‌رسانی کرده و باگ‌های آن را رفع می‌کند.
%%% نکته مهم این جا است که بسته Xepersian برای پشتیبانی از زبان فارسی آورده شده است، و 
%%% می بایست آخرین بسته ای باشد که شما وارد می کنید، دقت کنید: آخرین بسته 
\usepackage[extrafootnotefeatures]{xepersian}

\input{Boostan-BasicCommand}

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 
%%%==================== تنظیمات بسته geometry
%%% تنظیمات مربوط به حاشیه صفحه
\geometry{a4paper,top=30mm, bottom=20mm, right=30mm,left=20mm}
% %%% در Latex انواع مختلفی از اندازه‌ها برای ابعاد کاغذ وجود دارد. گرچه شما می‌توانید به دلخواه ابعاد مختلفی به کاغذ بدهید. 
%%%%a0paper, a1paper, a2paper, a3paper, a4paper, a5paper, a6paper,b0paper, b1paper, b2paper, b3paper, b4paper, b5paper, b6paper, c0paper, c1paper, c2paper, c3paper, c4paper, c5paper, c6paper, b0j, b1j, b2j, b3j, b4j, b5j, b6j, ansiapaper, ansibpaper, ansicpaper, ansidpaper, ansiepaper, letterpaper, executivepaper, legalpaper

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 
%%==================== تنظیمات hyperref

%%% برای وارد کردن کلمه (بخش) در فهرست مطالب بسته hyperref برای حالت فارسی یک مشکل دارد. بدین منظور این 
%%% مشکل را به صورت دستی حل شده است. برای این که رنگ keywordstyle که تعیین کننده رنگ کل قسمت فهرست مطالب
%%% نیز هست یکسان در آید یک پارامتر رنگ برای keywordstyle این جا تعریف می‌کنیم، و سپس از آن هم در تنظمیات hypperref 
%%% و هم در اون کدهایی که به صورت دستی وارد شده است، استفاده می‌شود.  مطالب بیشتر در مورد این بسته را در سایت زیر مطالعه کنید.
%%% http://en.wikibooks.org/wiki/LaTeX/Hyperlinks

%% در این قسمت تنظیمات بسته hyperref را قرار می دهیم.
%% این تنظیمات شامل موارد زیر است:

\hypersetup{
	pdfmenubar=false,			% show or hide Acrobat’s menu
	pdftoolbar=true,			%show or hide Acrobat’s toolbar
%% موقعی که فایل پی دی اف خروجی را باز می کنید صفحه به صورت عریض و بزرگ باز می شود.
	pdfstartview=FitH, 
	%% مواردی که برای فعال سازی این که شماره اشکال را به صورت ارجاعی نشان دهد
	%hyperfigures=true,
	%% به جای استفاده از مربع قرمز دور موارد ارجاعی از لینک های رنگی استفاده کند.
	colorlinks=true, 
	%% رنگ برخی از لینک ها در زیر تعریف شده است. 
	linkcolor=blue, 
	anchorcolor=green, 
	citecolor=magenta, 
	urlcolor=cyan, 
	filecolor=magenta, 
	bookmarkstype=toc,
	unicode = true			%allows to use characters of non-Latin based languages in Acrobat’s bookmarks
	%bookmarksopen = true,
	%bookmarksopenlevel = 1
	%%% اگر این option را true‌ بکنیم، آن‌گاه در کنار bookmark شماره فصل و بخش و زیربخش نیز می آید. مثلا می‌نویسد: ۱.۲ طراحی شبکه
	%bookmarksnumbered = true,
	%hidelinks			%hide links (removing color and border)
} % M



%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%%==================== تنظیمات algorithm و algorithmic
%\floatname{algorithm}{الگوریتم}

%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 
%% تنظیم فونت. 
%%برای دانستن اطلاعات بیشتر در مورد تنظیم فونت به لینک زیر مراجعه کنید.
%%http://www.parsilatex.com/mediawiki/index.php?title=%D9%81%D9%88%D9%86%D8%AA_%D8%AF%D8%B1_xepersian
%% دقت شود که در این استایل از فونت های زیر استفاده می‌شود، بدین‌سان لازم است فونت هایی که فعال هستند (comment نیستند) توسط کاربر در سیستم عامل نصب شود.
%%سعی شده است از فونت های استاندارد IR‌ که حاصل کار شورای عالی اطلاع رسانی هست، استفاده شود، کاربران می‌توانند فونت های یاد شده را از لینک زیر دانلود کنند.
%% http://www.scict.ir/portal/Home/Default.aspx?CategoryID=b50ee619-ce53-4c25-bf53-b0f0332c1777

%% تعریف یک دستور به عنوان فونت پیش فرض
\newcommand{\defaultFont}{
	%%  با دستور زیر می توانید فونتی مخصوص عبارات فارسی تعیین کنید:
	\settextfont[Scale=1.3]{IRNazanin}
	%% شما با دستور زیر بعد از فراخوانی بسته xepersian می توانید فونت انگلیسی را تعیین کنید
	%% دقت کنید که عبارات انگلیسی شما باید در دستور \lr{} قرار گیرد تا xepersian بتواند بفمهد که این عبارات انگلیسی است
	\setlatintextfont[Scale=1]{Times New Roman}
	%% تعریف برای فونت اعداد و ارقام
	%\setdigitfont[Scale=1.1]{XB Zar}
} % M

\defaultFont

%% توسط دستورات defpersianfont و deflatinfont به ترتیب می توان یکسری فونت فارسی و انگلیسی دیگر تعریف کرد که در جاهای دیگر متن بتوان از آن استفاده کرد. برای استفاده کافی است که عبارتی که می خواهیم فونت آن عوض شود را به صورت زیر به عنوان نمونه بنویسیم.
%% \versionfont{این یک مثال است. }
%%% فونت عنوان گزارش
\defpersianfont\titlefont[Scale=2.4]{IRTitr}
\defpersianfont\logofontR[Scale=1.2]{IRZar}
\defpersianfont\typefontR[Scale=1.8]{IRZar}
\defpersianfont\titlefontR[Scale=2]{IRTitr}
\defpersianfont\datafontR[Scale=1.4]{B Zar}
\defpersianfont\proposalFont[Scale=1]{IRTitr}
\defpersianfont\InstituteFont[Scale=.8]{XM Traffic}
\defpersianfont\godFont[Scale=.9]{XM Traffic}
\defpersianfont\nastaliq[Scale=2]{IranNastaliq}

%%  با استفاده از این دستور می‌توان فونت و فارسی و یا انگلیسی بودن اعداد در فرمول‌ها را به حالت اولیه (یعنی پیش‌فرض لاتک) برگرداند.
\DefaultMathsDigits

%% نحوه تغییر اندازه فونت عبارات ریاضی و فرمول‌ها. این کار توسط دستور زیر انجام می‌شود. 
%%\DeclareMathSizes{textsize}{mathsize}{scriptsize}{scriptscriptsize}
%% گزینه اول: این برای چه دسته فونتی است. پیش فرض استایل ما فونت 10pt است. 
%% گزینه دوم: اندازه فونت توابع و موجودات ریاضی درون متن.
%% گزینه سوم: برای اسکریپت ها، اندازه زیرنویس و بالانویس.
%% گزینه چهارم: برای زیرنویس زیرنویس.

%% در دستورات زیر ما برای سه حالت، اندازه‌های مورد نظر را تعریف کرده ایم. 
%%\DeclareMathSizes{10}{11}{9}{8}   % For size 10 text
%%\DeclareMathSizes{11}{12}{11}{10}   % For size 11 text
%%\DeclareMathSizes{12}{13}{12}{11}  % For size 12 text

%%% =========================================================================================================



%% فایل  Environments  در برگیرنده تعریف یکسری استایل برای فصل‌ها است. 
%\input{Boostan-ChapterStyle}



%%% تعریف یکسری استایل برای صفحه شروع 
\input{Boostan-TitleStyle}

\input{Boostan-Environments}

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%%% تنظیم فاصله خطوط در متن اصلی
\newlength{\baselineskipVar}
\setlength{\baselineskipVar}{1.1cm}

%% تنظیم فاصله خطوط در فهرست‌ها
\newlength{\listlineskipVar}
\setlength{\listlineskipVar}{0.9cm}
%%============================ پاورقی
%% این دستو موجب می‌شود که پاورقی شما به صورت دو ستونه خورده شود.
\twocolumnfootnotes
%% تنظیم‌های مربوط به پاورقی: فاصله پاورقی با متن + فاصله بین خطوط در پاورقی
%\setlength{\footnotesep}{0.6cm}
%\setlength{\skip\footins}{2cm}



%%\part{part}	     				        -1	not in letters
%%\chapter{chapter}		 	                   0	only books and reports
%%\section{section}		 	                   1	not in letters
%%\subsection{subsection}		         2	not in letters
%%\subsubsection{subsubsection}	         3	not in letters
%%\paragraph{paragraph}		                   4	not in letters
%%\subparagraph{subparagraph}	         5	not in letters

%% این دستور تعیین می‌کند که در متن تا چه عمقی شماره‌گذاری انجام شود. 
\setcounter{secnumdepth}{3}

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
%% باز تعریف محیط شکل

\makeatletter
\renewenvironment{figure}[1][]{
%% تنظیم کننده فاصله بین خطوط در این قسمت
	\baselineskip = .8cm
	 \ifthenelse{\equal{#1}{}}{
		   \@float{figure}
	 }{%%
		   \@float{figure}[#1]
	 }%%
%% این دستور centering در این قسمت موجب می‌شود که عکس شما در وسط متن قرار گیرد. 
	 \centering
}{%
	 \end@float
}%

%% تغییر اندازه فاصله بین خطوط در محیط caption برای figure. برای اضافه کردن این دستور نیاز به وارد کردن بسته caption هست. 
\captionsetup*[figure]{font={stretch=1.7,small}} 

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 
%%============================ تنظیمات مربوط به فونت و اندازه جداول
%% بازنویسی محیط جدول
\makeatletter
\renewenvironment{table}[1][]{
	\ifthenelse{\equal{#1}{}}{\@float{table}}{\@float{table}[#1]}
	\centering
}{%
	\end@float
}%
\makeatother
	
%% بازنویسی محیط tabular به منظور تنظیم فونت‌های جدول
\let\oldtabular\tabular
\let\endoldtabular\endtabular
\renewenvironment{tabular}{
	\bgroup
	\settextfont[Scale=1.25]{IRNazanin} 
	\setlatintextfont[Scale=1]{Linux Libertine}
	\oldtabular
}{%
	\endoldtabular 
	\egroup
}%

%% تنظیم کننده فاصله بین خطوط (ردیف‌ها) در یک جدول
\renewcommand{\arraystretch}{1.3}
%% تنظیم کننده ضخامت خطوط جدول
%%\renewcommand{\arrayrulewidth}{.55pt}
%% تنظیم فاصله بین خطوط دو خطه (||) و یا (حالت افقی ||)
%%\renewcommand{\doublerulesep}{1pt}

%% تغییر اندازه فاصله بین خطوط در محیط caption برای table. برای اضافه کردن این دستور نیاز به وارد کردن بسته caption هست. 
\captionsetup*[table]{font={stretch=1.7,small}} 

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
%% تنظیمات مربوط به enumerate و itemize
%\setlist[enumerate]{itemsep=0mm}
%\setlist[itemize]{itemsep=0mm}

\makeatletter
\bidi@patchcmd{\list}{\parskip\parsep}{\parskip-3pt}{\typeout{Suceeded}}{\typeout{Failed}}
\makeatother

\newcommand{\BaseLineSpreadFA}{2}
\linespread{\BaseLineSpreadFA}

\newcommand{\BaseLineSpreadEN}{1.9}
\makeatletter
\bidi@AtBeginEnvironment{latin}{\linespread{1.7}}
\makeatother


%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

%% باز تعریف محیط document، هر دستوری که می خواهید در ابتدای برنامه اجرا شود را در این قسمت بنویسید.

%% بازنویسی محیط \begin{document}
\let\olddocument\document
\let\endolddocument\enddocument

\makeatletter
\renewenvironment{document}{
	\olddocument
	%% تنظیم استایل سرفصل
	\pagestyle{plain}
	\pagenumbering{arabic}
}{%
	\endolddocument
}%
\makeatother

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 


%% محیطی برای قرار دادن abstract در گزارش و یا  در ابتدای هر فصل. در صورت استفاده از این محیط، متون داخل آن با فونتی متفاوت با فونت متن نوشته شده و در ابتدای متن نیز یک کلمه چکیده اضافه می شود. 
\renewenvironment{abstract}{%
	\settextfont[Scale=1.2]{IRNazanin} 
	\setlatintextfont[Scale=1]{Linux Libertine}
}{%
	\clearpage
} % M

%% این دستور تعیین می‌کند که چه تا چه عمقی شماره‌گذاری شود. در خود متن نه در فهرست مطالب دقت کنید که برای تعیین این که در فهرست مطالب تا چه عمقی شماره گذاری صورت بگیرد باید از دستور
%% \setcounter{tocdepth}{....}
%% استفاده کرد که در ادامه می آید. 

\setcounter{tocdepth}{2}
%%  تنظیمات مربوط به فهرست مطالب، بازنویسی محیط فهرست مطالب برای تعیین فاصله خطوط، قرار دادن در bookmark ها
\let\Oldtableofcontents\tableofcontents
\renewcommand{\tableofcontents}{
	\Oldtableofcontents\clearpage
}%

% با این دستور در فهرست مطالب در هنگام آوردن شماره و عنوان فصل در ابتدای آن یک کلمه فصل می گذارد یعنی مثلا می نویسد: (فصل اول: مقدمه ای بر شبکه ..................... ۱)


%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%%=========================== تنظمیات محیط فهرست اشکال

%% این دستورات موجب می‌شود که یک تصویر بند انگشتی در فهرست مطالب ظاهر شود. برای این کار می‌بایست در قسمت caption به صورت زیر فایل تصویر نیز وارد شود. 
%% ٍExample: \caption{\lofimage{/Introduction/Person/Shannon} \lr{Claude Shannon}}

\newlength{\lofthumbsize}
\setlength{\lofthumbsize}{2em}

\newif\iflofimage
\DeclareRobustCommand*{\lofimage}[2][]{%
  \iflofimage
    $\vcenter to \lofthumbsize{\vss%
      \hbox to \lofthumbsize{\hss\includegraphics[{width=\lofthumbsize,height=\lofthumbsize,keepaspectratio=true,#1}]{#2}\hss}%
    \vss}$%
    \quad
  \fi
  \ignorespaces
}


%% در دستورات زیر محیط فهرست اشکال باز تعریف شده و اولا این محیط به bookmark اضافه شده و ثانیا مشکل صفحات اضافی حل شده است. ثالثا فاصله خطوط برای زیبایی در این 
%% محیط اندکی کم شده است، ولی دوباره بعد از آوردن این محیط به حالت اولیه برگشته است. در ضمن از شماره گذاری حرفی برای این محیط استفاده شده است. 
\let\Oldlistoffigures\listoffigures
\renewcommand{\listoffigures}{
	\cleardoublepage
	\phantomsection
	\addcontentsline{toc}{chapter}{فهرست اشکال}
	\lofimagetrue
	\Oldlistoffigures\clearpage
	\lofimagefalse
}%

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%% در دستورات زیر محیط فهرست جداول باز تعریف شده و اولا این محیط به bookmark اضافه شده و ثانیا مشکل صفحات اضافی حل شده است. ثالثا فاصله خطوط برای زیبایی در این 
%% محیط اندکی کم شده است، ولی دوباره بعد از آوردن این محیط به حالت اولیه برگشته است. در ضمن از شماره گذاری حرفی برای این محیط استفاده شده است. 
\let\Oldlistoftables\listoftables
\renewcommand{\listoftables}{
	\cleardoublepage
	\phantomsection
	\addcontentsline{toc}{chapter}{فهرست جداول}
	\Oldlistoftables\clearpage
}%

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%% دستورات لازم برای واژه‌نامه‌ها، فهرست اختصارات و فهرست نمادها در  فایل (Gloss) آورده شده است.
\input{Boostan-Gloss}

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%%============================ دستور برای قرار دادن فهرست اختصارات 
\newcommand{\printabbreviation}{
	\cleardoublepage
	\phantomsection
	\linespread{1.1}
%% با این دستور عنوان فهرست اختصارات به فهرست مطالب اضافه می‌شود. 
	\addcontentsline{toc}{chapter}{فهرست اختصارات}
	\setglossarystyle{myAbbrlist}
	
	\begin{LTR}
	\Oldprintglossary[type=acronym]	
	\end{LTR}
	\clearpage
	\linespread{\BaseLineSpreadFA}
}%

\newcommand{\printacronyms}{\printabbreviation}

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%\newcommand{\printnotation}{
%%% تنظیم کننده فاصله بین خطوط در این قسمت
%	\linespread{\prev}
%	\cleardoublepage
%	\phantomsection
%%% با این دستور عنوان فهرست نمادها به فهرست مطالب اضافه می‌شود. 
%	\addcontentsline{toc}{chapter}{فهرست نمادها}
%	\glossarystyle{mylistNotation}
%	\Oldprintglossary[type=symbols]
%	\clearpage
%%% تنظیم کننده فاصله بین خطوط در این قسمت
%	\linespread{\post}
%}%

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

\let\Oldbibliography\bibliography
\RenewDocumentCommand{\bibliography}{g g}{
	\let\appendix\relax
	%% تنظیم کننده فاصله بین خطوط در این قسمت
	\linespread{1.1}
%% با این دستور عنوان این قسمت به (مراجع) تغییر پیدا می‌کند. 
	\renewcommand{\bibname}{مراجع}
	\clearpage
	\phantomsection
	\addcontentsline{toc}{chapter}{مراجع}
	\IfValueTF{#2}{
			\bibliographystyle{#2}
			\Oldbibliography{#1}
	}{%%
			\bibliographystyle{ieeetr-fa}
			\Oldbibliography{#1}
	}%%
	\linespread{\BaseLineSpreadFA}
}%

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

%%% در این جا محیط هر دو واژه نامه را باز تعریف کرده ایم، تا اولا مشکل قرار دادن صفحه اضافی را حل کنیم، ثانیا عنوان واژه نامه ها را با دستور addcontentlist وارد فهرست مطالب کرده ایم.
\let\Oldprintglossary\printglossary
\renewcommand{\printglossary}{
	\let\appendix\relax
%% تنظیم کننده فاصله بین خطوط در این قسمت
	\linespread{1.1}
	\clearpage
	\phantomsection
%% این دستور موجب این می‌شود که واژه‌نامه‌ها در  حالت دو ستونی نوشته شود. 
	\twocolumn{}
%% با این دستور عنوان واژه‌نامه به فهرست مطالب اضافه می‌شود. 
	\addcontentsline{toc}{chapter}{واژه نامه انگلیسی به فارسی}
	\setglossarystyle{myEntoFa}
	\Oldprintglossary[type=english]
	
	\clearpage
	\phantomsection
%% با این دستور عنوان واژه‌نامه به فهرست مطالب اضافه می‌شود. 
	\addcontentsline{toc}{chapter}{واژه نامه فارسی به انگلیسی}
	\setglossarystyle{myFaToEn}
	\Oldprintglossary[type=persian]
	\onecolumn{}
	\linespread{\BaseLineSpreadFA}
}%



\let\Oldprintindex\printindex
\RenewDocumentCommand{\printindex}{g g}{
	\let\appendix\relax
	%% تنظیم کننده فاصله بین خطوط در این قسمت
	\linespread{1.1}
	%% با این دستور عنوان این قسمت به (مراجع) تغییر پیدا می‌کند. 
	\clearpage
	\phantomsection
	\addcontentsline{toc}{chapter}{نمایه}
	\Oldprintindex
	\defaultFont
	\linespread{\BaseLineSpreadFA}
}%

%%% 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 

% دستوری برای رنگ‌آمیزی محیط  Item در dinglist
\newcommand{\itemcolor}[1]{\renewcommand{\makelabel}[1]{\color{#1}\hfil ##1}}



\makeatletter
\defpersianfont\chaptertitlefont[Scale=1.6]{B Titr}

\newcommand\mycustomraggedright{%
 \if@RTL\raggedleft%
 \else\raggedright%
 \fi}
\def\@part[#1]#2{%
\ifnum \c@secnumdepth >-2\relax
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
\markboth{}{}%
{\centering
\interlinepenalty \@M
\ifnum \c@secnumdepth >-2\relax
 \huge\bfseries \partname\nobreakspace\thepart
\par
\vskip 20\p@
\fi
\LARGE\bfseries #2\par}%
\@endpart}
\def\@makechapterhead#1{%
  \vspace*{200\p@}%
  {\parindent \z@ \raggedleft \normalfont
    \ifnum \c@secnumdepth >\m@ne
      \if@mainmatter
        \huge\bfseries \@chapapp\space \thechapter
        \par\nobreak
        \vskip 20\p@
      \fi
    \fi
    \interlinepenalty\@M
    \Huge \bfseries \raggedleft{ #1}\par\nobreak
    \vskip 50\p@
  }}

%اگه می‌خواین که کلمه «فصل» رو هم داشته باشین، خط پایین رو غیرفعال کنین.
%\renewcommand{\chaptername}{}
%  نکته جانبی و بی‌ربط به این بحث: اگه می‌خواین که صفحات اول هر فصل، شماره صفحه نداشته باشن، ۹ خط پایین رو فعال کنین.
%\let\origchapter\chapter
%\renewcommand*{\chapter}{% 
%  \fancypagestyle{plain}{%
%    %\fancyhf{}%
%    \renewcommand{\headrulewidth}{0pt}%
%    \renewcommand{\footrulewidth}{0pt}%
%  }%
%\origchapter
%}

\makeatother

%\nouppercaseheads
%\makepagestyle{mystyle}
%\makeevenhead{mystyle}{}{}{\itshape\leftmark\vskip -2mm}
%\makeoddhead{mystyle}{}{}{\itshape\leftmark\vskip -2mm}
%\makeheadrule{mystyle}{ \textwidth }{.8pt}
%\makeevenfoot{mystyle}{}{\thepage}{}
%\makeoddfoot{mystyle}{}{\thepage}{}

%%% این دستور به این خاطر تعریف می‌شود، که اگر بخواهیم مثلا یک کلمه در واژه نامه را Index‌کنیم، مثلا بنویسیم، ‎\index{\glspl{Water}‎}‎، این دستور index درست عمل نمی‌کند. نویسنده بسته glossaries در این باره این طور گفته است.
%%%If you inspect the .idx file you will see that it contains the following:
%%%\indexentry{\glsentryplural{StrictlyStable}|hyperpage}{1}
%%%\index doesn't expand its argument when writing to the .idx file and since xindy doesn't understand (La)TeX commands the index won't be correctly sorted. This is a feature of \index and is not connected with glossaries.
%%%You could try something like
%%%\expandafter\index\expandafter{\glsentryplural{StrictlyStable}}
%%% توسط دستور تعیین شده می‌توان این مشکل را حل کرد. دقت کنید که این دستور می‌بایست حتما برای واژه‌نامه ها فقط تعریف شود.

\let\oldindex\index
\renewcommand{\index}[1]{
\ifthenelse{\equal{\glsentrytype{#1}}{english}}
	{\expandafter\oldindex\expandafter{\glsentrytext{#1}}}
	{ \ifthenelse{\equal{\glsentrytype{#1}}{acronym}}
		{\expandafter\oldindex\expandafter{\glsentrytext{#1}}}
		{\oldindex{#1}}
	}
}





%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% begin appendix autoref patch [\autoref subsections in appendix](http://tex.stackexchange.com/questions/149807/autoref-subsections-in-appendix)
% این کد برای حل مشکل appendix قرار داده شده است. هنگامی که در متن از دستور autoref استفاده کنیم و به یک بخش در داخل appendix ارجاع دهیم می نویسد پیوست ۱.۱ نه بخش ۱.۱
\def\appendixautorefname{پیوست}

\makeatletter
\patchcmd{\hyper@makecurrent}{%
    \ifx\Hy@param\Hy@chapterstring
        \let\Hy@param\Hy@chapapp
    \fi
}{%
    \iftoggle{inappendix}{%true-branch
        % list the names of all sectioning counters here
        \@checkappendixparam{chapter}%
        \@checkappendixparam{section}%
        \@checkappendixparam{subsection}%
        \@checkappendixparam{subsubsection}%
        \@checkappendixparam{paragraph}%
        \@checkappendixparam{subparagraph}%
    }{}%
}{}{\errmessage{failed to patch}}

\newcommand*{\@checkappendixparam}[1]{%
    \def\@checkappendixparamtmp{#1}%
    \ifx\Hy@param\@checkappendixparamtmp
        \let\Hy@param\Hy@appendixstring
    \fi
}
\makeatletter

\newtoggle{inappendix}
\togglefalse{inappendix}

\apptocmd{\appendix}{\toggletrue{inappendix}}{}{\errmessage{failed to patch}}
% end appendix autoref patch


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


