پرش به محتوا

لاتک/ویرایش چاپ

ویکی‎کتاب، کتابخانهٔ آزاد


لاتک

نسخه کنونی و قابل ویرایش این کتاب را می‌توانید در وبگاه ویکی‌کتاب در نشانی زیر بیابید
https://fa.wikibooks.org/wiki/%D9%84%D8%A7%D8%AA%DA%A9

شما اجازه کپی و پخش این اثر را تحت مجوز مستندات آزاد گنو دارید.

مقدمات و مبانی

پیش از خواندن این راهنما بهتر است لاتکس را روی رایانه خود نصب کنید. لازم است بدانید در این کتاب به قواعد لاتکس می‌پردازیم، یک سند لاتکس برای بار اول ایجاد می‌کنیم، در آخر به نام فایل‌ها و انواع آن‌ها نگاه می‌اندازیم.

نام برنامه تخ را آقای نوث به این علت تخ انتخاب کرد که سه حرف یونانی تاو (ت)، اپسیلون ( -ِ ) و خی (خ) را در کنار هم قرار داد تا اول واژه تخنه به معنی هنر دستی را معنی کند. این پیشوند در واژه انگلیسی تکنیکال به معنی فنی نیز استفاده شده است. اما دانشمند آمریکایی لسلی لمپورت بود که توانست بر پایه تخ، لا تخ را بسازد.

لاتخ (لاتکس) یک بسته ماکرو است که هدف آن ساده‌تر کردن حروف‌نگاری تکس مخصوصا برای فرمول‌های ریاضی است. نویسندگان زیادی الحاق‌هایی را به لاتکس افزوده‌اند که به آن‌ها بسته یا سبک گفته می‌شود. بعضی از این‌ها با توزیع‌های نرم‌افزار تکس/لاتکس پخش شده‌اند.

در لاتکس:

  • شما هنگامی که در حال ویرایش کردن هستید آخرین نسخه را نمی‌بینید
  • معمولا نیاز دارید که دستورهای لازم برای نشانه‌گذاری لاتکس را بدانید
  • گاهی اوقات سخت است که یک شکل خاص به سندتان بدهید


قالب متن

در این بخش به تکنیک‌های مختلف برای قالب دادن به متن می‌پردازیم. منظور از قالب همان شکل ظاهری متن است و شامل فهرستی از موضوعات می‌شود که کاملا گزینشی‌اند: استیل متن، فاصله خط، الخ. اگرچه قالب‌بندی در مورد پاراگراف و صفحه نیز اعتبار دارد ولی در اینجا تمرکزمان بر روی کلمات و جملات است.


فونت و رنگ

بسته رنگ‌ها از رنگ پشتیبانی می‌کند. با این بسته هم قادرید رنگ نوشته‌ها را به دلخواه خودتان تنظیم کنید هم رنگ پشت‌‌زمینه را. در مورد بیشتر سندها، خانواده‌های فونت، متن تاکیدی و کدگزاری فونت مهم هستند. سایر بخش‌ها برای ماکرونویس‌ها یا کاربردهای خاص نیاز می‌شود.

مقدمه

[ویرایش]

فونت‌های دیجیتالی تاریخچه‌ای دارند بس مفصل و پیچیده. لاتکس البته در اصل از فونت خودش موسوم به MetaFont استفاده می‌کرد. این فونت از ابداعات دکتر نوث است. خانواده فونتی که پیش‌فرضی برای تکس و دوستانش (از جمله لاتکس) وجود دارد، فونت Computer Modern است. این فونت‌ها کیفیت بالایی داشته و از نظر فنون چاپ، قابلیت‌های خوبی دارند.

کامپایلرهای استاندارد تکس به شما اجازه می‌دهند که بتوانید از فونت‌های دیگری نیز استفاده کنید. این فونت‌ها از انواع مختلف هستند مثل PostScript Type1/Type3 و Bitmap. فونت‌های Type1 فونت‌هایی هستند که گرافیک برداری داشته و در پی‌دی‌اف تکس از آن‌ها استفاده می‌شود. فونت‌های bitmap گرافیک تصویری داشته و معمولا کیفیت‌شان پایین است و با یک بزرگنمایی به آسانی مشخص می‌شود. فونت‌های Type3 را معمولا برای ادغام کردن با Bitmap استفاده می‌کنند. باید توجه کرد که فونت‌ها اول بار که نیاز هستند ساخته می‌شوند و زمان گردآوری‌شان (کامپایل) طولانی است.

با این حال سیستم فونت MetaFont سیتم کاملا پیچیده‌ای است ضمن اینکه امروزه اکثر فونت‌‌ها TrueType با پسوند (ttf) و OpenType با پسوند (otf) هستند. با کامپایلرهای امروزی تکس مثل زی‌تکس و لوآتکس قادرند می‌توانند از این فونت‌ها در سندهای لاتکس استفاده کنند. اگر قصد دارید در کامپایلرهای استاندارد کارتان را به خوبی انجام دهید، چاره‌ای ندارید جز اینکه از ابتدا این دو نوع فونت را به فونت قابل استفاده برای لاتکس (برای مثال به فونت Type1 ) تبدیل کنید.

خانواده فونت

[ویرایش]

فونت‌ها خانواده‌های مختلفی دارند مثل Times، Computer Modern، Arial و Courier. برای لاتکس فونت پیشفرض، Computer Modern Roman است.

تاکید

[ویرایش]

برای تاکید کردن روی یک واژه یا جمله خاص استفاده از فرمان \emph{text}است.

\emph{text}


فرمول‌های ریاضی

وقتی دونالد نوث سیستم تکس را می‌ساخت، یکی از اصلی‌ترین اهدافش این بود که چیزی ساخته باشد که با آن بتوان به سادگی فرمول‌های ریاضی را نوشت و در عین حال نسخه چاپ شده آن، ظاهری وزین داشته باشد. او موفق شد به هدفش برسد و موید این مطلب، محبوبیتی بود که تکس (و پس از آن لاتکس) در میان جامعه علمی به دست آورد. حروف‌چینی ریاضیات یکی از مهم‌ترین نقاط قوت لاتکس است. از طرف دیگر به دلیل برخورداری از نمادهای بسیار این حوزه بسیار وسیع است.

اگر به فرمول های ساده ریاضی نیاز دارید، لاتکس ساده همه را دارد.


وارد کردن واژه نامه و فهرست اختصارات با بسته glossaries

دیباچه

[ویرایش]

در این نوشتار قصد داریم تا شما را با نحوه ایجاد واژه‌نامه و فهرست اختصارات با استفاده از بسته glossaries آشنا سازیم. glossaries بسته‌ای است بسیار قدرتمند که توسط خانم Nicola Talbot با چنین هدفی نوشته شده است.

مزایا

[ویرایش]

در پاسخ به این سوال که این بسته چه مواردی را برای ما به ارمغان می‌آورد می‌توان موارد زیر را برشمرد:

  • اضافه نمودن و مرتب‌سازی واژه‌ها و اختصارات تعریف شده به صورت خودکار به فهرست واژگان و اختصارات. بر طبق این ویژگی کافی است که شما واژگان و اختصارات خود را در متن در مکان دلخواه استفاده کنید. بسته glossaries به صورت خودکار واژگان را به صورت مرتب شده در فهرست واژگان و اختصارات وارد می‌کند.
  • کنترل کامل بر روی واژگان و اختصارات تعریف شده در متن. به عنوان مثال اگر بخواهید اولین باری که از یک واژه یا اختصار در متن استفاده می‌کنید، معادل فارسی یا انگلیسی آن پاورقی بخورد، نیازی نیست به دنبال اولین مکان فراخوانی بگردید. بسته glossaries این کار را برای شما انجام می‌دهد، و علاوه بر این تمامی اقدامات لازم را بر روی واژه مورد نظر اعمال می‌کند.
  • آسان‌سازی تغییرات در متن. فرض کنید که شما عبارت Ad Hoc Network را در ابتدا شبکه اقتضایی ترجمه کردید. اکنون بنا به دلیلی تصمیم گرفتید معادل فارسی شبکه موردی را برگزینید، نیازی نیست که در تمام متن به دنبال این واژه بگردید و تک به تک آن را تغییر دهید، با استفاده از glossaries با یک بار تغییر کل واژه‌های درون متن به معادل جدید تبدیل خواهد شد.

گذری بر مراحل کار با بسته glossaries

[ویرایش]

برای وارد کردن واژه‌نامه و فهرست اختصارات توسط بسته glossaries مراحل زیر را باید طی نمود.

  1. وارد کردن بسته glossaries
  2. تنظیمات بسته glossaries و نحوه نمایش واژه‌نامه‌ها و فهرست اختصارات.
  3. تعریف واژه‌ها و اختصارات.
  4. استفاده از واژه‌ها و اختصارات تعریف شده در متن اصلی
  5. چاپ واژه‌نامه و فهرست اختصارات در مکانی دلخواه در متن اصلی
  6. اجرای xelatex و xindy برای تولید واژه‌نامه و فهرست اختصارات.

در استفاده از مواردی که در این نوشتار خواهد آمد، حتما نکات زیر را مدنظر قرار دهید.

  • بسته‌های Latex مورد استفاده شما حتما باید بروز باشد، به خصوص بسته‌های xepersian، bidi، glossaries و hyperref.
  • کدهایی که در این نوشتار آمده است، توسط glossaries نسخه ۴٫۰۶ به بعد پشتیبانی می‌شود.
  • نحوه استفاده ما از بسته glossaries به گونه‌ای است که به موتور xindy نیاز خواهیم داشت. اگر از TexLive استفاده می‌کنید نباید نگران باشید، چون این موتور به صورت پیش‌فرض در Texlive قرار دارد.
  • برای اطمینان از درست کار کردن ابزارهای مورد نیاز برای بسته glossaries، در صورتی که روند کامپایل بیان شده در بخش نحوه کامپایل را بر روی فایل‌های لینک زیر اعمال کنید، می‌بایست خروجی pdf مشتمل بر فهرست اختصارات و واژه‌نامه بدون رخداد هیچ‌گونه خطایی تولید گردد.

نمایی از خروجی pdf مثال ذکر شده در شکل .... نشان داده شده است.

در ادامه هر یک از مراحل یاد شده را شرح خواهیم داد.

وارد کردن بسته glossaries

[ویرایش]

در گام نخست شما می‌بایست بسته glossaries را وارد کنید. در کل سه قانون برای ترتیب وارد کردن بسته‌ها وجود دارد که به شرح زیر است.

  1. بسته xepersian حتما حتما باید آخرین بسته‌ای باشد که فراخوانی می‌شود. این قانون کاملا کلی است و در هر متنی که شما قصد نوشتن آن را با استفاده از xepersian دارید باید رعایت شود.
  2. بسته hyperref جزو آخرین بسته‌هایی باید باشد که فراخوانی می‌شود. این قانون هم کلی است.
  3. بسته glossaries حتما باید بعد از hyperref فراخوانی شود.

پس خواهیم داشت.

\usepackage{hyperref}
\usepackage[sanitizesort=false,sanitize={name=false},nomain,xindy,acronym]{glossaries}
\usepackage{xepersian}

optionsهایی که در فراخوانی بسته glossaries فعال شده است به شرح زیر است.

  • sanitizesort=false
  • sanitize={name=false}
  • nomain
  • xindy: با این option تعیین می‌کنیم که برای مرتب‌سازی واژه‌ها و اختصارات از موتور xindy استفاده شود. با استفاده از این موتور Latex می‌تواند کلمات فارسی را نیز مرتب سازد.
  • acronym: با قرار دادن acronym نشان می‌دهیم که می‌خواهیم علاوه بر واژه‌نامه فهرست اختصارات نیز در متن داشته باشیم.

لازم به تذکر است که حتی اگر شما نمی‌خواهید از فهرست اختصارات در متن استفاده کنید، این option را فعال نگهدارید، چون در بخش‌های بعدی فرض شده است که در شما می‌خواهید اختصارات را نیز با همین روش تولید کنید. البته این فرض خللی در کار شما ایجاد نخواهد کرد.

تنظیمات بسته glossaries

[ویرایش]

نکته: شما می‌توانید از خواندن این بخش صرف‌نظر کنید. فقط کافی است که تمامی دستوراتی که در فایل قرار داده شده در لینک زیر قبل از \begin{document} تعریف شده است را در فایل خود وارد کنید. در صورتی‌که نحوه نمایش فعلی مناسب است، نیازی نیست خود را درگیر جزئیات بیان شده در این بخش بکنید.

در این مرحله می‌خواهیم نحوه نمایش واژه‌نامه‌ها، رفتاری که با واژه‌ها و اختصارات در متن اصلی داریم را تعریف کنیم. دقت کنید که بسته glossaries برای تمامی موارد یاد شده پیش‌فرض‌هایی دارد، اما برخی از این پیش‌فرض‌ها مطابق زبان فارسی نیست که ما سعی می‌کنیم آن‌ها را مناسب برای یک نوشتار فارسی بکنیم. این بحث را در چند زیربخش دنبال می‌کنیم.

من با این فرض جلو می‌روم که شما می‌خواهید واژه‌های خود را در دو واژه‌نامه فارسی به انگلیسی و انگلیسی به فارسی قرار دهید. از سوی دیگر یک فهرست اختصارات نیز می‌خواهید داشته باشید. به عبارت دیگر شما در کل سه نوع glossary می‌خواهید توسط بسته glossaries ایجاد کنید. در ابتدا باید برای هر یک از این سه نوع glossary یاد شده، سه نام انتخاب کنید، اجازه بدهید این نام‌ها را به صورت زیر انتخاب کنیم.

  • english نامی که برای واژه‌نامه انگلیسی به فارسی انتخاب می‌کنیم.
  • persian نامی که برای واژه‌نامه فارسی به انگلیسی انتخاب می‌کنیم.
  • abrr نامی که برای فهرست اختصارات انتخاب می‌کنیم.

تغییر نحوه نمایش فهرست اختصارات و واژه‌نامه‌ها

[ویرایش]

در گام نخست، ما باید استایل هر یک از glossaryهای سه‌گانه را تعیین کنیم. باز هم تاکید می‌کنم که اگر شما این کار را نکنید بسته glossaries از پیش‌فرض‌های خود استفاده می‌کند. به منظور تعریف استایل glossary از دستور newglossarystyle می‌بایست استفاده کنیم. این دستور شامل بازنویسی برخی از فرامین بسته glossaries به منظور تغییر شکل glossary می‌شود. بدین منظور سه استایل به نام‌های mylistFa برای استفاده در glossary نوع persian، استایل mylistEn برای استفاده در glossary نوع english و استایل mylistAbbr برای استفاده در glossary نوع abrr تعریف می‌کنیم. به عنوان مثال استایل به صورت زیر تعریف می‌شود.

\newglossarystyle{mylistFa}{
	\renewenvironment{theglossary}{}{}
	\renewcommand*{\glossaryheader}{}
	\renewcommand*{\glsgroupheading}[1]{\vskip 12mm\section*{  \glsgetgrouptitle{##1}} }
	\renewcommand*{\glsgroupskip}{}
	\renewcommand*{\glossaryentryfield}[5]     {\noindent \Glsentryname{##1} \dotfill \space \Glsentryplural{##1} \vskip 0mm}
	\renewcommand*{\glossarysubentryfield}[6]{\glossaryentryfield{##2}{##3}{##4}{##5}{##6}}
}

برای دستیابی به تعریف دو استایل دیگر به لینک قرار داده شده در قسمت قبل مراجعه کنید.

همان‌طور که مشاهده می‌کنید دستوراتی که در هر استایل بکار رفته است مشابه یکدیگر هستند. در مورد این دستورات می‌توانید مطالب بیشتری را در راهنمای بسته glossaries بخوانید. اما فقط یکسری نکات کلی:

  • با تعریف دوباره دستور glsgroupheading، این‌گونه تنظیم می‌شود که کلمات و اختصارات در گروه‌هایی با سرگروهی حرف ابتدایی واژه و یا اختصار دسته‌بندی می‌شوند.
  • در مورد واژه‌نامه انگلیسی به فارسی و فهرست اختصارات به دلیل این‌که سرگروه‌ها حروف انگلیسی هستند آن‌ها را در یک محیط LTR قرار دادیم، تا از سمت چپ نوشته شوند.

تولید فایل‌های موقت

[ویرایش]

در ادامه تنظیمات سه دستور زیر را وارد می‌کنیم.

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

برای اجرا xindy بر روی فایل .tex و تولید واژه‌نامه‌ها و فهرست اختصارات و فهرست نمادها یکسری فایل تعریف شده است. Latex داده‌های مربوط به واژه نامه و .. را در این فایل‌ها نگهداری می‌کند. برای مثال در glossary از نوع english، دو فایل با پسوندهای gls و glo تعریف شده است. هنگامی که شما واژه‌های خود را در متن اصلی فراخوانی می‌کنید، دو فایل هم نام با فایل اصلی tex اما با پسوند glo و gls تولید می‌شود. در مرحلهٔ بعدی (در بخش‌های بعدی در مورد این مرحله به طور کامل توضیح خواهیم داد)، xindy بر روی این دو فایل اجرا می‌شود. این دو فایل در برگیرنده اطلاعاتی در مورد واژه مورد استفاده است. xindy با استفاده از این اطلاعات واژه‌ها را بر اساس حروف الفبا مرتب نموده و برای قرار گیری در فهرست واژگان آماده می‌سازد، xindy اطلاعات حاصله را در فایلی با پسوند glg ذخیره می‌سازد.

برای دو glossary دیگر یعنی persian و abrr برای هر کدام سه فایل با پسوندهای مختلف تعریف شده است. در نهایت برای تولید هر سه glossary نه فایل هم‌نام با فایل tex اصلی اما با پسوندهای یاد شده ایجاد می‌شود.

مهم‌ترین option دستور newglossary نام glossary تعریف شده است. دقت کنید که این نام در title مربوط به هر glossary خواهد آمد.

اولین فراخوانی واژه

[ویرایش]

در بخش‌های بعدی خواهیم گفت که در متن اصلی شما می‌توانید با دستورات gls و glspl واژه‌ها و اختصارات خود را فراخوانی کنید. بر طبق استاندارد می‌خواهیم اولین باری که واژه فراخوانی می‌شود به صورت خودکار معادل آن پاورقی بخورد. خوشبختانه بسته glossaries از این قابلیت پشتیبانی می‌کند. برای فعال‌سازی این قابلیت دو گروه دستور زیر را می‌بایست در قسمت تنظیمات وارد کنیم.

\defglsentryfmt[english]{%
	\glsgenentryfmt
		\ifglsused{\glslabel}{}{\LTRfootnote{\glsentryname{\glslabel}}}
}
\defglsentryfmt[abrr]{%
	\glsgenentryfmt
		\ifglsused{\glslabel}{}{\LTRfootnote{\glsentryplural{\glslabel}}}
}

همان‌طور که مشاهده می‌کنید در این دو دستور بیان شده است که اگر شما از دستورات gls و glspl در متن استفاده کنید، در اولین بار استفاده به صورت خودکار معادل آن پاورقی بخورد.

بازتعریف محیط printglossary و تعریف محیط printabbreviation

[ویرایش]

در این قسممت محیط استاندارد printglossary را بازتعریف می‌کنیم. هدف از این بازتعریف این است که هر دو واژه‌نامه با یک دستور و با استایل مشخص وارد شوند. در ضمن محیطی نیز به عنوان printabbreviation برای تولید فهرست اختصارات تعریف می‌کنیم. در ضمن هر دو محیط یادشده را به فهرست مطالب و قسمت bookmarkها اضافه می‌کنیم.

\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{}
	\baselineskip = \baselineskipVar
}%
\newcommand{\printabbreviation}{
	\baselineskip=.75cm
	\glossarystyle{mylistAbbr}
	\cleardoublepage
	\phantomsection
	\addcontentsline{toc}{chapter}{فهرست اختصارات}
	\Oldprintglossary[type=abrr]	
	\clearpage
	\baselineskip = \baselineskipVar
}%

دقت کنید که ما در این‌جا همه تنظیمات لازم را نیاوردیم. برخی از دستورات توضیح داده نشده است. تمامی این دستورات به صورت یکپارچه در مثالی که در شروع این نوشتار ارایه شد، تمامی این دستورات آورده شده است.

تعریف واژه‌ها و اختصارات

[ویرایش]

در این مرحله باید واژه‌ها و اختصارات را تعریف کنیم. دقت کنید که واژه‌ها و اختصاراتی که در این قسمت تعریف می‌کنید در واژه‌نامه و متن وارد نمی‌شود مگر آن‌که از آن استفاده کنید. واژه‌ها و اختصارات را می‌توانید در فایل‌های جداگانه تعریف کنید و ان را با دستور input وارد کنید. به عنوان مثال سه واژه به صورت زیر تعریف می‌کنیم.

\newglossaryentry{Accuracy}
{name={Accuracy},
plural={دقت},
description={}
}

\newglossaryentry{Achievable}
{name={Achievable},
plural={قابل دستیابی},
description={}
}

\newglossaryentry{Action}
{name={Action},
plural={کنش},
description={}
}

هر واژه یک برچسب یکتا باید برای خود داشته باشد. برای هر واژه یک name و plural خواهیم داشت. name معادل انگلیسی و plural معادل فارسی واژه مورد نظر است. یک قسمت به نام description نیز وجود دارد که به صورت دلخواه می‌تواند پر شود.

برای تعریف یک اختصار نیز به صورت زیر عمل می‌کنیم. به عنوان مثال در ادامه دو اختصار را تعریف می‌کنیم.

\newacronym{MOMT}{MO-MT}{Mobile Originated - Mobile Terminated}
\newacronym{MS}{MS}{Mobile Station}

قسمت اول تعریف، برچسب اختصار است، دو قسمت بعدی نیز به ترتیب name و plural اختصار است. در این‌جا plural در حقیقت بازشده اختصار مورد نظر است.

نکات

  • بین هر تعریف واژه و یا اختصار بهتر است یک خط خالی قرار دهید.
  • شما می‌توانید به عنوان مثال واژه‌ها و اختصارات را در یک فایل جدا تعریف کنید و سپس در قبل از begin{document} آن را وارد کنید. برای مثال فرض کنید که در فایل mygloss.tex واژه‌ها تعریف شده است، اکنون کافی است که:
\documentclass{report}
......................
......................
\input{mygloss}
\begin{document}

استفاده از واژه‌ها و اختصارات

[ویرایش]

در بسته glossaries روش‌های مختلفی برای فراخوانی واژه‌ها و اختصارات قرار داده شده است. در ادامه به صورت مختصر این مطلب را توضیح می‌دهیم. دقت کنید که آرگومان ورودی تمامی دستورات یاد شده، label واژه و یا اختصار تعریف شده است.

با این دستور plural واژه یاد شده در مکانی که این دستور را قرار داده‌اید وارد می‌شود. مثال فرض کنید در قسمت واژه‌نامه، واژه‌ای به صورت زیر تعریف می‌کنیم.

\newglossaryentry{Action}
{name={Action},
plural={کنش},
description={}
}

اکنون اگر در فایل tex خود می‌نویسیم.

یک ربات در مجموع تعدادی \glspl{Action} می‌تواند انجام دهد

خروجی pdf به صورت زیر خواهد شد.

یک ربات در مجموع تعدادی کنش می‌تواند انجام دهد

در ضمن اگر این اولین باری است که از این واژه استفاده می‌کنیم، به طور خودکار معادل انگلیسی واژه استفاده شده یعنی کنش که Action است، در پاورقی وارد می‌شود.

با استفاده از این دستور قسمت name واژه یا اختصار تعریف شده، وارد متن می‌شود. پرواضح است که این دستور بیشتر برای وارد کردن اختصار در متن مورد استفاده قرار می‌گیرد. فرض کنید که یک اختصار به صورت زیر در قسمت اختصارات تعریف می‌کنیم.

\newacronym{IWLAN}{I-WLAN}{Interworking Wireless Local Network}

اکنون می‌توانیم به صورت زیر در متن اختصار مورد را فراخوانی کنیم.

در شبکه‌های \gls{IWLAN} می‌توان میزان تاخیر را

خروجی pdf به صورت زیر خواهد شد.

در شبکه‌های I-WLAN می‌توان میزان تاخیر را

باز نیز اگر این اولین باری است که از این اختصار استفاده می‌شود، معادل آن یعنی Interworking Wireless Local Network پاورقی می‌خورد.

*glspl

[ویرایش]

این دستور به مانند glspl عمل می‌کند. یعنی قسمت plural واژه را در متن می‌گذارد، واژه را در واژه‌نامه‌ها وارد می‌کند. اما اگر اولین مرتبه‌ای است که واژه فراخوانی می‌شود آن را پاورقی نمی‌زند. به عنوان مثال متن زیر را در نظر بگیرید.

یک ربات در مجموع تعدادی \glspl*{Action} می‌تواند انجام دهد. اما \glsplp{Action} یک ربات را می‌توان

در خروجی pdf، در هر دو حالت قسمت plural واژه با برچسب Action قرار می‌گیرد. اما با این‌که در اولین جمله اولین‌باری است که کلمه Action آمده است، این کلمه پاورقی نمی‌خورد. و اولین بار فراخوانی واژه Action در جمله دوم در نظر گرفته می‌شود و همان جا نیز پاورقی ایجاد خواهد شد.

دستور *gls کاملا شبیه به دستور gls است، با این تفاوت که کلمه مورد نظر پاورقی نمی‌خورد. مطالب بیان شده در قسمت *glspl در فهم این موضوع می‌تواند شما را یاری کند.

glsentryname

[ویرایش]

این دستور به مانند gls است. با این تفاوت که فقط در متن قسمت name اختصار یا واژه مورد نظر وارد می‌شود، و واژه مورد نظر نه پاورقی می‌خورد و نه در واژه‌نامه‌ها وارد می‌شود.

glsentryplural

[ویرایش]

این دستور به مانند glspl است. با این تفاوت که فقط در متن قسمت plural اختصار یا واژه مورد نظر وارد می‌شود، و واژه مورد نظر نه پاورقی می‌خورد و نه در واژه‌نامه‌ها وارد می‌شود.

glsuseri

[ویرایش]

با استفاده از این دستور واژه یا اختصار نه در متن ظاهر می‌شود و نه پاورقی می‌خورد، فقط به واژه‌نامه‌ها و یا فهرست اختصارات اضافه می‌شود.

نکات

[ویرایش]

در وارد کردن واژه‌ها و اختصارات به نکات زیر دقت کنید.

  • در قسمت caption جدول و شکل از gls و glspl استفاده نکنید. به جای آن از *glspl و *gls استفاده کنید. چرا که اگر از gls و glspl در قسمت captionاستفاده کنید، و فهرست تصاویر و جداول را وارد کنید، همواره اولین جایی که واژه مورد نظر بکار می‌رود، در ابتدای نوشتار در فهرست جداول و اشکال است، و شما مشاهده می‌کنید که در این فهرست‌ها پاورقی ظاهر می‌شود که کار درستی نیست. شکل روبه‌رو را مشاهده کنید.
  • اتفاق یاد شده برای فهرست مطالب نیز رخ می‌دهد. پس در عنوان chapter، section، subsection و subsubsection به هیچ‌وجه از gls و glspl استفاده نکنید. در ضمن به دلیل مشکلی که در قسمت bookmark بسته hyperref با glossaries دارد، از *gls و *glspl نیز نمی‌توانید استفاده کنید. در صورت استفاده bookmarkها به درستی نمایش داده نمی‌شوند. پس تنها مجبور هستید که از glsentryplural و glsentryname استفاده کنید.
  • اگر بخواهیم مثلا یک کلمه در واژه نامه را Indexکنیم، مثلا بنویسیم، \index{\glspl{Water}‎}‎، این دستور index درست عمل نمی‌کند. نویسنده بسته glossaries در این باره این طور گفته است.

If you inspect the .idx file you will see that it contains the following: \indexentry{\glsentryplural{StrictlyStable}|hyperpage}{۱} \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}}

پس برای وارد کردن واژه‌ها در نمایه به جای دستور index باید دستورات زیر را به ترتیب برای gls و glspl استفاده نمود.

\expandafter\index\expandafter{\glsentryname{.......}}
\expandafter\index\expandafter{\glsentryplural{.......}}

چاپ واژه‌نامه و فهرست اختصارات

[ویرایش]

با توجه به بازتعریف محیط‌های وارد کردن واژه‌نامه و فهرست اختصارات در قسمت تنظیمات، در این قسمت کافی است هر کجا که می‌خواهید دو واژه‌نامه فارسی به انگلیسی و انگلیسی به فارسی وارد شود، دستور \printglossary را وارد کنید. برای فهرست اختصارات نیز در مکان دلخواه دستور \printabbreviation را وارد کنید.

  • بر طبق استاندارد بهتر است واژه‌نامه‌ها بعد از قسمت مراجع و قبل از نمایه وارد شود.
  • فهرست اختصارات بهتر است بعد از فهرست جداول و اشکال در ابتدای متن وارد شود.

نحوه کامپایل

[ویرایش]

بعد از طی مراحل قبلی، به آخرین مرحله می‌رسیم. در آخرین مرحله می‌بایست فایل خود را کامپایل کنیم، و موتور xindy را بر روی آن اجرا کنیم. بدین منظور گام‌های یاد شده در ادامه را انجام دهید.

  1. ابتدا یک بار فایل خود را با xelatex کامپایل کنید. اگر در editor مورد استفاده شما، برای کامپایل xelatex تنظیم شده است، کافی است گزینه quick build را اجرا کنید.

نکته: در صورتی که از texmaker یا texstudio و یا دیگر ویرایشگرها استفاده می‌کنید، تنظیم پیش‌فرض pdflatex است نه xelatex. برای xelatex کردن تنظیم پیش‌فرض به صفحه زیر مراجعه کنید.

  1. در این مرحله باید سه دستور زیر را بر روی فایل اصلی اعمال کنید.

xindy -L persian-variant1 -C utf8 -I xindy -M %.xdy -t %.glg -o %.gls %.glo

xindy -L persian-variant1 -C utf8 -I xindy -M %.xdy -t %.blg -o %.bls %.blo

xindy -L english -C utf8 -I xindy -M %.xdy -t %.alg -o %.acr %.acn

برای اجرای این سه دستور کافی است که این سه دستور را در ویرایشگر خود تعریف کنید. بدین منظور برای مثال در ویرایشگر Texstudio به صورت زیر عمل کنید.

  • از منوی option گزینه configure Texstudio را انتخاب کنید.
  • به قسمت Build بروید.
  • در قسمت user command یک دستور با یک نام دلخواه دستوری به صورت زیر را وارد کنید.

xindy -L persian-variant1 -C utf8 -I xindy -M %.xdy -t %.glg -o %.gls %.glo | xindy -L persian-variant1 -C utf8 -I xindy -M %.xdy -t %.blg -o %.bls %.blo | xindy -L english -C utf8 -I xindy -M %.xdy -t %.alg -o %.acr %.acn

  • پس تایید برای اجرا به منوی tools و قسمت users رفته و در آن جا بر روی دستوری که تعریف کردید کلیک کنید.
  • با کلیک بر روی این دستور هر سه دستور باد شده اجرا می‌گردند.
  1. در مرحله کامپایل بعدی، دو بار دیگر دستور quick build را اجرا کنید.

اکنون در فایل خروجی pdf واژه‌ها و اختصارات به صورت مرتب شده در واژه‌نامه‌ها و فهرست اختصارات قرار می‌گیرد.


وارد کردن کد در متن با بسته listings

در این نوشتار قصد داریم تا در مورد نحوه وارد کردن کد در متن توسط بسته listings صحبت کنیم.

اهداف و مزایا

[ویرایش]

فرض کنید که شما یک برنامه به زبانی مانند C، JAVA، MATLAB و ... نوشته اید که می‌خواهید به هر علتی کد آن را در داخل متن وارد کنید. احتمالا قبل از آشنایی با بسته listings شما کد خود را در متن کپی و paste‌ می کردید و زمان زیادی را صرف این می کردید که شکل و شمایل آن به مانند حالتی گردد که در محیط های برنامه نویسی مشاهده می کنید. اما توسط بسته listings‌ براحتی و به سادگی هر چه تمام تر می توانید فایل کد خود را در متن با همان فرمتی که شما در نرم افزار های برنامه نویسی مشاهده می‌کنید وارد کنید. در این نوشتار قصد داریم تا شما را با نحوه کارکرد این بسته آشنا سازیم.

وارد کردن بسته listings

[ویرایش]

در شروع کار بسته listings را با دستور usepackage فراخوانی کنید. دقت کنید که این بسته را با بسته listing اشتباه نکنید. البته در این مورد حتما به نکات زیر دقت کنید.

  1. اگر در حال نوشتن یک متن فارسی با استفاده از بسته xepersian هستید، دقت کنید که بسته xepersian حتما حتما باید آخرین بسته ای باشد که فراخوانی می شود. این قانون کاملا کلی است و در هر متنی که شما قصد نوشتن آن را با استفاده از xepersian دارید باید رعایت شود.
  2. بسته hyperref جزو آخرین بسته هایی باید باشد که فراخوانی می شود. این قانون هم کلی است.
  3. بسته listings قبل از دو بسته یاد شده باید وارد شود.
  4. به صورت پیش فرض کدهای وارد شده توسط بسته listings به صورت سیاه و سفید وارد متن می شوند. اگر می‌خواهید کدهای شما در متن به صورت رنگی باشد، مثلا کامنت ها به رنگ سبز باشند، باید بسته color‌ و xcolor را وارد کنید. البته وارد کردن این دو بسته کافی نیست بلکه باید یکسری تنظیماتی که در قسمت های بعدی بیان خواهد شد را نیز انجام دهید.

پس خواهیم داشت.

\usepackage[usenames,dvipsnames]{color,xcolor}
\usepackage{listings}
\usepackage{hyperref}
\usepackage{xepersian}

وارد کردن کد در متن

[ویرایش]

فرض کنید که یک کد MATLAB در فایلی به نام myFun.m نوشته اید که می خواهید آن را در متن وارد کنید. با استفاده از بسته listings کد خود را به دو شیوه می‌توانید در متن وارد کنید.

  1. وارد کردن فایل کد
  2. وارد کردن کد به صورت خام

وارد کردن فایل کد

[ویرایش]

در هر جایی از متن که می خواهید، کد شما وارد گردد، از دستور lstinputlisting استفاده کنید. به عنوان مثال برای وارد کردن همان فایل myFun.m باید به صورت زیر عمل کنید.

\begin{latin}
\lstinputlisting[language=Matlab]{myFun.m}
\end{latin}

نکات:

  • Latex به دنبال فایل myFun.m در پوشه فعلی (پوشه ای که فایل tex در آن قرار دارد) می‌گردد. اگر فایل myFun.m در مسیر دیگری قرار دارد باید مسیر کامل را در آرگومان ورودی دستور lstinputlisting مشخص کنید. به عنوان مثال اگر فایل شما در شاخه‌ای به نام Code در پوشه فایل tex شما وجود دارد باید به صورت زیر عمل کنید.
\begin{latin}
\lstinputlisting[language=Matlab]{Code/myFun.m}
\end{latin}
  • تنظیمات بسته listings را می‌توانید در زمان فراخوانی lstinputlisting وارد کنید. برای مثال در این جا من فقط از تنظیم تعیین زبان (language) استفاده کردم، و آن را بر روی زبان Matlab قرار دادم. این option به listings‌ کمک می‌کند تا کد شما را در قالب زبان MATLAB وارد کند.
  • اگر می خواهید کد در داخل یک متن فارسی وارد کنید، حتما آن را درون محیط latin قرار دهید. یعنی آن را در بین \begin{latin} و \end{latin} قرار دهید.
  • در صورتی که می خواهید کد را در یک متن انگلیسی وارد کنید باید خطوط \begin{latin} و \end{latin} را حذف کنید.
  • دقت کنید که به همراه اسم فایل، پسوند فایل را نیز وارد کنید.

وارد کردن به صورت خام

[ویرایش]

در روش دوم، شما می‌توانید اصل کد را در متن وارد کنید. در این جا نیز به مانند حالت قبل خود بسته listings تمامی تنظیمات مربوط به استایل کد را انجام می‌دهد. به عنوان مثال خطوط زیر را در نظر بگیرید.

\begin{latin}
\begin{lstlisting}[language=C]
#include <stdio.h>
#define N 10
/* Block
 * comment */
 
int main()
{
    int i;
 
    // Line comment.
    puts("Hello world!");
 
    for (i = 0; i < N; i++)
    {
        puts("LaTeX is also great for programmers!");
    }
 
    return 0;
}
\end{lstlisting}
\end{latin}

اگر به خروجی فایل pdf نگاهی بیاندازید خواهید دید که کدی در قالب زبان C در متن وارد شده است.

وارد کردن کد در متن
  • کد خالص در محیطی به نام lstlisting وارد می‌شود. یعنی کد شما باید بین \begin{lstlisting} و \end{lstlisting} قرار گیرد.
  • به مانند حالت قبل، اگر می‌خواهید کد را در متن فارسی وارد کنید حتما آن بین یک محیط latin قرار دهید.
  • تنظیمات بسته listings در این روش به دو صورت انجام م شود
  1. توسط دستور lstset. این دستور را باید قبل از محیط lstlisting وارد کنید. برای مثال ذکر شده خواهیم داشت.
\begin{latin}
\lstset{language=C}
\begin{lstlisting}
......
......
\end{lstlisting}
\end{latin}
شما می توانید دستور lstset‌ را قبل از \begin{document} نیز قرار دهید. تنظیمات lstset‌ تا زمانی که شما دوباره lstset‌ را بکار نبرید، پابرجا باقی خواهد ماند.
  1. به عنوان تنظیمات محیط lstlisting در داخل [] بعد از \begin{lstlisting}.

تنظیمات

[ویرایش]

نحوه وارد کردن تنظیمات

[ویرایش]

همان طور که پیشتر ذکر شد، شما دو روش برای وارد کردن تنظیمات بسته listings دارید.

  • استفاده از دستور lstset.
  • وارد کردن به عنوان آرگومان دستورات وارد کردن کد.

در مثال زیر از هر دو شیوه استفاده شده است.

\begin{latin}
\lstset{emph={pMax,pMin,transP,waitingUser,waitQueue},emphstyle=\color{red},backgroundcolor=\color{codeColor},lineskip=.2cm}
\lstinputlisting[language=Java]{Code/threadQueue.java}
\end{latin}

با استفاده از دستور lstdefinestyle شما می‌توانید چندین استایل برای وارد کردن کد تعریف کنید و به فراخور کد از یکی از آن ها استفاده کنید. برای مثال در کد زیر دو نوع استایل تعریف شده است.

\lstdefinestyle{customc}{
  belowcaptionskip=1\baselineskip,
  breaklines=true,
  frame=L,
  xleftmargin=\parindent,
  language=C,
  showstringspaces=false,
  basicstyle=\footnotesize\ttfamily,
  keywordstyle=\bfseries\color{green!40!black},
  commentstyle=\itshape\color{purple!40!black},
  identifierstyle=\color{blue},
  stringstyle=\color{orange},
}

\lstdefinestyle{customasm}{
  belowcaptionskip=1\baselineskip,
  frame=L,
  xleftmargin=\parindent,
  language=[x86masm]Assembler,
  basicstyle=\footnotesize\ttfamily,
  commentstyle=\itshape\color{purple!40!black},
}

در نهایت می‌توانید در هر جایی که می‌خواهید کد خود را وارد کنید هر یک از استایل ها را فراخوانی کنید.

\begin{latin}
\lstinputlisting[style=customasm]{sched.s}
\end{latin}

مهم‌ترین تنظیمات

[ویرایش]

بسته listings‌ تنظیمات زیادی دارد. ما در این مجال به برخی از مهم‌ترین آن ها اشاره می‌کنیم.

  • language: زبانی برنامه‌ای که می‌خواهید وارد کنید. لیست کاملی از زبان‌های برنامه نویسی که listings‌پشتیبانی می‌کند در لینک زیر ارایه شده است.
  • emph: کلماتی که به عنوان emph در تنظیمات تعریف می شود، با استایل تعیین شده توسط emphstyle در کد وارد می شوند. به عنوان مثال کد زیر را در نظر بگیرید.
\begin{latin}
\lstset{emph={pMax,pMin,transP,waitingUser,waitQueue},emphstyle=\color{red}}
\lstinputlisting[language=Java]{threadQueue.java}
\end{latin}

در مثال فوق، در صورتی که کلمات pMax,pMin,transP,waitingUser,waitQueue در کد threadQueue.java یافت شوند، این کلمات به رنگ قرمز نمایش داده خواهد شد.

  • numbers: که می‌تواند یکی از مقادیر none و left و right را به خود بگیرد. در صورتی که مقادیر left یا right را انتخاب کنید، خطوط برنامه شماره گذاری می‌شود و شماره ها در سمت چپ یا راست خواهد آمد.
  • numbersep: تعیین فاصله افقی شماره ها از کد
  • numberstyle: تعیین استایل شماره ها. مثلا numberstyle=\tiny\color{mygray} شماره ها به رنگ mygray و به اندازه tiny نمایش داده می شوند.
  • stepnumber: برای مثال اگر مقدار stepnumber=2 باشد، آن‌گاه یک خط در میان شماره گذاری انجام می‌شود.
  • lineskip: فاصله خطوط به مقدار lineskip از یکدیگر افزایش خواهد یافت.
  • backgroundcolor: رنگ پیش زمینه کادری که در آن کدها وارد می‌شوند.
  • basicstyle: اندازه کدها در متن. برای مثال: basicstyle=\footnotesize
  • commentstyle: استایل وارد کردن کامنت در کد. به عنوان مثال commentstyle=\color{mygreen} رنگ کامنت های وارد شده در کد را به رنگ mygreen تبدیل می کند.
  • showspaces: فاصله ها (space) در کد را با کاراکتری معین، تعیین می کند. مقدار این تنظیم می تواند true یا false باشد.
  • showtabs: tap ها را در متن مشخص می کند. مقدار این تنظیم می تواند true یا false باشد.
  • morekeywords: در هر زبان برنامه نویسی یکسری از واژه ها به عنوان keywordstyle آن زبان محسوب می شود. در بسته listings، morekeywords استاندارد هر زبان قرار داده شده است. شما می توانید به دلخواه خود یکسری keyword جدید به keyword‌های استاندارد اضافه کنید.
  • deletekeywords: کلمه‌ای که در این تنظیم مشخص می کنید از بین کلمات کلیدی زبان انتخاب شده حذف می شود. به عنوان مثال اگر شما زبان MATLAB را انتخاب کرده باشید، و deletekeywords={clear} باشد، آن‌گاه کلمه کلیدی clear از بین کلمات کلیدی MATLAB در وارد کردن کد به صورت موقت حذف می شود.
  • frame: اضافه کردن یک کادر بدور کد. این تنظیم می تواند یکی از مقادیر none|leftline|topline|bottomline|lines|single|shadowbox را داشته باشد. بسته Listings تنظیمات زیادی برای تنظیم کادر دور محیط کد فراهم آورده است که با مراجعه به راهنمای آن می توانید از آن ها استفاده کنید.

برخی نکات

[ویرایش]

وارد کردن روابط ریاضی در کد

[ویرایش]

فرض کنید که می خواهید در قسمت کامنت کدی که در متن وارد کرده اید، یک عبارت در mathmode داشته باشید. مثلا بنویسید \alpha + d_{i} . ولی می‌خواهید این عبارت به صوررت درست یعنی $\alpha + d_{i}$ در متن ظاهر شود. برای این کار کافی است که تنظیم texcl یا mathescape را فعال کنید.

\begin{latin}
\begin{lstlisting}[mathescape=true]
// calculate  $a_{ij}$
$a_{ij} = a_{jj}/a_{ij} + \alpha$;
\end{lstlisting}
\end{latin}

با اجرای Latex بر روی فایل tex، خروجی به صورت شکل ... خواهد بود.

پرونده:CmathmodeFig
وارد کردن کد حاوی عبارت ریاضی


اضافه کردن watermark با بسته draftwatermark

watermark متن و یا تصویری است که در پیش زمینه (background) یک نوشتار یا عکس دیگر قرار می‌گیرند و بیانگر حق کپی رایت آن سند است. نکته مهم در قرار دادن watermark‌ این است که watermark‌ حتی المقدور نباید به قسمت های اصلی متن و یا تصاویر موجود در آسیبی وارد نکنند.

در این نوشتار قصد داریم تا نحوه وارد کردن watermark در متن را در Latex با استفاده از بسته draftwatermark تشریح کنیم.

وارد کردن بسته draftwatermark

[ویرایش]

در ابتدا باید در فایل tex خود قبل از \begin{document} با استفاده از دستور usepackage بسته draftwatermark را وارد کنید. در وارد کردن این بسته به نکات بیان شده در ... در مورد نحوه وارد کردن بسته‌ها حتما دقت کنید.

\usepackage{draftwatermark}

دقت کنید که به صورت پیش‌فرض watermark وارد شده توسط بسته draftwatermark رنگی نیست. اگر می‌خواهید watermark وارد شده رنگی هم باشد، باید بسته‌های color و xcolor را نیز فراخوانی کنید.

\usepackage{color,xcolor}

تنظیمات بسته draftwatermark

[ویرایش]

سه تنظیم مهم برای draftwatermark وجود دارد که عبارت اند از:

  • SetWatermarkLightness: تعیین کننده میزان روشنایی watermark که مقداری است بین صفر تا یک. صفر سیاه مطلق و ۱ بیانگر سفید مطلق است. برای مثال:
\SetWatermarkLightness{0.78}
:
  • SetWatermarkAngle: بیانگر زاویه متن watermark در صفحه است. در بیشتر مواقع دوست داریم که این زاویه ۴۵ درجه باشد. آرگومان ورودی این تنظیم، مقدار زاویه بر حسب درجه است.
\SetWatermarkAngle{45}
:
  • SetWatermarkScale: میزان مقیاس متن watermark را مشخص می‌کند.
\SetWatermarkScale{1.5}
:
  • SetWatermarkText: متنی که می خواهید watermark شود را در این قسمت مشخص می کنید.
\SetWatermarkText{\lr{Draft}}
:

در این مورد به چند نکته دقت کنید.

  1. این تنظیم را می‌توانید قبل از \begin{document} و یا بعد از آن قرار دهید.
  2. متنی که در این تنظیم می‌اید به عنوان watermark قرار می ‌گیرد. این موضوع تا هنگامی است که دوباره از این دستور استفاده کنید. یعنی هر وقت که در وسط متن، متن watermark را تغییر دهید، از آن صفحه به بعد متن watermark عوض می‌شود.
  3. اگر از بسته xepersian‌ برای فارسی نویسی استفاده می‌کنید و می خواهید یک عبارت انگلیسی watermark شود حتما باید آن را در داخل \lr{} قرار دهید.

وارد کردن watermark به صورت رنگی

[ویرایش]

اگر می‌خواهید watermark به صورت رنگی وارد متن شما شود، یک راه آن بازتعریف دستور SetWatermarkText به صورت زیر است.

\let\oldSetWatermarkText\SetWatermarkText
\renewcommand{\SetWatermarkText}[1]{\oldSetWatermarkText{\textbf{\textcolor{orange!30}{#1}}}}

برخی نکات:

  • در این حالت watermark شما به رنگ orange!30 در متن ظاهر خواهد شد.
  • در این حالت دیگر دستور SetWatermarkLightness کار نمی کند، برای تنظیم روشنایی از ! استفاده کنید، مثل نمونه ای که آورده شده است.
  • دو دستور یاد شده را قبل از \begin{document} و بعد از فراخوانی آخرین بسته وارد کنید.
  • برای رنگی کردن، لازم است که بسته‌های color و xcolor را نیز فراخوانی کنید.