% arara: xelatex
% arara: xindyfa: {options1: -L persian-variant1 -C utf8 -I xindy -M, options2:  -t, options3:  -o}

\documentclass{report}

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

% بسته‌ای برای وارد کردن واژه نامه در متن، این بسته باید بعد از hyperref حتما صدا زده شود.
%\usepackage[toc,xindy,sanitize={name=false,description=false,symbol=false}]{glossaries}
\usepackage[xindy,acronym,nonumberlist=true]{glossaries}
% در مورد تقدم و تاخر وارد کردن بسته ها تنها باید به چند نکته دقت کرد:
% الف) بسته xepersian حتما حتما باید آخرین بسته ای باشد که فراخوانی می شود
% ب) بسته hyperref جزو آخرین بسته هایی باید باشد که فراخوانی می شود.
% ج) بسته glossaries حتما باید بعد از hyperref فراخوانی شود. 
\usepackage{xepersian}

\settextfont{XB Niloofar}

%%بولد می‌کند
\newcommand{\takid} [1] {\textbf{#1}}

%ایتالیک می‌کند
\newcommand{\takidi} [1] {\textit{#1}}
%%%%%% ============================================================================================================

%%% تنظیمات مربوط به بسته  glossaries
%%% تعریف استایل برای واژه نامه فارسی به انگلیسی، در این استایل واژه‌های فارسی در سمت راست و واژه‌های انگلیسی در سمت چپ خواهند آمد. از حالت گروه ‌بندی استفاده می‌کنیم، 
%%% یعنی واژه‌ها در گروه‌هایی به ترتیب حروف الفبا مرتب می‌شوند، مثلا:
%%% الف
%%% افتصاد ................................... Economy
%%% اشکال ........................................ Failure
%%% ش
%%% شبکه ...................................... Network
\newglossarystyle{myFaToEn}{%

\glossarystyle{altlist}
\renewenvironment{theglossary}{}{}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{\begin{LTR} \section*{\lr{\glsgetgrouptitle{##1}}} \end{LTR}}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glossaryentryfield}[5]     {\noindent\glstarget{##1}{##3}\dotfill \space \lr{##2} \\}
\renewcommand*{\glossarysubentryfield}[6]{\glossaryentryfield{##2}{##3}{##4}{##5}{##6}}
}

%% % تعریف استایل برای واژه نامه انگلیسی به فارسی، در این استایل واژه‌های فارسی در سمت راست و واژه‌های انگلیسی در سمت چپ خواهند آمد. از حالت گروه ‌بندی استفاده می‌کنیم، 
%% % یعنی واژه‌ها در گروه‌هایی به ترتیب حروف الفبا مرتب می‌شوند، مثلا:
%% % E
%%% Economy ............................... اقتصاد
%% % F
%% % Failure................................... اشکال
%% %N
%% % Network ................................. شبکه

\newglossarystyle{myEntoFa}{%

\glossarystyle{altlist}
\renewenvironment{theglossary}{}{}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{ \section*{\glsgetgrouptitle{##1}} }
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glossaryentryfield}[5]     {\noindent\glstarget{##1}{\lr{##2}}\dotfill \space \lr{##3} \\}
\renewcommand*{\glossarysubentryfield}[6]{\glossaryentryfield{\lr{##2}}{##3}{##4}{##5}{##6}}
}

%%% تعیین استایل برای فهرست اختصارات
\newglossarystyle{myAbbrlist}{%
	%%% این دستور در حقیقت عملیات گروه‌بندی را انجام می‌دهد. بدین صورت که اختصارات‌ در بخش‌های جداگانه گروه‌بندی می‌شوند، 
	%%% عنوان بخش همان نام حرفی است که هر اختصار در آن گروه با آن شروع شده است. 
	\renewenvironment{theglossary}{}{}
	\renewcommand*{\glsgroupskip}{\vskip 10mm}
	\renewcommand*{\glsgroupheading}[1]{\begin{LTR} \subsection*{\glsgetgrouptitle{##1}} \end{LTR}}
	%%% در این دستور نحوه نمایش اختصارات می‌آید. در این جا حالت کوچک اختصار در سمت چپ و حالت بزرگ در سمت راست قرار داده شده است، و بین آن با نقطه پر می‌شود. 
	\renewcommand*{\glossentry}[2]{\noindent\glsentrytext{##1}\dotfill\space \Glsentrylong{##1}
		
	}
	%%% تغییر نام محیط abbreviation به فهرست اختصارات
	\renewcommand*{\acronymname}{ \rl{فهرست اختصارات} }
}

%%% برای اجرا xindy بر روی فایل .tex و تولید واژه‌نامه‌ها و فهرست اختصارات و فهرست نمادها یکسری  فایل تعریف شده است.‌ Latex داده های مربوط به واژه نامه و .. را در این 
%%%%%% ============================================================================================================

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

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

\renewcommand*{\glsdisplayfirst}[4]{\takid{#1#4}}
\renewcommand*{\glsdisplay}[4]{\takidi{#1#4}}

\newglossary[glg]{english}{gls}{glo}{واژه‌نامه انگلیسی به فارسی}
\newglossary[blg]{persian}{bls}{blo}{واژه‌نامه فارسی به انگلیسی}

%دستور وارد کردن یک لغت به واژه نامه
%\newcommand{\invazh}[4]{
%	\newglossaryentry{فا-#1}{type=persian,name={#2}, sort={#2},description={\lr{#3}},plural={#4}}
%	\newglossaryentry{لا-#1}{type=english,name={\lr{#3}}, sort={#3},description={#2}}
%}
\NewDocumentCommand \invazh {m m m m g g g} {
	\IfNoValueTF{#7}
		{\IfNoValueTF{#6}
			{\IfNoValueTF{#5}
				{\newglossaryentry{la-#1}{type=persian,name={#2}, sort={#2},description={\rl{#3}},plural={#4},user6={#3}}
					\newglossaryentry{fa-#1}{type=english,name={\rl{#3}}, sort={#3},description={#2},plural={#4},user6={#3}}
				}
				{\newglossaryentry{la-#1}{type=persian,name={#2}, sort={#2},description={\rl{#3}},plural={#4},user1={#5},user6={#3}}
					\newglossaryentry{fa-#1}{type=english,name={\rl{#3}}, sort={#3},description={#2},plural={#4},user1={#5},user6={#3}}
				}
			}
			{\newglossaryentry{la-#1}{type=persian,name={#2}, sort={#2},description={\rl{#3}},plural={#4},user1={#5},user2={#6},user6={#3}}
				\newglossaryentry{fa-#1}{type=english,name={\rl{#3}}, sort={#3},description={#2},plural={#4},user1={#5},user2={#6},user6={#3}}
				
			}
		}
		{\newglossaryentry{la-#1}{type=persian,name={#2}, sort={#2}, description={\rl{#3}}, plural={#4}, user1={#5}, user2={#6}, user3={#7}, 	user6={#3}}
				\newglossaryentry{fa-#1}{type=english,name={\rl{#3}}, sort={#3},description={#2},plural={#4},user1={#5},user2={#6},user3={#7},user6={#3}}
	}
	}

% توسط این دستور واژه مورد نظر در واژه نامه، در بار اول به صورت زیر نویس و در بارهای بعد بدون زیر نویس می‌آید.
\NewDocumentCommand \darj {o m m g} {\IfNoValueTF{#4}
{\IfNoValueTF{#1}
	{\ifglsused{#2-#3}{\gls{#2-#3}}{\gls{#2-#3}\ifstrequal{#2}{la}{\footnote{\rl{\glsuservi{#2-#3}}}\glsadd{fa-#3}\glsunset{fa-#3}}{\LTRfootnote{\glsdesc{#2-#3}}\glsadd{la-#3}\glsunset{la-#3}}}}
	{}}
{\IfNoValueTF{#1}	
	{\ifglsused{#2-#3}{\gls{#2-#3}[#4]}{\gls{#2-#3}[#4]\ifstrequal{#2}{la}{\footnote{\rl{\glsuservi{#2-#3}}}\glsadd{fa-#3}\glsunset{fa-#3}}{\LTRfootnote{\glsdesc{#2-#3}}\glsadd{la-#3}\glsunset{la-#3}}}}
	{}}}

\NewDocumentCommand \darji {m m g} {\IfNoValueTF{#3}
	{\ifglsused{#1-#2}{\takidi{\glsuseri{#1-#2}}}{\takidi{\glsuseri{#1-#2}}\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\LTRfootnote{\glsdesc{#1-#2}}\glsadd{la-#2}\glsunset{la-#2}}}}
	{\ifglsused{#1-#2}{\takidi{\glsuseri{#1-#2}[#3]}}{\takidi{\glsuseri{#1-#2}[#3]}\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\LTRfootnote{\glsdesc{#1-#2}}\glsadd{la-#2}\glsunset{la-#2}}}}}
\NewDocumentCommand \darjii {m m g} {\IfNoValueTF{#3}
	{\ifglsused{#1-#2}{\takidi{\glsuserii{#1-#2}}}{\takidi{\glsuserii{#1-#2}}\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\LTRfootnote{\glsdesc{#1-#2}}\glsadd{la-#2}\glsunset{la-#2}}}}
	{\ifglsused{#1-#2}{\takidi{\glsuserii{#1-#2}[#3]}}{\takidi{\glsuserii{#1-#2}[#3]}\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\LTRfootnote{\glsdesc{#1-#2}}\glsadd{la-#2}\glsunset{la-#2}}}}}
\NewDocumentCommand \darjiii {m m g} {\IfNoValueTF{#3}
	{\ifglsused{#1-#2}{\takidi{\glsuseriii{#1-#2}}}{\takidi{\glsuseriii{#1-#2}}\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\LTRfootnote{\glsdesc{#1-#2}}\glsadd{la-#2}\glsunset{la-#2}}}}
	{\ifglsused{#1-#2}{\takidi{\glsuseriii{#1-#2}[#3]}}{\takidi{\glsuseriii{#1-#2}[#3]}\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\LTRfootnote{\glsdesc{#1-#2}}\glsadd{la-#2}\glsunset{la-#2}}}}}
\NewDocumentCommand \darjj {m m g} {\IfNoValueTF{#3}
	{\ifglsused{#1-#2}{\glspl{#1-#2}}{\glspl{#1-#2}\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\LTRfootnote{\glsdesc{#1-#2}}\glsadd{la-#2}}}}
	{\ifglsused{#1-#2}{\glspl{#1-#2}[#3]}{\glspl{#1-#2}[#3]\ifstrequal{#1}{la}{\footnote{\rl{\glsuservi{#1-#2}}}\glsadd{fa-#2}\glsunset{fa-#2}}{\footnote{\glsdesc{#1-#2}}\glsadd{la-#2}}}}}
\NewDocumentCommand \darjen {m m}{\ifstrequal{#1}{la}{\glsentryname{#1-#2}}{\glsentryname{fa-#2}}}
\NewDocumentCommand \darjien {m m}{\ifstrequal{#1}{la}{\glsentryuseri{#1-#2}}{\glsentryuseri{fa-#2}}}
\NewDocumentCommand \darjiien {m m}{\ifstrequal{#1}{la}{\glsentryuserii{#1-#2}}{\glsentryuserii{fa-#2}}}
\NewDocumentCommand \darjiiien {m m}{\ifstrequal{#1}{la}{\glsentryuseriii{#1-#2}}{\glsentryuseriii{fa-#2}}}
\NewDocumentCommand \darjjen {m m}{\ifstrequal{#1}{la}{\glsentryplural{#1-#2}}{\glsentryplural{fa-#2}}}


\makeglossaries
%%%%%% ============================================================================================================
%%%%%% ============================================================================================================
%%% نحوه تعریف واژگان 

\invazh{RandomVariable}{Random Variable}{متغیر تصادفی}{متغیرهای تصادفی}{متغیری}{}

\invazh{Action}{Action}
{کنش}{کنش‌ها}

\invazh{Optimization}{Optimization}{بهینه‌سازی}{}

\invazh{Zxdc}{xsw}{تتتتیننی}{تبیسمنتنمیتبمنیست}


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

%%% نحوه تعریف اختصارات
\newacronym{DFT}{DFT}{Discrete Fourier Transform}

\newacronym{CDMA}{CDMA}{Code Division Multiplexing Access}

\newacronym{BAN}{BAN}{Body Area Network}



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

\begin{document}
\printabbreviation

برای وارد کردن یک واژه از دستور \lr{glspl} باید استفاده نمود. مثل واژه
 \darji{fa}{RandomVariable}
  
\lr{\darj{la}{RandomVariable}}
\\
\\

از اختصارات، اختصارات \gls{BAN} و \gls{CDMA} را وارد می‌کنیم. 
از اختصارات، اختصارات \gls{BAN} و \gls{CDMA} را وارد می‌کنیم. 
از اختصارات، اختصارات \gls{BAN} و \gls{CDMA} را وارد می‌کنیم. 

تا واژه و یا اختصاری را در متن با دستورات \lr{gls}‌ و \lr{glspl} وارد نکنید، واژه نه در متن ظاهر شده و نه در واژه‌نامه‌ها وارد می‌شود. 

\printglossary



\end{document}

