blob: 0b45febe96afb7d3408d528e5ab56b635db20a46 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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:
|