\documentclass{report}

% بسته ای برای تنظیم حاشیه صفحات
\usepackage[top=3cm, bottom=2.5cm, left=2cm, right=2.5cm]{geometry}

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

\hypersetup{ 
colorlinks=true,linkcolor=blue, anchorcolor=green, citecolor=magenta, urlcolor=cyan, filecolor=magenta}

%% بسته‌ای برای وارد کردن واژه نامه در متن، این بسته باید بعد از hyperref حتما صدا زده شود. 
\usepackage[sanitize={name=false,description=false,sort=false},nomain,xindy]{glossaries}
% نکته مهم این جا است که بسته Xepersian برای پشتیبانی از زبان فارسی آورده شده است، و 
% می بایست آخرین بسته ای باشد که شما وارد می کنید، دقت کنید: آخرین بسته 
\usepackage{xepersian}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
%%% تعاریف مربوط به تولید واژه نامه
%%============================ واژه نامه

\let\oldglspl\glspl
\let\oldGlspl\Glspl
\let\oldgls\gls
\let\oldGls\Gls

\newglossarystyle{mylistFa}{
\glossarystyle{list}
\renewenvironment{theglossary}{}{}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{\section*{  \glsgetgrouptitle{##1}}   }
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glossaryentryfield}[5]     {\noindent \Glsname{##1} \dotfill \space \oldGlspl{##1} \\}
\renewcommand*{\glossarysubentryfield}[6]{\glossaryentryfield{##2}{##3}{##4}{##5}{##6}}
}

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

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

%% توسط این دستور واژه مورد نظر در متن، هر دو واژه نامه و پاورقی می آید.
\newcommand{\inpdic}[2]{\newglossaryentry{#2}{name={#2}, plural={#1},description = {#1}}\hspace{-.5em}\glsplp{#2}}


% توسط این دستور واژه مورد نظر در متن، هر دو واژه نامه  می آید.
\newcommand{\indic}[2]{\newglossaryentry{#2}{name={#2}, plural={#1},description = {#1} }\glspl{#2}}

% توسط این دستور واژه مورد نظر فقط در هر دو واژه نامه  می آید.
\newcommand{\ingls}[2]{
	\newglossaryentry{#2}{name={#2}, plural={#1},description = {#1} }\glsuseri{#2}
}


\makeglossaries
\glsdisablehyper
\makeindex

\let\oldnewglossaryentry\newglossaryentry

\makeatletter
\renewcommand{\newglossaryentry}[2]{%
   \setkeys{glossentry}{#2}%
   \let\thename\@glo@name
   \let\theplural\@glo@plural
    \let\thedesc\@glo@desc
   \oldnewglossaryentry{fa-#1}{type = persian,  name={\theplural},  plural={\lr{\thename}} , description={\thedesc}}
   \oldnewglossaryentry{#1}     {type = english,  name={\lr{\thename}} ,plural={\theplural} , description = {\thedesc}}
}


\let\oldglsuseri\glsuseri
\renewcommand{\glspl}[1]{\oldglspl{#1}\oldglsuseri{fa-#1}} 
\renewcommand{\Glspl}[1]{\oldGlspl{#1}\oldglsuseri{fa-#1}}
\newcommand{\glsplp}[1]{\oldglspl{#1}\hspace{-.1em}\LTRfootnote{\Gls{#1}}\oldglsuseri{fa-#1}}
\renewcommand{\gls}[1]{\oldgls{#1}\oldglsuseri{fa-#1} }
\renewcommand{\Gls}[1]{\oldGls{#1}\oldglsuseri{fa-#1} }
\renewcommand{\glsuseri}[1]{\oldglsuseri{#1}\oldglsuseri{fa-#1} }

\makeatother


%% در این جا محیط هر دو واژه نامه را باز تعریف کرده ایم، تا اولا مشکل قرار دادن صفحه اضافی را حل کنیم، ثانیا عنوان واژه نامه ها را با دستور addcontentlist وارد فهرست مطالب کرده ایم.
\let\Oldprintglossary\printglossary
\renewcommand{\printglossary}{
	\let\appendix\relax
	\baselineskip=.75cm
	
	\clearpage
	\phantomsection
	\twocolumn{}
	\addcontentsline{toc}{chapter}{واژه نامه انگلیسی به فارسی}
	\glossarystyle{mylistEn}
	\Oldprintglossary[type=english]

	\clearpage
	\phantomsection
	\addcontentsline{toc}{chapter}{واژه نامه فارسی به انگلیسی}
	\glossarystyle{mylistFa}
	\Oldprintglossary[type=persian]
	\onecolumn{}
	
}


\input{Words}

\begin{document}
\baselineskip = .9 cm

\chapter{وارد کردن واژه‌نامه}
\section{مقدمه}
\subsection{فراخوانی بسته}
برای وارد کردن واژه‌نامه در متن از بسته \lr{glossaries} استفاده می‌کنیم، لذا در ابتدا بسته {\lr{glossaries}} را به صورت زیر فراخوانی می‌کنیم.
\begin{LTR}
\verb+\usepackage[sanitize={name=false,description=false,sort=false},nomain,xindy]{glossaries}+
\end{LTR}
دقت کنید که این بسته حتما باید بعد از بسته \lr{hyperref} و قبل از بسته \lr{xepersian} فراخوانی شود. 

\subsection{تنظیمات مربوط به بسته}
اگر به فایل \lr{.tex} متناظر با این نوشتار نگاه کنید، یکسری دستورات برای تنظیم بسته \lr{glossaries} قرار داده شده است. این دستورات باید قبل از 
\verb+\begin{document}+
قرار داده شوند. در ضمن این دستورات را می‌توانید در فایل استایل خود نیز قرار دهید. این دستورات در حقیقت شامل تعریف یکسری دستورات برای راحتی کار و ایجاد یک استایل برای دو واژه نامه فارسی به انگلیسی و انگلیسی به فارسی است. دو دستور زیر در واقع محل تعریف استایل برای واژه‌نامه هست.
\begin{latin}
\noindent\verb+\newglossarystyle{mylistEn}}{...............................................}+\\
\verb+\newglossarystyle{mylistFa}}{...............................................}+\\
\end{latin}
مثلا تعریف شده است که در واژه‌نامه‌ها اول کلمه بیاید و سپس کلمه معادل و ما بین آن نیز با نقطه چین پر شود. این کار در یک زیردستور در همان دستور \lr{newglossarystyle} آمده است به صورت زیر:
\begin{latin}
\noindent\verb+ \renewcommand*{\glossaryentryfield}[5]     {\noindent \oldglspl{##1}  \dotfill \space  \Glsname{##1} \\}+\\
\verb+\renewcommand*{\glossaryentryfield}[5]     {\noindent \Glsname{##1} \dotfill \space \oldGlspl{##1} \\+
\end{latin}
اکنون فرض کنید که شما می‌خواهید که یک واژه‌نامه فارسی به انگلیسی داشته باشید که، ابتدا کلمه فارسی و سپس در داخل پرانتز کلمه انگلیسی و در ادامه قسمت توضیح بیاید. پس کافی است خطوط یاد شده را به صورت زیر مثلا در واژه‌نامه فارسی به انگلیسی توضیح دهید:
\begin{latin}
\noindent\verb+\renewcommand*{\glossaryentryfield}[5]     {\noindent \Glsname{##1} (\oldGlspl{##1}): \glsdesc{##1}  \\} +
\end{latin}
البته اگر روش فعلی را مناسب می‌دانید هیچ نیازی به انجام تغییرات ندارید، فقط کافی است که دستورات یاد شده را (دستوراتی که در فایل مثال قبل از شروع 
\verb+\begin{document}+
)
آمده است را در فایل خود و یا فایل استایل خود کپی کنید. 

\subsection{نحوه استفاده}
دو روش برای وارد کردن واژه‌ها با توجه به دستورات تعریف شده، معین شده است.
\section{وارد کردن مستقیم واژه در متن}

در این روش، سه حالت برای وارد کردن واژه ها در واژه نامه تعریف کردم. برای هر روش یک دستور به شرح زیر تعریف شده است. 
\begin{itemize}
\item {\lr{inpdic}}:
این دستور واژه ها را هم در واژه نامه وارد می کند و هم در پاورقی می‌آورد و خود واژه را در متن نیز قرار می دهد. مثل: {\inpdic{همتافتن}{Multiplex}}

\item {\lr{indic}}:
همانند {\lr{inpdic}} است، تنها ترجمه واژه در پاورقی نمی آید. مثل: {\indic{همتافتگر}{Multiplexer}}
\item {\lr{ingls}}:
این دستور باعث می‌شود تنها واژه در واژه نامه ظاهر شود و اصلا در متن ظاهر نمی شود. مثل: {\ingls{همتافتگری}{Multiplexing}} (به فایل \lr{.tex} متناظر نگاه کنید). همان طور که می بینید در این مثال کلمه (همتافتگری) تنها در واژه نامه آمده است و اصلا در متن ظاهر نشده است. 
\end{itemize}
همان‌طور که دیدید در این روش شما واژه‌ها را مستقیما در متن تعریف می‌کنید. دقت کنید که اگر یک واژه را بیش از دوبار تعریف کنید، یعنی برای یک واژه بیش از دوبار از دستورات یاد شده استفاده کنید، در هنگام اجرا با خطا مواجه خواهید شد. 

یکسری مثال دیگر:
\inpdic{دسترسی چندگانه}{Multiple Access}
\inpdic{فراگردی}{Roaming}
\inpdic{واگذاری}{Handover}% FA: , واگذاری Comm: دگرسپاری
\inpdic{جایگشت}{Handoff}
\ingls{هزینه}{Charging}
\ingls{افزونگی}{Redundancy}
\ingls{شیار زمانی}{Time Slot}
\ingls{گذردهی}{Throughput}
\ingls{اشتراک زمانی}{Time Sharing}
\ingls{زمان‌بندی}{Timing}
\ingls{نمونه}{Sample}
\ingls{نمونه‌برداری}{Sampling}
\ingls{درهم‌ساختن}{Scramble}
\ingls{درهم‌ساز}{Scrambler}
\indic{کددرهم‌ساز}{Srambling Code}
\indic{خدمت}{Service}
\indic{باند‌پایه}{Base Band}


\section{استفاده از واژه‌نامه}
در این شیوه که اتفاقا یک شیوه‌ پایه‌ای است، شما واژه‌های خود را  در یک فایل مجزا وارد می‌کنید. برای مثال من واژه‌ها را در فایلی به نام \lr{Words} وارد کرده‌ام. سپس در این فایل واژه‌های خود را به صورت زیر تعریف می‌کنید. برای مثال برای تعریف  یک واژه از دستور \lr{newglossaryentry} استفاده می‌کنیم.  آرگومان ورودی آن یک برچسب برای تابع، مقدار \lr{name} عبارت انگلیسی مورد نظر، مقدار \lr{plural} معادل فارسی آن، مقدار \lr{description} نیز یک توضیح در مورد آن است. برای آشنایی بیشتر می‌توانید مواردی را که در فایل \lr{word}‌ آورده شده است را نگاه کنید. 

اکنون برای وارد کردن واژه در متن کافی است از دستورات زیر استفاده کنید:
\begin{itemize}
\item \lr{glspl}
که آرگومان ورودی آن همان برچسبی است که با دستور  \lr{newglossaryentry} تعریف نموده‌اید. مثلا فرض کنید که یک واژه به صورت زیر تعریف کرده‌ایم:
\begin{LTR}
\verb+ \newglossaryentry{network}{name={.....}, plural={........},description={.........}} +
\end{LTR}
مثلا در متن کافی است بنویسید:
\begin{LTR}
\verb+\glspl{network} +
\end{LTR}
آن‌گاه معادل فارسی کلمه \lr{network} را بر طبق معادل فارسی که در \lr{plural} قرار داده‌اید، را می‌گذارد. یعنی هر وقت شما می‌خواستید مثلا از واژه شبکه استفاده کنید، کافی است بنویسید:
\begin{LTR}
\verb+\glspl{network} +
\end{LTR}
دقت کنید این کار به شما کمک می‌کند که اگر در کل متن خود از این شیوه استفاده کردید، و بعدا یک معادل بهتر برای کلمه \lr{network} پیدا نمودید، لازم نباشد کل متن خود را تغییر دهید، فقط در واژه‌نامه معادل کلمه \lr{network} را جایگزین کنید. 
\item\lr{glsplp}:
این دستور همانند دستور \lr{glspl} است، فقط عبارت انگلیسی کلمه مورد نظر را در پاورقی نیز می‌آورد. 
\item\lr{gls}:
دستور \lr{gls}‌که آرگومان ورودی آن باز برچسب کلمه تعریف شده است، عبارت انگلیسی تعریف شده در متغیر \lr{name} را در محلی که دستور را فراخوانی نموده‌اید قرار می‌دهد. 
\end{itemize}

برای مثال: (به خط متناظر در فایل \lr{.tex} مراجعه کنید.)

امروزه یکی از داغ‌ترین مسائل تحقیقاتی بحث \glsplp{Network} است. \glspl{Network} به انگلیسی می‌شود: \gls{Network}. 


\section{کامپایل}
برای اجرا و تولید واژه‌نامه‌ها شما نیاز به \lr{Xindy} دارید. \lr{xindy} به صورت پیش‌فرض بر روی \lr{Texlive} وجود دارد و نیازی به کار خاصی به جز مواردی که در ادامه عنوان شده است، ندارید. اما اگر از \lr{Miktex}  استفاده می‌کنید، باید \lr{Xindy} را به صورت دستی نصب کنید. در هر صورت به شدت توصیه می ‌‌شود که از \lr{Texlive} استفاده کنید. 

مهم ترین مرحله کامپایل برنامه است که باید به صورت دنباله زیر باشد: (این تنظیمات برای {\lr{texmaker}} است.)
\begin{itemize}
\begin{LTRitems}
\item
\verb+ xelatex -interaction=nonstopmode -synctex=-1 %.tex+
\item
\verb+ xindy -L persian -C utf8 -I xindy -M %.xdy -t %.glg -o %.gls %.glo +
\item
\verb+ xindy -L persian -C utf8 -I xindy -M %.xdy -t %.blg -o %.bls %.blo +
\item
\verb+ xelatex -interaction=nonstopmode -synctex=-1 %.tex+
\end{LTRitems}
\end{itemize}
در اکثر نرم‌افزارهای وبرایشگر دستور اولی و آخری، همان \lr{Quick Build} است. برای اطمینان از این قضیه در تنظیمات ویرایشگر مورد نظر خود، چک کنید که دستور \lr{Quick Build} در حقیقت همان اجرای \lr{Xelatex} باشد. مثلا تصویر زیر این مورد را در ویرایشگر \lr{Texmaker} نشان می‌دهد.
\begin{figure}[H]
\centering
\includegraphics[width=.7\textwidth]{f1}
\caption{
دستور \lr{Quick Build}‌در \lr{Texmaker}
}
\label{f1}
\end{figure}
در مورد دوم و سوم نیز این دستورات را معمولا باید به صورت دستی وارد کنید. یک راه این است که یک ترمینال باز کنید، و به شاخه‌ای که در آن فایل‌های خود را دارید مراجعه کنید و دستورات دوم و سوم را در تایپ کنید. فقط دقت کنید که به جای علامت $\%$ می‌بایست نام فایل خود را قرار دهید. 

اگر از ویرایشگرهای معمول استفاده می‌کنید، این ویرایشگرها معمولا قسمتی دارند که می‌توانید دستوراتی را تعریف کنید و با یک کلیک آن‌ها را اجرا کنید. برای مثال شما در \lr{Texmaker} می‌توانید در قسمت 
\lr{User->User Command}
دستورات فوق را تعریف کنید. دقت کنید که در این ویرایشگر به جای نام فایل همان $\%$ قرار دهید. نمونه‌ای از تعریف یکی از این دستورات را در شکل \ref{f2} مشاهده می‌کنید:
\begin{figure}[H]
\centering
\includegraphics[width=.7\textwidth]{f2}
\caption{نمونه‌ای از تعریف دستورات تولید واژه‌نامه}
\label{f2}
\end{figure}

دقت کنید که  اگر از  \lr{Biditexmaker} استفاده می‌کنید، مورد دوم در {\lr{Bidi Texmaker}}  آمده است (\lr{Xindy Glossary})، ولی مورد سوم وجود ندارد، و باید به صورت دستی وارد کنید. یعنی در  {\lr{User Command}} آن را تعریف کنیم. دقت کنید اگر مورد سوم را انجام ندهید یکی از واژه نامه ها اصلا تولید نمی شود. 

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


\printglossary


\end{document}


