\documentclass[a4paper,11pt]{article}
\usepackage{fancyvrb}
\usepackage{bidicode}
\usepackage{makeidx}
%\usepackage[linkcolor=blue,citecolor=blue]{hyperref}
%\usepackage{hyperref}
\usepackage{graphicx}
\usepackage[xindy]{glossaries}

\DefineVerbatimEnvironment{myverbatim}{Verbatim}{commandchars=+\[\]}

% -----------------------------------------------------------------------------
\newglossarystyle{mylist1}{%
% put the glossary in the itemize environment:
\renewenvironment{theglossary}{}{}%
% have nothing after \begin{theglossary}:
\renewcommand*{\glossaryheader}{}%
% have nothing between glossary groups:
\renewcommand*{\glsgroupheading}[1]{}%
\renewcommand*{\glsgroupskip}{}%
% set how each entry should appear:
\renewcommand*{\glossaryentryfield}[5]{%
%\item[] % bullet point
\glstarget{##1}{##2}% the entry name
\dotfill% the symbol in brackets
\space ##3 \\% the number list in square brackets
}%
% set how sub-entries appear:
\renewcommand*{\glossarysubentryfield}[6]{%
\glossaryentryfield{##2}{##3}{##4}{##5}{##6}}%
}
% -----------------------------------------------------------------------------



\usepackage{xepersian}
\settextfont[Scale=1]{XB Niloofar}
\setlatintextfont[Scale=1]{XB Niloofar}
\setdigitfont[Scale=1]{XB Niloofar}

\title{خلاصه طراحی واژه‌نامه در زی‌پرشین با استفاده از بسته glossaries}
\author{محمد چهارسوقی}

% Enter Glossary Entries ---------------------------------------------
\newglossaryentry{متن آغازگر}{name={متن آغازگر}, description={script}}
\newglossaryentry{بسته}{name={بسته}, description={package}}
\newglossaryentry{استایل}{name={استایل}, description={style}}
\newglossaryentry{توزیع}{name={توزیع}, description={distribution}}
\newglossaryentry{تک}{name={تک}, description={TeX}}
\newglossaryentry{نصب}{name={نصب}, description={install}}
\newglossaryentry{حذف}{name={حذف}, description={uninstall}}
\newglossaryentry{رابط}{name={رابط}, description={interface}}
\newglossaryentry{زی‌پرشین}{name={زی‌پرشین}, description={xepersian}}
\newglossaryentry{گزینه}{name={گزینه}, description={option}}
\newglossaryentry{برچسب}{name={برچسب}, description={label}}

% --------------------------------------------------------------------------
\makeglossaries
\makeindex
\begin{document}

\maketitle
\tableofcontents

\section{مقدمه}
در ابتدا لازم است بگویم که راه‌انداز اصلی من در این قسمت نوشته‌های آقای دکتر مهدی امیدعلی بوده است که در موضوع واژه‌نامه در تالار گفتمان پارسی لاتک آورده بودند. از آنجایی که مشغول نوشتن استایل پایان‌نامه برای دانشگاه تحصیلات تکمیلی در علوم پایه زنجان بودم، لازم شد تا کمی بیشتر با این بسته آشنا شوم. در نهایت تصمیم گرفتم که این نوشتار را برای نحوه استفاده از واژه‌نامه در یک فایل \gls{زی‌پرشین} آماده کنم و به مرور زمان هر چه یاد گرفتم در آن بنویسم.
\section{بسته‌ها‌ی مورد نیاز}
ما به \gls{بسته}‌ی glossaries احتیاج داریم. همچنین به بسته‌های  \lr{xfor ،xkeyval ،ifthen} و amsgen  احتیاج داریم. بسته به نوع \gls{استایل}ی که برای واژه‌نامه استفاده می‌کنید ممکن است به یکی از بسته‌های \lr{longtable ،supertabular} و array نیز نیاز داشته باشید.

علاوه بر اینها به یک برنامه نمایه‌ساز\footnote{شاید اگر از ترجمه فهرست‌ساز و یا شاخص‌گذار به جای indexing استفاده کنیم بهتر باشد.} نیز نیاز داریم. بسته glossaries  به گونه‌ای طراحی شده است که هم می‌تواند از makeindex استفاده کند و هم از xindy. بسته‌ی makeindex در تمامی \gls{توزیع}‌های \gls{تک} موجود است اما شاید لازم باشد که xindy را \gls{نصب} کنید\footnote{برای دانلود xindy که از زبان فارسی نیز حمایت کند به سایت و تالار پارسی‌لاتک مراجعه کنید}. 

همراه بسته‌ی glossaries یک \gls{متن آغازگر} به زبان perl وجود دارد که با اجرای دستور makeglossaries بر روی فایل مورد نظر به عنوان یک  \gls{رابط} برای makeindex و یا xindy عمل می‌کند. اگر بخواهید از makeglossaries استفاده کنید، لازم است که Perl بر روی سیستم شما نصب باشد، در غیر این صورت می‌توانید مستقیماً از makeindex و یا xindy استفاده کنید.

 \section{شروع کار}
در ابتدای فایل خود باید بسته‌ی glossaries را فراخوانی کنید:
\begin{LTR}
\begin{verbatim}
\usepackage{glossaries}
\end{verbatim}
\end{LTR}
توجه داشته باشید که این بسته باید بعد از بسته‌ی hyperref فراخوانی شود (برخلاف توصیه‌ی همیشگی‌ای که می‌گوید بسته‌ی hyperref باید آخرین بسته باشد). البته به یاد داشته باشید که اگر شما از بسته زی‌پرشین استفاده می‌کنید، مطابق معمول باید این بسته را بعد از تمامی بسته‌ها فراخوانی کنید.

اگر برای مرتب سازی می‌خواهید به جای makeindex از xindy استفاده کنید باید زمانی که این بسته را فراخوانی می‌کنید در \gls{گزینه}‌های این بسته مشخص کنید:
\begin{LTR}
\begin{verbatim}
\usepackage[xindy]{glossaries}
\end{verbatim}
\end{LTR}
و در نهایت قبل از {\lr{\ begin\{document\}}} باید دستور زیر را وارد کنید.
\begin{LTR}
\begin{verbatim}
\makeglossaries
\end{verbatim}
\end{LTR}

\section{تعریف واژه یا علامت }
در ابتدا لازم است که با توجه به دستور زیر اقدام به وارد کردن واژه خود کنید.
\begin{LTR}
\begin{verbatim}
\newglossaryentry{<lable>}{<settings>}
\end{verbatim}
\end{LTR}
در اینجا <lable>  یک \gls{برچسب} منحصر بفرد است که برای مشخص کردن عبارت به آن نسبت می‌دهیم. از مهمترین گزینه‌هایی که در عبارت بالا در <settings> می‌توان استفاده کرد، عبارتند از:
\begin{itemize}
\item
\textbf{name} که اسم واژه مربوطه است که در واژه نامه ظاهر می‌شود
\item
\textbf{description} توضیحی است که برای واژه آورده می‌شود
\item
\textbf{parent}  اگر به عنوان یک زیرواژه \index{زیرواژه} استفاده شود، با استفاده از این گزینه مشخص می‌کنیم که متعلق به چه والدی است.
\item
\textbf{symbol} اگر علامتی خاص برای واژه خود در نظر دارید می‌توانید از طریق این انتخاب آن را اضافه کنید. در نظر داشته باشید که تمامی استایل‌های موجود در بسته glossaries لزوماً این انتخاب را نمایش نمی‌دهند.
\item
\textbf{sort} در حالت پیش‌فرض مرتب‌سازی بر اساس name صورت می‌گیرد اما با این گزینه برای واژه‌ای خاص می‌توانید بگویید بر اساس description و یا هر انتخاب دیگری مرتب شود.
\item
\textbf{type} اگر بخواهید چندین واژه نامه جدا از هم داشته باشید، می‌توانید از این انتخاب برای دسته‌بندی واژه‌نامه‌های خود استفاده کنید. به طور مثال می‌توایند مشخص کنید که عبارت مربوطه یک symbol است.
\end{itemize}
مهمترین گزینه‌های کلیدی که مورد استفاده قرار می‌گیرند name  و description هستند. به طور مثال به نمونه زیر توجه کنید.
\begin{LTR}
\begin{myverbatim}
\newglossaryentry{+rl[برچسب]}{name = +rl[برچسب], description = label}
\end{myverbatim}
\end{LTR}
اگر name  و یا description بیشتر از یک کلمه بودند، عبارت مربوطه را باید در بین دو آکولاد قرار داد. به مثال زیر توجه کنید.
\begin{LTR}
\begin{lstlisting}[morekeywords=newglossaryentry,numbers=none,frame=none,backgroundcolor=\color{white}]
\newglossaryentry{electrolyte}{name=electrolyte,description={solution able to conduct electric current}}
\end{lstlisting}
\end{LTR}
تعریف واژه می‌تواند در هر جایی از متن صورت گیرد ولی شاید زیباتر این باشد که واژه‌هایمان را در یک فایل جداگانه‌ای به صورت منظم تعریف کنیم و سپس قبل از  {\lr{\ begin\{document\}}} فایل مربوطه را با استفاده از دستور زیر فراخوانی کنیم
\begin{LTR}
\begin{myverbatim}
\input{<your glossary filename.tex>}
\end{myverbatim}
\end{LTR}
نمونه زیر محتویات یک فایل واژه‌نامه است که با پسوند tex ذخیره شده است.
\begin{LTR}
\begin{myverbatim}
\newglossaryentryv{+rl[متن آغازگر]}{name={+rl[متن آغازگر]}, description={script}}
\newglossaryentry{+rl[بسته]}{name={+rl[بسته]}, description={package}}
\newglossaryentry{+rl[استایل]}{name={+rl[استایل]}, description={style}}
\newglossaryentry{+rl[توزیع]}{name={+rl[توزیع]}, description={distribution}}
\newglossaryentry{+rl[تک]}{name={+rl[تک]}, description={TeX}}
\newglossaryentry{+rl[نصب]}{name={+rl[نصب]}, description={install}}
\end{myverbatim}
\end{LTR}

\section{استفاده از واژه}
به محض اینکه شما واژه‌ای را با استفاده از روش بخش قبل، تعریف کنید، می‌توانید از آن در متن خود استفاده کنید. دستور اصلی که برای این کار استفاده می‌شود، دستور
\begin{LTR}
\begin{myverbatim}
\gls{<label>}
\end{myverbatim}
\end{LTR}
است. این دستور نام\footnote{آن عبارتی را که به عنوان name در نظر گرفته‌اید را می‌نویسد.} واژه‌ای را که مربوط به برچسب <label> است، چاپ می‌کند. بنابراین در این حالت دیگر لازم نیست کلمهٔ مورد نظر را دوباره بنویسید. اگر از بستهٔ hyperref استفاده کرده‌ باشید، این کلمه به صورت لینک ظاهر خواهد شد و با کلیک بر روی آن شما را به توضیح مربوطه در واژه‌نامه می‌برد.	

همچنین اگر واژه شما یک کلمهٔ انگلیسی است و در ابتدای جمله آمده است و لازم است که با حرف بزرگ نمایش داده شود می‌توانید از دستور زیر استفاده کنید.
\begin{LTR}
\begin{myverbatim}
\Gls{<label>}
\end{myverbatim}
\end{LTR}

\section{نمایش واژه‌نامه}
برای اینکه واژه‌نامه خود را به صورت لیستی مرتب شده نمایش دهید، در جایی که می‌خواهید این لیست به نمایش درآید، باید از دستور
\begin{LTR}
\begin{myverbatim}
\printglossaries
\end{myverbatim}
\end{LTR}
استفاده کنید. به یاد داشته باشید از آنجایی که یک برنامه خارجی مرتب سازی مانند xindy می‌بایستی که عملیات مرتب‌سازی را انجام دهد،  یک بار اجرای برنامه برای این کار کافی نیست و خروجی‌ای به شما نخواهد داد. بنابراین لازم است که یکبار فایل خود را با دستور latex و یا xelatex اجرا کنید. سپس به یکی از سه طریق زیر عملیات مرتب‌سازی را انجام دهید
\begin{enumerate}
\item
\textbf{ استفاده از makeglossaries :}
همانطور که در بخش اول اشاره شد، به همراه این بسته یک \gls{متن آغازگر}ی وجود دارد که عملیات مرتب سازی را با استفاده از بسته‌ی makeindex انجام می‌دهد. برای این کار لازم است دستور زیر را در یک خط فرمان اجرا کنید
\begin{LTR}
\begin{myverbatim}
\makeglossaries <filename without .tex>
\end{myverbatim}
\end{LTR}
برای اجرای این دستور لازم است که Perl در سیستم شما اجرا شود، اگر این دستور اجرا نشد و شما Perl را نداشتید می‌توانید مستقیماً از یکی از دو دستور زیر در خط فرمان استفاده کنید.
\item
\textbf{استفاده مستقیم از بستهٔ xindy :}
برای استفاده از این بسته باید دستور زیر را در یک خط فرمان اجرا کنید.
\begin{LTR}
\begin{lstlisting}[morekeywords=newglossaryentry,numbers=none,frame=none,backgroundcolor=\color{white}]
xindy -L <Language> -C <encoding> -I xindy -M <style> -t <base>.glg -o <base>.gls <base>.glo
\end{lstlisting}
\end{LTR}
در فرمان بالا <style> نام فایل استایل xindy است که دارای پسوند .xdy می‌باشد. در حالت کلی همان اسم فایل شما خواهد بود.
<base> ها هم همینطور در حالت کلی همان اسم فایل شما خواهند بود.
به عنوان نمونه به مثال زیر توجه کنید.
\begin{LTR}
\begin{lstlisting}[morekeywords=newglossaryentry,numbers=none,frame=none,backgroundcolor=\color{white}]
xindy -L persian -C utf8 -I xindy -M mydoc -t mydoc.glg -o mydoc.gls mydoc.glo
\end{lstlisting}
\end{LTR}
\item
\textbf{استفادهٔ مستقیم از بستهٔ makeindex :}
در این حالت باید دستور زیر را در یک خط فرمان اجرا کنید
\begin{LTR}
\begin{lstlisting}[morekeywords=newglossaryentry,numbers=none,frame=none,backgroundcolor=\color{white}]
makeindex -s <style>.ist -t <base>.glg -o <base>.gls <base>.glo
\end{lstlisting}
\end{LTR}
به مثال زیر توجه کنید
\begin{LTR}
\begin{lstlisting}[morekeywords=newglossaryentry,numbers=none,frame=none,backgroundcolor=\color{white}]
makeindex -s mydoc.ist mydoc -t mydoc.glg -o mydoc.gls mydoc.glo
\end{lstlisting}
\end{LTR}

\end{enumerate}

 و در نهایت یکبار دیگر فایل خود را اجرا کنید (ممکن است لازم باشد این کار را یکبار دیگر نیز انجام دهید). حال نوشتار شما دارای یک واژه‌نامه است.
 
 بوسیله دستورات زیر می‌توانید نوع استایل واژه‌نامه و عنوان آن را تغییر دهید
 \begin{LTR}
\begin{myverbatim}
\glossarystyle{list}
\def\glossaryname{+rl[واژه نامه فارسی به انگلیسی]}
\printglossaries
\end{myverbatim}
\end{LTR}
پیش‌فرض‌های معمولی که برای استایل‌های واژه‌نامه موجود هستند عبارتند از:
\begin{LTR}
\begin{itemize}
\item listdotted
\item sublistdotted
\item list
\item altlist
\item long
\item super
\item tree
\end{itemize}
\end{LTR}
همچنین شما می‌توانید استایل دلخواه خود را ساخته و از آن استفاده کنید. نمونه زیر استایلی است که آقای دکتر مهدی امیدعلی معرفی کرده‌اند و به نظر من استایل مناسبی است.
 \begin{LTR}
\begin{myverbatim}
\newglossarystyle{mystyle}{%
% put the glossary in the itemize environment:
\renewenvironment{theglossary}{}{}%
% have nothing after \begin{theglossary}:
\renewcommand*{\glossaryheader}{}%
% have nothing between glossary groups:
\renewcommand*{\glsgroupheading}[1]{}%
\renewcommand*{\glsgroupskip}{}%
% set how each entry should appear:
\renewcommand*{\glossaryentryfield}[5]{%
%\item[] % bullet point
\glstarget{##1}{##2}% the entry name
\dotfill% the symbol in brackets
\space ##3 \\% the number list in square brackets
}%
% set how sub-entries appear:
\renewcommand*{\glossarysubentryfield}[6]{%
\glossaryentryfield{##2}{##3}{##4}{##5}{##6}}%
}
\end{myverbatim}
\end{LTR}
در ورژن‌های آتی این آموزش دربارهٔ جزئیات هر کدام از این دستورات بیشتر خواهم نوشت.

\twocolumn
\newpage
\glossarystyle{mylist1}
\def\glossaryname{واژه نامه فارسی به انگلیسی}
\printglossaries

\printindex
\onecolumn
\end{document}








