%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Contents: Customising LaTeX output % $Id: custom.tex 172 2008-09-25 05:26:50Z oetiker $ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{تنظیم شخصی لاتک} \begin{intro} فرمان‌هایی را که تا به حال آموخته‌اید مناسب نوشتار‌‌ی برای بسیاری از افراد است. با این که ممکن است ظاهر خیلی شیک نداشته باشند ولی از اصول حروف‌چینی استاندارد پیروی می‌کنند که باعث سهولت خواندن آنها می‌شود. با این وجود شرایطی وجود دارد که لاتک فرمانی مناسب نیاز شما ندارد یا این که خروجی حاصل از فرما‌ن‌های موجود مطلوب شما نیست. در این فصل، سعی می‌کنم روش راهنمایی لاتک برای تولید خروجی‌هایی را توضیح دهم که با روش پیش‌فرض آن متفاوت است. \end{intro} \section{فرمان‌ها، محیط‌ها، و بسته‌های جدید} شاید تا به حال توجه کرده‌باشید که تمام فرمان‌هایی را که در این مقدمه توضیح داده‌ام در یک جعبه قرار دارند و این فرمان‌ها در نمایهٔ آخر کتاب قرار دارند. به جای این که از فرمان‌های استاندارد لاتک برای دستیابی این منظور استفاده کنم، \wi{بسته}‌ای را تعریف کرده‌ام که در آن تعاریف و فرمان‌ها و محیط‌هایی را گنجانده‌ام. حالا به راحتی می‌توانم بنویسم: \begin{example} \begin{lscommand} \ci{dum} \end{lscommand} \end{example} در این مثال، از یک محیط جدید \ei{lscommand}، که مسئولیت رسم یک کادر پیرامون فرمان را دارد، و یک فرمان \ci{ci}، که مسئولیت درج فرمان و قرار دادن مؤلفهٔ متناظر را در نمایه دارد،استفاده کرده‌ام. می‌توانید این موضوع را با نگاه کردن به فرمان \ci{dum} در نمایهٔ آخر کتاب ببینید، که در آنجا خواهید دید که شمارهٔ تمام صفحاتی را که در آن فرمان \ci{dum} آمده است مشخص شده است. هرگاه بخواهم که دیگر فرمان‌ها در کادر نمایش داده نشوند به سادگی تنها باید تعریف محیط \lr{\texttt{lscommand}} را تغییر دهم. این کار به وضوح بسیار ساده‌تر از این است که تمام متن را برای تغییر فرمان‌ها بررسی کنم. \subsection{فرمان‌های جدید} برای افزودن فرمان مناسب کار خودتان به شکل زیر عمل کنید \begin{lscommand} \ci{newcommand}\verb|{|% \emph{name}\verb|}[|\emph{num}\verb|]{|\emph{definition}\verb|}| \end{lscommand} به طور پایه‌ای، فرمان نیاز به دو آرگومان دارد: نام فرمان (\lr{\emph{name}}) و تعریف فرمان (\lr{\emph{definition}}). آرگومان \lr{\emph{num}} که در براکت قرار می‌گیرد اختیاری است و تعداد آرگومان‌هایی را که فرمان می‌پذیرد مشخص می‌کند (حداکثر ۹ تا). حالت پیش‌فرض آن صفر است که هیچ آرگومانی را نمی‌پذیرد. دو مثال زیر کمک می‌کنند که این موضوع را بهتر درک کنید. مثال اول فرمان جدیدی به نام \ci{tnss} را مشخص می‌کند که اثر آن درج \lr{``The Not So Short Introduction to \LaTeXe.''} است. چنین فرمانی موقعی مفید است که عنوان کتاب در نوشتار‌ مکرراً تکرار می‌شود. \begin{example} \newcommand{\tnss}{The not so Short Introduction to \LaTeXe} This is ``\tnss'' \ldots{} ``\tnss'' \end{example} مثال دوم فرمان دیگری را تعریف می‌کند که تنها یک آرگومان می‌پذیرد. مقدار \verb|#1| جایگزین آرگومان مشخص شده می‌شود. اگر می‌خواهید بیش از یک آرگومان داشته باشید از \verb|#2| و غیره استفاده کنید. \begin{example} \newcommand{\txsit}[1] {This is the \emph{#1} Short Introduction to \LaTeXe} % in the document body: \begin{itemize} \item \txsit{not so} \item \txsit{very} \end{itemize} \end{example} لاتک به شما اجازهٔ ساختن فرمانی را نمی‌دهد که قبلاً تعریف شده است. اما فرمان ویژه‌ای وجود دارد که با استفاده از آن می‌توانید یک فرمان از پیش‌تعریف شده را دوباره تعریف کنید: \ci{renewcommand}. این فرمان دقیقاً همان فرم فرمان \verb|\newcommand| را دارد. در بعضی مواقع ممکن است بخواهید از فرمان \ci{providecommand} استفاده کنید. سبک این فرمان همانند فرمان \ci{newcommand} است، اما اگر فرمان مربوطه قبلاً تعریف شده باشد لاتک این فرمان را در نظر نمی‌گیرد. چند نکته در مورد فاصلهٔ خالی بعد از یک فرمان لاتک باید در نظر داشته باشید. صفحهٔ \pageref{whitespace} را برای اطلاعات بیشتر ببینید. \subsection{محیط‌های جدید} مشابه فرمان \verb|\newcommand|، فرمانی برای ساختن محیط‌ها وجود دارد \ci{newenvironment}. این فرمان فرم زیر را می‌پذیرد: \begin{lscommand} \ci{newenvironment}\verb|{|% \emph{name}\verb|}[|\emph{num}\verb|]{|% \emph{before}\verb|}{|\emph{after}\verb|}| \end{lscommand} دوباره \ci{newenvironment} می‌تواند یک آرگومان اختیاری داشته باشد. محتویات \lr{\emph{before}} قبل از متن محیط پردازش می‌شود. محتویات \lr{\emph{after}} بعد از فرمان \LRE{\verb|\end{|\lr{\emph{name}}\verb|}|} اجرا می‌شوند. در مثال زیر نحوهٔ استفاده از فرمان \ci{newenvironment} شرح داده شده است. \begin{example} \newenvironment{king} {\rule{1ex}{1ex}% \hspace{\stretch{1}}} {\hspace{\stretch{1}}% \rule{1ex}{1ex}} \begin{king} My humble subjects \ldots \end{king} \end{example} آرگومان \lr{\emph{num}} همانند آرگومان همنام فرمان \verb|\newcommand| مورد استفاده قرار می‌گیرد. لاتک بررسی می‌کند که یک محیط از پیش‌تعریف شده را دوباره تعریف نکنید. اگر می‌خواهید یک محیط قبلی را از نو تعریف کنید از فرمان \ci{renewenvironment} استفاده کنید. روش استفاده از آن همانند \ci{newenvironment} است. فرمان‌های استفاده شده در این مثال بعداً شرح داده خواهند شد. برای فرمان \ci{rule} صفحهٔ \pageref{sec:rule}، برای \ci{stretch} صفحهٔ \pageref{cmd:stretch}، و برای \ci{hspace} صفحهٔ \pageref{sec:hspace} را ببینید. \subsection{فاصله‌های اضافه} هنگام تعریف محیط‌های جدید ممکن است با فاصله‌های زیاد قبل و بعد از آن مشکل داشته باشید؛ به عنوان مثال وقتی که می‌خواهید یک محیط عنوان تعریف کنید که تورفتگی آن به اندازهٔ پاراگراف بعدی باشد. فرمان \ci{ignorespaces} بلوک ابتدایی محیط را وادار می‌کند تا فاصلهٔ بعد از اجرای بلوک ابتدایی را نادیده بگیرد. بلوک انتهایی کمی پیچیده‌تر است زیرا این بلوک شامل پردازش‌های ویژه‌ای است. با فرمان \ci{ignorespacesafterend}، لاتک یک فرمان \ci{ignorespaces} را بعد از پایان پردازش اجرا می‌کند. \begin{example} \newenvironment{simple}% {\noindent}% {\par\noindent} \begin{simple} See the space\\to the left. \end{simple} Same\\here. \end{example} \begin{example} \newenvironment{correct}% {\noindent\ignorespaces}% {\par\noindent% \ignorespacesafterend} \begin{correct} No space\\to the left. \end{correct} Same\\here. \end{example} \subsection{خط فرمان لاتک} اگر روی سیستمی مانند لینوکس کار می‌کنید، ممکن است از \lr{Makefile}ها برای ساختن پروژهٔ لاتک خود استفاده کنید. در این راستا جالب است که نسخهٔ متفاوتی از نوشتار‌ خود را با اجرای لاتک در خط فرمان درست کنید. اگر ساختار زیر را به نوشتار‌ خود اضافه کنید: \setLR \begin{verbatim} \usepackage{ifthen} \ifthenelse{\equal{\blackandwhite}{true}}{ % "black and white" mode; do something.. }{ % "color" mode; do something different.. } \end{verbatim} \setRL حال می‌توایند لاتک را به شکل زیر فراخوانی کنید: \setLR \begin{verbatim} latex '\newcommand{\blackandwhite}{true}\input{test.tex}' \end{verbatim} \setRL ابتدا فرمان \verb|\blackandwhite| تعریف می‌شود و آنگاه فایل اصلی خوانده می‌شود. با قرار دادن \verb|\blackandwhite| برابر \lr{false} نسخهٔ رنگی نوشتار‌ تولید خواهد شد. \subsection{بسته‌های شخصی} اگر فرمان‌ها و محیط‌های زیادی را تعریف کنید، سرآغاز فایل شما بسیار طولانی خواهد شد. در این حالت مناسب‌تر است که یک بستهٔ لاتک شامل فرمان‌ها و محیط‌های شخصی خود را بسازید. آنگاه می‌توانید از فرمان \ci{usepackage} برای فراخوانی بستهٔ خود در نوشتار‌ استفاده کنید. \begin{figure}[!htbp] \setLR \begin{lined}{\textwidth} \begin{verbatim} % Demo Package by Tobias Oetiker \ProvidesPackage{demopack} \newcommand{\tnss}{The not so Short Introduction to \LaTeXe} \newcommand{\txsit}[1]{The \emph{#1} Short Introduction to \LaTeXe} \newenvironment{king}{\begin{quote}}{\end{quote}} \end{verbatim} \end{lined} \setRL \caption{مثال بسته} \label{package} \end{figure} نوشتن یک بسته شامل قرار دادن محتویات سرآغاز فایل در یک فایل با پسوند \lr{\texttt{.sty}} است. یک فرمان ویژه وجود دارد \begin{lscommand} \ci{ProvidesPackage}\verb|{|\emph{package name}\verb|}| \end{lscommand} \noindent که در ابتدای بسته قرار می‌گیرد. فرمان \verb|\ProvidesPackage| به لاتک نام بسته را می‌گوید و لاتک را قادر می‌سازد که پیغام خطایی را هنگام نوشتن یک بستهٔ از پیش تعریف شده بدهد. شکل \ref{package} %\LRE{\hyperref[package]{1.6}} یک مثال کوچک از یک بسته را نشان می‌دهد که شامل فرمان‌های تعریف شده در مثال‌های بالا است. \section{قلم‌ها و اندازهٔ آنها} \subsection{فرمان تغییر قلم} \romanindex{font}\romanindex{font size}\index{قلم}\index{اندازهٔ قلم} لاتک قلم و اندازهٔ مناسب را بسته به ساختار منطقی نوشتار‌ انتخاب می‌کند (بخش، پانوشت، \ldots). گاهی اوقات نیاز است که قلم و اندازهٔ آن را به صورت دستی تغییر دهیم. برای این کار از فرمان‌های ارائه شده در جدول‌های \ref{fonts} %\LRE{\hyperref[fonts]{1.6}} و \ref{sizes} %\LRE{\hyperref[sizes]{2.6}} استفاده کنید. اندازهٔ واقعی هر قلم به طبقهٔ نوشتار و گزینه‌های آن بستگی دارد. جدول \ref{tab:pointsizes} %\LRE{\hyperref[tab:poitsizes]{3.6}} مقدار دقیق را برای هر کدام از طبقه‌های استاندارد نشان می‌دهد. \begin{example} {\small The small and \textbf{bold} Romans ruled} {\Large all of great big \textit{Italy}.} \end{example} یک امکان مهم لاتک این است که شکل قلم‌ها مستقل هستند. یعنی این که می‌توانید اندازهٔ قلم را تغییر دهید و همزمان شکل سیاه و خوابیده را داشته باشید. در \femph{سبک ریاضی} می‌توانید فرمان‌های تغییر قلم را با خروج اضطراری از سبک ریاضی به صورت متن عادی بنویسید. اگر می‌خواهید از قلم دیگری برای نوشتن فرمول‌ها استفاده کنید باید از فرمان‌های دیگری استفاده کنید؛ به جدول \ref{mathfonts} %\LRE{\hyperref[mathfonts]{4.6}} مراجعه کنید. \begin{table}[!bp] \caption{قلم‌ها} \label{fonts} \begin{lined}{12cm} % % Alan suggested not to tell about the other form of the command % eg \verb|\sffamily| or \verb|\bfseries|. This seems a good thing to me. % \setLR \begin{tabular}{@{}ll@{\qquad}ll@{}} \fni{textrm}\verb|{...}| & \textrm{\wi{\lr{roman}}}& \fni{textsf}\verb|{...}| & \textsf{\wi{\lr{sans serif}}}\\ \fni{texttt}\verb|{...}| & \texttt{typewriter}\\[6pt] \fni{textmd}\verb|{...}| & \textmd{medium}& \fni{textbf}\verb|{...}| & \textbf{\wi{\lr{bold face}}}\\[6pt] \fni{textup}\verb|{...}| & \textup{\wi{\lr{upright}}}& \fni{textit}\verb|{...}| & \textit{\wi{\lr{italic}}}\\ \fni{textsl}\verb|{...}| & \textsl{\wi{\lr{slanted}}}& \fni{textsc}\verb|{...}| & \textsc{\wi{\lr{Small Caps}}}\\[6pt] \ci{emph}\verb|{...}| & \emph{emphasized} & \fni{textnormal}\verb|{...}| & \textnormal{document} font \end{tabular} \setRL \bigskip \end{lined} \end{table} \begin{table}[!bp] \romanindex{font size} \caption{اندازهٔ قلم} \label{sizes} \begin{lined}{13cm} \setLR \begin{tabular}{@{}ll} \fni{tiny} & \tiny tiny font \\ \fni{scriptsize} & \scriptsize very small font\\ \fni{footnotesize} & \footnotesize quite small font \\ \fni{small} & \small small font \\ \fni{normalsize} & \normalsize normal font \\ \fni{large} & \large large font \end{tabular}% \qquad\begin{tabular}{ll@{}} \fni{Large} & \Large larger font \\[5pt] \fni{LARGE} & \LARGE very large font \\[5pt] \fni{huge} & \huge huge \\[5pt] \fni{Huge} & \Huge largest \end{tabular} \setRL \bigskip \end{lined} \end{table} \begin{table}[!tbp] \caption{اندازهٔ واقعی قلم در طبقهٔ استاندارد}\label{tab:pointsizes} \label{tab:sizes} \begin{lined}{12cm} \begin{latin} \begin{tabular}{llll} \multicolumn{1}{c}{size} & \multicolumn{1}{c}{10pt (default) } & \multicolumn{1}{c}{11pt option} & \multicolumn{1}{c}{12pt option}\\ \verb|\tiny| & 5pt & 6pt & 6pt\\ \verb|\scriptsize| & 7pt & 8pt & 8pt\\ \verb|\footnotesize| & 8pt & 9pt & 10pt \\ \verb|\small| & 9pt & 10pt & 11pt \\ \verb|\normalsize| & 10pt & 11pt & 12pt \\ \verb|\large| & 12pt & 12pt & 14pt \\ \verb|\Large| & 14pt & 14pt & 17pt \\ \verb|\LARGE| & 17pt & 17pt & 20pt\\ \verb|\huge| & 20pt & 20pt & 25pt\\ \verb|\Huge| & 25pt & 25pt & 25pt\\ \end{tabular} \end{latin} \bigskip \end{lined} \end{table} \begin{table}[!bp] \caption{قلم‌های ریاضی} \label{mathfonts} \setLR \begin{lined}{0.7\textwidth} \begin{tabular}{@{}ll@{}} \fni{mathrm}\verb|{...}|& $\mathrm{Roman\ Font}$\\ \fni{mathbf}\verb|{...}|& $\mathbf{Boldface\ Font}$\\ \fni{mathsf}\verb|{...}|& $\mathsf{Sans\ Serif\ Font}$\\ \fni{mathtt}\verb|{...}|& $\mathtt{Typewriter\ Font}$\\ \fni{mathit}\verb|{...}|& $\mathit{Italic\ Font}$\\ \fni{mathcal}\verb|{...}|& $\mathcal{CALLIGRAPHIC\ FONT}$\\ \fni{mathnormal}\verb|{...}|& $\mathnormal{Normal\ Font}$\\ \end{tabular} %\begin{tabular}{@{}lll@{}} %\textit{Command}&\textit{Example}& \textit{Output}\\[6pt] %\fni{mathcal}\verb|{...}|& \verb|$\mathcal{B}=c$|& $\mathcal{B}=c$\\ %\fni{mathscr}\verb|{...}|& \verb|$\mathscr{B}=c$|& $\mathscr{B}=c$\\ %\fni{mathrm}\verb|{...}|& \verb|$\mathrm{K}_2$|& $\mathrm{K}_2$\\ %\fni{mathbf}\verb|{...}|& \verb|$\sum x=\mathbf{v}$|& $\sum x=\mathbf{v}$\\ %\fni{mathsf}\verb|{...}|& \verb|$\mathsf{G\times R}$|& $\mathsf{G\times R}$\\ %\fni{mathtt}\verb|{...}|& \verb|$\mathtt{L}(b,c)$|& $\mathtt{L}(b,c)$\\ %\fni{mathnormal}\verb|{...}|& \verb|$\mathnormal{R_{19}}\neq R_{19}$|& %$\mathnormal{R_{19}}\neq R_{19}$\\ %\fni{mathit}\verb|{...}|& \verb|$\mathit{ffi}\neq ffi$|& $\mathit{ffi}\neq ffi$ %\end{tabular} \bigskip \end{lined} \setRL \end{table} در مورد فرمان‌های اندازهٔ قلم، \wi{آکولاد} نقش مهمی دارد. از آنها برای ساختن یک گروه استفاده می‌شود. یک گروه تاثیر بیشتر فرمان‌های لاتک را محدود می‌کند. \romanindex{grouping}\index{كیی@گروه} \begin{example} He likes {\LARGE large and {\small small} letters}. \end{example} فرمان‌های اندازهٔ قلم روی فاصلهٔ خالی نیز تاثیر دارند اما تنها در موقعی که پایان پاراگراف قبل از پایان تاثیر فرمان تغییر قلم باشد. بنابراین توجه داشته باشید که \verb|}| مربوط به پایان فرمان تغییر قلم زودتر از پایان پاراگراف ظاهر نشود. به مکان فرمان \ci{par} در دو مثال زیر توجه کنید.\footnote{\lr{\texttt{\bs{}par}} معادل با یک خط خالی است.} \begin{example} {\Large Don't read this! It is not true. You can believe me!\par} \end{example} \begin{example} {\Large This is not true either. But remember I am a liar.}\par \end{example} اگر می‌خواهید یک فرمان تغییر اندازهٔ قلم را برای کل یک پاراگراف یا کل یک نوشتار فعال کنید، می‌توانید از محیط مناسب آن استفاده کنید. \begin{example} \begin{Large} This is not true. But then again, what is these days \ldots \end{Large} \end{example} \noindent این کار شما را از نوشتن تعداد زیادی آکولاد بی‌نیاز می‌کند. \subsection{خطر، ویل رابینسون، خطر} همان‌طور که در ابتدای این فصل گفته شد، شلوغ کردن فایل خود با فرمان‌هایی از این دست خطرناک است زیرا با روح لاتک در تناقض است که می‌گوید ساختار منطقی را از تغییرات بصری جدا کنید. یعنی اگر می‌خواهید از یک فرمان تغییر اندازهٔ قلم چندین بار در نوشتار خود استفاد کنید باید از \verb|\newcommand| برای تعریف یک فرمان منطقی تغییر قلم استفاده کنید. \begin{example} \newcommand{\oops}[1]{% \textbf{#1}} Do not \oops{enter} this room, it's occupied by \oops{machines} of unknown origin and purpose. \end{example} این رهیافت دارای این دستاورد است که در مراحل بعد برای تغییر این نمایش بصری کافی است که تعریف آن را تغییر دهید تا این که در کل فایل خود بدنبال متن \verb|\textbf| بگردید و برای هر کدام از آنها تصمیم بگیرید که باید تغییر کند یا نه. \subsection{توصیه} به عنوان پایان سفر به دنیای قلم‌ها و اندازهٔ آنها، توصیه‌ای را بیان می‌کنیم:\nopagebreak \setLR \begin{quote} \underline{\textbf{Remember\Huge!}} \textit{The} \textsf{M\textbf{\LARGE O} \texttt{R}\textsl{E}} fonts \Huge you \tiny use \footnotesize \textbf{in} a \small \texttt{document}, \large \textit{the} \normalsize more \textsc{readable} and \textsl{\textsf{beautiful} it bec\large o\Large m\LARGE e\huge s}. \end{quote} \setRL \begin{quote} \underline{\textbf{به یاد داشته باشید\Huge!}} {\farsifontnavaar هر چقدر از} {\farsifontsayeh قلم‌های بیشتری} {\farsifontpook در نوشتار} {\farsifontscheherazade استفاده کنید} \nastaliq{نوشتار شما زیباتر و خواناتر خواهد شد.} \end{quote} \section{فاصله‌گذاری} \subsection{فاصلهٔ خط‌ها} \romanindex{line spacing}\index{فاصلهٔ خط‌ها} اگر می‌خواهید فاصلهٔ بین خط‌ها بیشتر از حالت معمولی باشد می‌توانید این کار را با قرار دادن فرمان زیر در سرآغاز فایل انجام دهید \begin{lscommand} \ci{linespread}\verb|{|\emph{factor}\verb|}| \end{lscommand} از \verb|\linespread{1.3}| برای فاصلهٔ یک‌ونیم برابر و از \verb|\linespread{1.6}| برای فاصلهٔ دوبرابر استفاده کنید. فاصلهٔ نرمال یک برابر است.\romanindex{double line spacing}\index{فاصلهٔ خط دوبرابر} توجه داشته باشید که اثر فرمان \ci{linespread} شدید است و مناسب چاپ نیست. بنابراین اگر دلیل قانع کننده دارید می‌توانید از این فرمان استفاده کنید: \begin{lscommand} \verb|\setlength{\baselineskip}{1.5\baselineskip}| \end{lscommand} \begin{example} {\setlength{\baselineskip}% {1.5\baselineskip} This paragraph is typeset with the baseline skip set to 1.5 of what it was before. Note the par command at the end of the paragraph.\par} This paragraph has a clear purpose, it shows that after the curly brace has been closed, everything is back to normal. \end{example} \subsection{شکل پاراگراف}\label{parsp} در لاتک دو پارامتر وجود دارند که شکل پاراگراف را تغییر می‌دهند. با قرار دادن تعریفی شبیه به \setLR \begin{code} \ci{setlength}\verb|{|\ci{parindent}\verb|}{0pt}| \\ \verb|\setlength{|\ci{parskip}\verb|}{1ex plus 0.5ex minus 0.2ex}| \end{code} \setRL در سرآغاز فایل ورودی می‌توانید شکل پاراگراف‌ها را تغییر دهید. این دو فرمان فاصلهٔ بین دو پاراگراف را بیشتر می‌کنند و تورفتگی پاراگراف را صفر می‌کنند.. قسمت \lr{\texttt{plus}} و \lr{\texttt{minus}} از طول به لاتک می‌گوید فاصلهٔ بین پاراگراف‌ها را می‌تواند برای قرار گرفتن درست در صفحه کم یا زیاد کند. در قارهٔ اروپا، پاراگراف‌ها با فاصله از هم نوشته می‌شوند ولی تورفتگی ندارند. اما توجه داشته باشید که این فرمان بر فهرست مطالب نیز تاثیر دارد. فاصلهٔ بین خط‌های فهرست مطالب نیز تغییر می‌کند. برای اجتناب از این کار، می‌توانید این دو فرمان را از سرآغاز حذف کنید و به بعد از \verb|\tableofcontents| انتقال دهید، یا این که اصلاً از آنها استفاده نکنید زیرا کتاب‌های حرفه‌ای از تورفتگی به جای فاصله برای مشخص کردن پاراگراف‌ها استفاده می‌کنند. اگر می‌خواهید پاراگرافی را که تورفتگی ندارد دارای تورفتگی کنید از فرمان \begin{lscommand} \ci{indent} \end{lscommand} \noindent در ابتدای پاراگراف استفاده کنید.\footnote{برای تورفته کردن اولین پاراگراف هر بخش از بستهٔ \pai{indentfirst} که جزئی از کلاف \lr{tools} است استفاده کنید.} به وضوح این کار موقعی موثر است که \verb|\parindent| برابر صفر تعریف نشده باشد. برای نوشتن یک پاراگراف بدون تورفتگی از فرمان \begin{lscommand} \ci{noindent} \end{lscommand} \noindent در ابتدای پاراگراف استفاده کنید. این کار موقعی که می‌خواهید یک متن را بدون داشتن بخش بنویسید مفید است. \subsection{فاصله افقی} \label{sec:hspace} لاتک فاصلهٔ بین کلمه‌ها و جمله‌ها را به طور خودکار تنظیم می‌کند. برای افزایش فاصلهٔ افقی از فرمان \index{\lr{horizontal}!\lr{space}}\index{فاصله!افقی} \begin{lscommand} \ci{hspace}\verb|{|\emph{length}\verb|}| \end{lscommand} \noindent استفاده کنید. اگر می‌خواهید این فاصله حتی در ابتدا و انتهای خط باقی بماند از \verb|\hspace*| به جای \verb|\hspace| استفاده کنید. مقدار \lr{\emph{length}} در ساده‌ترین حالت تنها یک عدد به اضافهٔ یک کمیت است. مهمترین کمیت‌ها در جدول \ref{units} %\LRE{\hyperref[units]{5.6}} ارائه شده‌اند. \romanindex{units}\romanindex{dimensions}\index{قیی@کمیت} \index{بعد} \begin{example} This\hspace{1.5cm}is a space of 1.5 cm. \end{example} \suppressfloats \begin{table}[tbp] \caption{کمیت‌های تک} \label{units}\index{\lr{units}} \begin{latin} \begin{lined}{9.5cm} \begin{tabular}{@{}ll@{}} \texttt{mm} & millimetre $\approx 1/25$~inch \quad \demowidth{1mm} \\ \texttt{cm} & centimetre = 10~mm \quad \demowidth{1cm} \\ \texttt{in} & inch $=$ 25.4~mm \quad \demowidth{1in} \\ \texttt{pt} & point $\approx 1/72$~inch $\approx \frac{1}{3}$~mm \quad\demowidth{1pt}\\ \texttt{em} & approx width of an `M' in the current font \quad \demowidth{1em}\\ \texttt{ex} & approx height of an `x' in the current font \quad \demowidth{1ex} \end{tabular} \bigskip \end{lined} \end{latin} \end{table} \label{cmd:stretch} فرمان \begin{lscommand} \ci{stretch}\verb|{|\emph{n}\verb|}| \end{lscommand} \noindent یک فاصلهٔ کشیده تولید می‌کند. این فاصله کل فاصلهٔ باقیماندهٔ خط را پر می‌کند. اگر چند فرمان \LRE{\verb|\hspace{\stretch{|\lr{\emph{n}}\verb|}}|} در یک خط قرار بگیرند، هرکدام مقداری متناسب با فاکتور کشیدگی خود اشغال می‌کند. \begin{example} x\hspace{\stretch{1}} x\hspace{\stretch{3}}x \end{example} وقتی که فاصلهٔ افقی را به همراه متن به کار می‌برید، مناسب است که فاصله را متناسب با اندازهٔ قلم تعیین کنید. این کار را می‌توان با کمیت وابسته به قلم \lr{\texttt{em}} و \lr{\texttt{ex}} تعیین کرد: \begin{example} {\Large{}big\hspace{1em}y}\\ {\tiny{}tin\hspace{1em}y} \end{example} \subsection{فاصله عمودی} فاصلهٔ بین پاراگراف‌ها، بخش‌ها، زیربخش‌ها، \ldots\ به صورت خودکار توسط لاتک تعیین می‌شود. هر وقت که لازم است، فاصلهٔ عمودی \femph{بین دو پاراگراف} را می‌توان با فرمان زیر تولید کرد: \begin{lscommand} \ci{vspace}\verb|{|\emph{length}\verb|}| \end{lscommand} این فرمان به طور نرمال با یک خط فاصلهٔ خالی بین دو پاراگراف قرار می‌گیرد. اگر می‌خواهید این فاصله در ابتدا یا انتهای صفحه محفوظ بماند، از شکل ستاره‌دار این فرمان، \verb|\vspace*|، به جای \verb|\vspace| استفاده کنید. \romanindex{vertical space}\index{فاصلهٔ عمودی} از فرمان \verb|\stretch|، به همراه \verb|\pagebreak| برای نوشتن متن در آخرین سطر یک صفحه یا وسط صفحه استفاده کنید. \begin{code} \begin{verbatim} Some text \ldots \vspace{\stretch{1}} This goes onto the last line of the page.\pagebreak \end{verbatim} \end{code} فاصلهٔ اضافی بین دو سطر از یک پاراگراف یا یک جدول با فرمان زیر تولید می‌شود. \begin{lscommand} \ci{\bs}\verb|[|\emph{length}\verb|]| \end{lscommand} با \ci{bigskip} و \ci{smallskip} می‌توانید یک فاصلهٔ عمودی از پیش‌ تعریف شده را بدون نگرانی از مقدار دقیق آنها تولید کنید. \section{طرح صفحه} %\begin{latin} \begin{figure}[!hp] \begin{center} \begin{latin} \makeatletter\@mylayout\makeatother \end{latin} \end{center} \vspace*{1.8cm} \caption{پارامتر‌های طرح صفحه} \label{fig:layout} \cih{footskip} \cih{headheight} \cih{headsep} \cih{marginparpush} \cih{marginparsep} \cih{marginparwidth} \cih{oddsidemargin} \cih{paperheight} \cih{paperwidth} \cih{textheight} \cih{textwidth} \cih{topmargin} \end{figure} %\end{latin} \romanindex{page layout}\index{طرح صفحه} لاتک اجازه می‌دهد \wi{اندازهٔ صفحه} \romanindex{paper size} را با فرمان \verb|\documentclass| تعیین کنید. در این صورت لاتک \wi{حاشیه}ٔ \romanindex{margins} مناسب را به طور خودکار تعیین می‌کند، اما گاهی اوقات اندازهٔ پیش‌فرض مطلوب شما نیست. به طور طبیعی می‌توان آنها را تغییر داد. %no idea why this is needed here ... \thispagestyle{fancyplain} شکل \ref{fig:layout} %\LRE{\hyperref[fig:layout]{2.6}} تمام پارامترهای قابل تغییر را نشان می‌دهد. این شکل با بستهٔ \pai{layout} از کلاف \lr{tools} تولید شده است.% \Footnote{\CTANref|macros/latex/required/tools|} \textbf{دست نگهدارید!} \ldots قبل از این که اندازهٔ صفحه را کوچک یا بزرگ کنید کمی فکر کنید. همانند دیگر چیزها در لاتک، دلایل قانع کننده‌ای برای تغییر ندادن اندازهٔ پیش‌فرض وجود دارد. مطمئناً، نسبت به صفحهٔ \lr{MS Word}، صفحهٔ پیش‌فرض لاتک باریک‌تر است. اما نگاهی به یک کتاب مورد علاقهٔ خود بیندازید\footnote{منظورم یک کتاب واقعی است که توسط یک انتشارات معتبر چاپ شده باشد.} و تعداد حروف موجود در یک سطر را بشمارید. خواهید دید که این تعداد حدود ۶۶ است. حال همین تعداد را در صفحهٔ لاتک محاسبه کنید. خواهید دید که این تعداد هم حدود ۶۶ است. تجربه نشان داده است که اگر این تعداد بیش از ۶۶ باشد خواندن سطر مشکل است. دلیل این موضوع این است که رفتن دید از انتهای یک سطر به ابتدای سطر دیگر در سطرهای با بیش از ۶۶ حرف سخت است. به همین دلیل است که روزنامه‌ها هم چند ستونی چاپ می‌شوند. بنابراین توجه داشته باشید که اگر اندازهٔ صفحه را تغییر دهید، زندگی را برای خوانندگان مقاله یا کتاب سخت کرده‌اید. ولی روش تغییر را به شما خواهم گفت. لاتک دو فرمان برای این کار دارد. این فرمان‌ها در سرآغاز ظاهر می‌شوند. اولین فرمان به هرکدام از پارامترها مقدار ثابتی نسبت می‌دهد: \begin{lscommand} \ci{setlength}\verb|{|\emph{parameter}\verb|}{|\emph{length}\verb|}| \end{lscommand} فرمان دوم مقداری را به هرکدام از پارامترها اضافه می‌کند. \begin{lscommand} \ci{addtolength}\verb|{|\emph{parameter}\verb|}{|\emph{length}\verb|}| \end{lscommand} فرمان دوم مفید‌تر از \ci{setlength} است، زیرا می‌توانید نسبت به مقادیر پیش‌فرض تغییر دهید. برای افزودن یک سانتیمتر به عرض کل متن، فرمان زیر را در سرآغاز قرار می‌دهیم: \begin{code} \verb|\addtolength{\hoffset}{-0.5cm}|\\ \verb|\addtolength{\textwidth}{1cm}| \end{code} در این راستا بهتر است به بستهٔ \pai{calc} نیز نگاهی بیندازید. این بسته به شما امکان انجام تغییرات تابعی بر آرگومان‌های \ci{setlength} را می‌دهد. \section{بازی بیشتر با طول‌ها} هر جا که ممکن باشد، از قرار دادن مقدار دقیق طول‌ها در نوشتار‌ خودداری کنید. در عوض، سعی کنید از مقادیر تعریف‌شده استفاده کنید. برای قرار دادن یک تصویر به گونه‌ای که عرض آن به اندازهٔ عرض نوشتار‌ باشد از \verb|\textwidth| استفاده کنید. سه فرمان زیر اجازه می‌دهد شما عرض، ارتفاع و عمق یک رشته را تعیین کنید. \begin{lscommand} \ci{settoheight}\verb|{|\emph{variable}\verb|}{|\emph{text}\verb|}|\\ \ci{settodepth}\verb|{|\emph{variable}\verb|}{|\emph{text}\verb|}|\\ \ci{settowidth}\verb|{|\emph{variable}\verb|}{|\emph{text}\verb|}| \end{lscommand} \noindent مثال زیر کاربردی از این فرمان‌ها را نشان می‌دهد. \begin{example} \flushleft \newenvironment{vardesc}[1]{% \settowidth{\parindent}{#1:\ } \makebox[0pt][r]{#1:\ }}{} \begin{displaymath} a^2+b^2=c^2 \end{displaymath} \begin{vardesc}{Where}$a$, $b$ -- are adjoin to the right angle of a right-angled triangle. $c$ -- is the hypotenuse of the triangle and feels lonely. $d$ -- finally does not show up here at all. Isn't that puzzling? \end{vardesc} \end{example} \section{جعبه‌ها} لاتک با قراردادن جعبه‌هایی طرح صفحه را مشخص می‌کند. در ابتدا هر حرف یک جعبهٔ کوچک دارد که از چسبیدن این جعبه‌ها کلمه‌ها درست می‌شوند. اینها هم به همدیگر می‌چسبند تا سطرها را تشکیل دهند ولی روش چسباندن کلمه‌ها کمی پیچیده است تا انعطاف لازم را برای پرکردن سطرها داشته باشند. قبول دارم که این توضیح ساده‌ای است از آنچه اتفاق می‌افتد، اما نکته این است که تک مسئولیت چسباندن را دارد. می‌توانید هر چیزی، از جمله جعبه‌های دیگر را در یک جعبه قرار دهید. هر جعبه در این صورت همانند یک حرف عمل می‌کند. در فصل‌های پیشین با جعبه‌های واقعی روبرو شده‌اید، هرچند به شما نگفتم. محیط \ei{tabular} و \ci{includegraphics} از این نوع هستند که جعبه تعریف می‌کنند. این به آن معنی است که می‌توانید جدول‌ها را در کنار هم قرار دهید. فقط باید مواظب باشید مجموع عرض آنها از عرض متن بیشتر نباشد. همچنین می‌توانید یک پاراگراف را به شکل زیر در یک جعبه قرار دهید. \begin{lscommand} \ci{parbox}\verb|[|\emph{pos}\verb|]{|\emph{width}\verb|}{|\emph{text}\verb|}| \end{lscommand} \noindent یا به طریق زیر این کار را انجام دهید. \begin{lscommand} \verb|\begin{|\ei{minipage}\verb|}[|\emph{pos}\verb|]{|\emph{width}\verb|}| text \verb|\end{|\ei{minipage}\verb|}| \end{lscommand} \noindent پارامتر \lr{\texttt{pos}} می‌تواند یکی از مقادیر \lr{\texttt{c}}، \lr{\texttt{t}} یا \lr{\texttt{b}} را بپذیرد که جهت چیدن جعبه را نسبت به متن پیرامون آن مشخص می‌کند. \lr{\texttt{width}} یک مقدار طول مربوط به عرض جعبه را می‌پذیرد. مهمترین تفاوت بین \ei{minipage} و \ci{parbox} این است که نمی‌توانید تمام فرمان‌ها و محیط‌ها را داخل \ei{parbox} استفاده کنید درحالی که این کار در \ei{minipage} امکان‌پذیر است. درحالی که \ci{parbox} تمام امکانات شکستن خط را پشتیبانی می‌کند، تعدادی از فرمان‌های جعبه هستند که تنها در متن‌های افق‌چین امکان‌پذیرند. یکی از آنها را می‌شناسیم؛ \ci{mbox} که تعدادی از جعبه‌ها را درون هم قرار می‌دهد و برای جلوگیری از شکستن کلمه‌ها مورد استفاده قرار می‌گیرد. از آنجا که می‌توانید جعبه‌ها را درون هم قرار دهید، این ویژگی انعطاف زیادی به کار شما می‌دهد. \begin{lscommand} \ci{makebox}\verb|[|\emph{width}\verb|][|\emph{pos}\verb|]{|\emph{text}\verb|}| \end{lscommand} \noindent \lr{\texttt{width}} عرض جعبه را از بیرون نشان می‌دهد\footnote{این به آن معنی است که می‌تواند کوچک‌تر از متن پیرامونش باشد. حتی می‌توانید عرض را برابر صفر پوینت تعریف کنید تا متن داخل جعبه بدون اثر جانبی روی جعبهٔ محیطی قرار داده شود.}. به جز طول عبارت، می‌توانید عرض \index{عرض} (\ci{width})، ارتفاع\index{ارتفاع} (\ci{height})، عمق\index{عمق} (\ci{depth})، و ارتفاع کلی\index{ارتفاع کلی} (\ci{totalheight}) را در پارامتر عرض تغییر دهید. این مقادیر با مقایسهٔ \femph{متن} تعیین می‌شوند. پارامتر \emph{pos} یک مقدار تک‌حرفی را می‌پذیرد: \lr{\textbf{c}} برای وسط، \lr{\textbf{l}} برای چپ، \lr{\textbf{r}} برای راست، یا \lr{\textbf{s}} برای توزیع متن در جعبه. فرمان \ci{framebox} دقیقاً همانند \ci{makebox} استفاده می‌شود، اما کادری پیرامون جعبه رسم می‌کند. مثال زیر چند کار را نشان می‌دهد که با \ci{makebox} و \ci{framebox} می‌توان انجام داد. \begin{example} \makebox[\textwidth]{% c e n t r a l}\par \makebox[\textwidth][s]{% s p r e a d}\par \framebox[1.1\width]{Guess I'm framed now!} \par \framebox[0.8\width][r]{Bummer, I am too wide} \par \framebox[1cm][l]{never mind, so am I} Can you read this? \end{example} حال که حالت افقی را کنترل کردیم، قدم بعدی کنترل حالت عمودی است.\footnote{کنترل واقعی با کنترل همزمان افقی و عمودی بدست می‌آید.} \begin{lscommand} \ci{raisebox}\verb|{|\emph{lift}\verb|}[|\emph{extend-above-baseline}\verb|][|\emph{extend-below-baseline}\verb|]{|\emph{text}\verb|}| \end{lscommand} \noindent این فرمان به شما اجازهٔ تعریف خواص عمودی جعبه را می‌دهد. دوباره می‌توانید عرض\index{عرض}، ارتفاع\index{ارتفاع}، عمق\index{عمق}، و ارتفاع کلی \index{ارتفاع کلی} را در سه پارامتر اول تعیین کنید. \begin{example} \raisebox{0pt}[0pt][0pt]{\Large% \textbf{Aaaa\raisebox{-0.3ex}{a}% \raisebox{-0.7ex}{aa}% \raisebox{-1.2ex}{r}% \raisebox{-2.2ex}{g}% \raisebox{-4.5ex}{h}}} he shouted but not even the next one in line noticed that something terrible had happened to him. \end{example} %\section{\lr{rule} و \lr{strut}} \section{\texorpdfstring{\ci{rule} و \ci{strut}}{فرمان‌های rule و strut}} \label{sec:rule} چند صفحهٔ قبل ممکن است به فرمان زیر توجه کرده باشید. \begin{lscommand} \ci{rule}\verb|[|\emph{lift}\verb|]{|\emph{width}\verb|}{|\emph{height}\verb|}| \end{lscommand} \noindent در حالت نرمال این فرمان یک جعبهٔ سیاه تولید می‌کند. \begin{example} \rule{3mm}{.1pt}% \rule[-1mm]{5mm}{1cm}% \rule{3mm}{.1pt}% \rule[1mm]{1cm}{5mm}% \rule{3mm}{.1pt} \end{example} \noindent این کار برای رسم خط‌های افقی و عمودی مناسب است. خط سیاه در عنوان این مقدمه با فرمان \ci{rule} رسم شده است. یک حالت ویژه این است که یک خط بدون عرض ولی با یک ارتفاع مشخص رسم کنیم. در حروف‌چینی حرفه‌ای به چنین چیزی \wi{\lr{strut}} می‌گویند. کاربرد آن برای این است که شیئ ویژه‌ای دارای حداقل مشخصی از ارتفاع باشد. می‌توانید آن را در یک محیط \lr{\texttt{tabular}} به‌کار برید تا مطمئن شوید یک سطر دارای یک حداقل ارتفاع مشخص باشد. \begin{example} \begin{tabular}{|c|} \hline \rule{1pt}{4ex}Pitprop \ldots\\ \hline \rule{0pt}{4ex}Strut\\ \hline \end{tabular} \end{example} \bigskip {\flushleft پایان.\par} % % Local Variables: % TeX-master: "lshort2e" % mode: latex % mode: flyspell % End: