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
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{تولید شکلهای ریاضی}
\label{chap:graphics}
\begin{intro}
بسیاری از افراد از لاتک برای حروفچینی متن استفاده میکنند. اما از آنجا که رهیافت ساختار یافته بسیار مناسب است، لاتک همچنین توانایی تولید تصاویر از فرمانهای متنی را دارد. به علاوه، چندین گسترش از لاتک امکان انجام این کار را به بهترین شکل فراهم میکنند. در این فصل چند نوع از این گسترشها را مطالعه میکنیم.
\end{intro}
\section{مرور}
محیط \ei{picture} امکان برنامهنویسی برای تولید شکل در لاتک را فراهم میکند. توضیح کامل را در \manual ببینید. از یک طرف، چندین محدودیت وجود دارد که از آن جمله محدودیت شیب خطها و شعاع دایرهها است. از طرف دیگر، محیط \ei{picture} از لاتک به همراه فرمان \ci{qbezier} همراه است، \lr{``\texttt{q}''} به معنای
\lr{``quadratic''}\footnote{مترجم: به معنای خم درجه دوم است.}
است. بسیاری از خمها مانند دایره، بیضی، یا ترکیبی از این خمها را میتوان با تقریب خمهای درجهٔ دوم بزیه رسم کرد، هرچند که این کار نیازمند محاسبات ریاضی است. به علاوه، اگر یک زبان برنامهنویسی مانند جاوا برای تولید بلوکهای \ci{qbezier} مورد استفاده قرار گیرد، محیط \ei{picture} بسیار قدرتمند خواهد شد.
با وجود این که نوشتن کد تصاویر در لاتک بسیار محدود کننده و زمانبر است، کار با آن هنوز خواستگاه دارد زیرا نوشتار را بسیار کوچک میکند و به هیچ فایل تصویری احتیاج ندارد.
بستههایی مانند \pai{epic} و \pai{eepic} (که به عنوان مثال در
\companion توضیح داده شده اند)،
یا \pai{pstricks} وجود دارند که محدودیتهای محیط \ei{picture} را ندارند و توان گرافیکی لاتک را به مقدار زیادی قدرت میبخشند.
درحالی که دو بستهٔ اولیه تنها محیط \ei{picture} را قدرت میبخشند، بستهٔ \pai{pstricks}
دارای محیط منحصر به فرد \ei{pspicture} است. قدرت سیستم \pai{pstricks} در این است که این بسته از قابلیتهای \PSi استفاده میکند. به علاوه بستههای مختلفی برای کارهای ویژه نوشته شده است. یکی از این بستهها \lr{\texorpdfstring{\Xy}{Xy}-pic} است که در آخر این فصل توضیح داده شده است. توضیح مفصلتری بر این بسته در
\graphicscompanion ارائه شده است
(با
\companion اشتباه نشود).
شاید مهمترین ابزار گرافیکی مربوط به لاتک، متاپست است که به همراه متافونت دوقلوهای دونالد کنوث نام دارند. بر خلاف متافونت، که بیتمپ تولید میکند،
متاپست فایلهای \PSi تولید میکند که میتوان آنها را به لاتک انتقال داد. برای مقدمهای بر این موضوع به
\hobby، یا راهنمای
\cite{ursoswald} مراجعه کنید.
بحث کاملی از استراتژیهای لاتک و تک برای گرافیک
(و قلمها)
را میتوانید در
\hoenig ببینید.
\section{محیط تصویر}
%\secby{Urs Oswald}{osurs@bluewin.ch}
\subsection{فرمانهای ابتدایی}
یک محیط \ei{picture} \footnote{قبول داشته باشید یا نه، محیط تصویر بهطور هوشمندانه کار میکند، با لاتک استاندارد هیچ بستهای لازم نیست.}
را میتوان با دو فرمان زیر بوجود آورد
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}
\noindent یا
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)(|$x_0,y_0$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}
اعداد $x,\,y,\,x_0,\,y_0$ به \ci{unitlength} اشاره میکنند که میتوان آنها را با فرمانی به شکل زیر دوباره بارگذاری کرد
(ولی این کار را نمیتوان با محیط \ei{picture} انجام داد)
\begin{lscommand}
\ci{setlength}\verb|{|\ci{unitlength}\verb|}{1.2cm}|
\end{lscommand}
مقدار پیشفرض \ci{unitlength} برابر \lr{\texttt{1pt}} است. زوج $(x,y)$ اندازهٔ چهارچوب دور تصویر را مشخص میکند. زوج اختیاری $(x_0,y_0)$ مکان گوشهٔ پایین سمت چپ چهارچوب رزرو شده را تعیین میکند.
بیشتر فرمانها به یکی از دو شکل زیر است
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\emph{object}\verb|}|
\end{lscommand}
\noindent یا
\begin{lscommand}
\ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{object}\verb|}|
\end{lscommand}
خمهای بزیه از این قاعده مستثنی است. این خمها را میتوان با فرمان زیر رسم کرد
\begin{lscommand}
\ci{qbezier}\verb|(|$x_1,y_1$\verb|)(|$x_2,y_2$\verb|)(|$x_3,y_3$\verb|)|
\end{lscommand}
\newpage
\subsection{پارهخط}
\begin{example}
\setlength{\unitlength}{5cm}
\begin{picture}(1,1)
\put(0,0){\line(0,1){1}}
\put(0,0){\line(1,0){1}}
\put(0,0){\line(1,1){1}}
\put(0,0){\line(1,2){.5}}
\put(0,0){\line(1,3){.3333}}
\put(0,0){\line(1,4){.25}}
\put(0,0){\line(1,5){.2}}
\put(0,0){\line(1,6){.1667}}
\put(0,0){\line(2,1){1}}
\put(0,0){\line(2,3){.6667}}
\put(0,0){\line(2,5){.4}}
\put(0,0){\line(3,1){1}}
\put(0,0){\line(3,2){1}}
\put(0,0){\line(3,4){.75}}
\put(0,0){\line(3,5){.6}}
\put(0,0){\line(4,1){1}}
\put(0,0){\line(4,3){1}}
\put(0,0){\line(4,5){.8}}
\put(0,0){\line(5,1){1}}
\put(0,0){\line(5,2){1}}
\put(0,0){\line(5,3){1}}
\put(0,0){\line(5,4){1}}
\put(0,0){\line(5,6){.8333}}
\put(0,0){\line(6,1){1}}
\put(0,0){\line(6,5){1}}
\end{picture}
\end{example}
پارهخطها را میتوان با فرمان زیر رسم کرد
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{line}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{lscommand}
فرمان \ci{line} دارای دو آرگومان است:
\begin{enumerate}
\item یک بردار جهتدار،
\item یک طول.
\end{enumerate}
مؤلفههای بردار جهتدار به چند عدد محدود میشود
\[
-6,\,-5,\,\ldots,\,5,\,6,
\]
و باید نسبت به هم اول باشند
(یعنی دارای بزرگترین مقسوم علیه ۱ باشند). در شکل تمام ۲۵ شیب ممکن در یکچهارم اول نمایش داده شده است. طول بستگی به \ci{unitlength} دارد. آرگومان طول همان مؤلفهٔ افقی است و تنها در حالتی که پارهخط عمودی باشد، این آرگومان همان مؤلفهٔ عمودی است.
\subsection{پیکانها}
\begin{example}
\setlength{\unitlength}{0.75mm}
\begin{picture}(60,40)
\put(30,20){\vector(1,0){30}}
\put(30,20){\vector(4,1){20}}
\put(30,20){\vector(3,1){25}}
\put(30,20){\vector(2,1){30}}
\put(30,20){\vector(1,2){10}}
\thicklines
\put(30,20){\vector(-4,1){30}}
\put(30,20){\vector(-1,4){5}}
\thinlines
\put(30,20){\vector(-1,-1){5}}
\put(30,20){\vector(-1,-4){5}}
\end{picture}
\end{example}
پیکانها با فرمان زیر رسم میشوند
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{vector}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{lscommand}
برای پیکانها، مؤلفههای بردارهای جهتدار حتی بیشتر از این محدود هستند و تنها به چند عدد محدود هستند
\[
-4,\,-3,\,\ldots,\,3,\,4.
\]
این اعداد نیز باید نسبت به هم اول باشند. به تأثیر فرمان \ci{thicklines} روی دو بردار به سمت چپ توجه داشته باشید.
\subsection{دایره}
\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60, 40)
\put(20,30){\circle{1}}
\put(20,30){\circle{2}}
\put(20,30){\circle{4}}
\put(20,30){\circle{8}}
\put(20,30){\circle{16}}
\put(20,30){\circle{32}}
\put(40,30){\circle{1}}
\put(40,30){\circle{2}}
\put(40,30){\circle{3}}
\put(40,30){\circle{4}}
\put(40,30){\circle{5}}
\put(40,30){\circle{6}}
\put(40,30){\circle{7}}
\put(40,30){\circle{8}}
\put(40,30){\circle{9}}
\put(40,30){\circle{10}}
\put(40,30){\circle{11}}
\put(40,30){\circle{12}}
\put(40,30){\circle{13}}
\put(40,30){\circle{14}}
\put(15,10){\circle*{1}}
\put(20,10){\circle*{2}}
\put(25,10){\circle*{3}}
\put(30,10){\circle*{4}}
\put(35,10){\circle*{5}}
\end{picture}
\end{example}
فرمان
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{circle}\verb|{|\emph{diameter}\verb|}}|
\end{lscommand}
\noindent یک دایره به مرکز $(x,y)$ و قطر
(نه شعاع)
\emph{diameter} را رسم میکند.
محیط \ei{picture} تنها قطرهای تا حداکثر ۱۴ میلیمتر را میپذیرد. فرمان \ci{circle*}
قرصها را تولید میکند
(دایرههای توپر).
همانند پارهخطها، باید از بستههای دیگری نیز استفاده کرد، مانند \pai{eepic} یا \pai{pstricks}.
برای راهنمایی کامل در مورد این بستهها به
\graphicscompanion مراجعه کنید.
حالت دیگری نیز در محیط \ei{picture} وجود دارد. اگر از انجام محاسبات ریاضی نمیترسید، دایرهها و بیضیهای دلخواه را میتوان با خمهای بزیه به هم چسباند. برای مثالهایی از کدهای جاوا به
\graphicsinlatex مراجعه کنید.
\subsection{متن و فرمول}
\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,5)
\thicklines
\put(1,0.5){\line(2,1){3}}
\put(4,2){\line(-2,1){2}}
\put(2,3){\line(-2,-5){1}}
\put(0.7,0.3){$A$}
\put(4.05,1.9){$B$}
\put(1.7,2.95){$C$}
\put(3.1,2.5){$a$}
\put(1.3,1.7){$b$}
\put(2.5,1.05){$c$}
\put(0.3,4){$F=
\sqrt{s(s-a)(s-b)(s-c)}$}
\put(3.5,0.4){$\displaystyle
s:=\frac{a+b+c}{2}$}
\end{picture}
\end{example}
همانطور که این مثال نشان میدهد، متن و فرمول را میتوان در محیط \ei{picture} با فرمان \ci{put} به طریق عادی درج کرد.
%\subsection{\texorpdfstring{\lr{$\backslash$multiput}\rl{\, و } \lr{$\backslash$linethikness}}{فرمانهای $\backslash$multiput و $\backslash$linethikness}}
\subsection{\texorpdfstring{\ci{multiput} و \ci{linethikness}}{فرمانهای multiput و linethikness}}
\begin{example}
\setlength{\unitlength}{2mm}
\begin{picture}(30,20)
\linethickness{0.075mm}
\multiput(0,0)(1,0){26}%
{\line(0,1){20}}
\multiput(0,0)(0,1){21}%
{\line(1,0){25}}
\linethickness{0.15mm}
\multiput(0,0)(5,0){6}%
{\line(0,1){20}}
\multiput(0,0)(0,5){5}%
{\line(1,0){25}}
\linethickness{0.3mm}
\multiput(5,0)(10,0){2}%
{\line(0,1){20}}
\multiput(0,5)(0,10){2}%
{\line(1,0){25}}
\end{picture}
\end{example}
فرمان
\begin{lscommand}
\ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{object}\verb|}|
\end{lscommand}
\noindent دارای چهار آرگومان است: نقطهٔ شروع، نقطهٔ پایان، بردار انتقال از یک شیئ به شیئ بعدی، تعداد اشیاء، وشیئ که باید رسم شود. فرمان \ci{linethickness} به پارهخطهای افقی و عمودی تأثیر دارد ولی روی خطهای اریب و دایرهها بیتأثیر است. این فرمان مسلماً روی خمهای بزیه تأثیر دارد!
\subsection{بیضی}
\begin{example}
\setlength{\unitlength}{0.75cm}
\begin{picture}(6,4)
\linethickness{0.075mm}
\multiput(0,0)(1,0){7}%
{\line(0,1){4}}
\multiput(0,0)(0,1){5}%
{\line(1,0){6}}
\thicklines
\put(2,3){\oval(3,1.8)}
\thinlines
\put(3,2){\oval(3,1.8)}
\thicklines
\put(2,1){\oval(3,1.8)[tl]}
\put(4,1){\oval(3,1.8)[b]}
\put(4,3){\oval(3,1.8)[r]}
\put(3,1.5){\oval(1.8,0.4)}
\end{picture}
\end{example}
فرمان
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)}|
\end{lscommand}
\noindent یا
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)[|\emph{position}\verb|]}|
\end{lscommand}
\noindent یک بیضی به مرکز $(x,y)$ و به عرض $w$ و ارتفاع $h$ تولید میکند. آرگومانهای مکان \emph{position} که عبارتند از \lr{\texttt{b}}، \lr{\texttt{t}}، \lr{\texttt{l}}، \lr{\texttt{r}} به \lr{``top''}(بالا)، \lr{``bottom''}(پایین)، \lr{``left''}(چپ)،
و \lr{``right''}(راست)
اشاره دارند و میتوانند همانند مثال با هم ترکیب شوند.
ضخامت خط را میتوان با دو نوع فرمان کنترل کرد:
\LRE{\ci{linethickness}\verb|{|\emph{length}\verb|}|}
از یک طرف، و \ci{thinlines} و \ci{thicklines} از طرف دیگر \LRE{\ci{linethickness}\verb|{|\emph{length}\verb|}|}
فقط به خطهای افقی و عمودی
(و خمهای درجه دوم بزیه)
تأثیر دارد، در حالی که \ci{thinlines} و \ci{thicklines} بر خطهای اریب و دایرهها و بیضیها نیز تأثیر دارند.
\subsection{استفاده چندباره از جعبههای تصویر پیشساخته}
\begin{example}
\setlength{\unitlength}{0.5mm}
\begin{picture}(120,168)
\newsavebox{\foldera}
\savebox{\foldera}
(40,32)[bl]{% definition
\multiput(0,0)(0,28){2}
{\line(1,0){40}}
\multiput(0,0)(40,0){2}
{\line(0,1){28}}
\put(1,28){\oval(2,2)[tl]}
\put(1,29){\line(1,0){5}}
\put(9,29){\oval(6,6)[tl]}
\put(9,32){\line(1,0){8}}
\put(17,29){\oval(6,6)[tr]}
\put(20,29){\line(1,0){19}}
\put(39,28){\oval(2,2)[tr]}
}
\newsavebox{\folderb}
\savebox{\folderb}
(40,32)[l]{% definition
\put(0,14){\line(1,0){8}}
\put(8,0){\usebox{\foldera}}
}
\put(34,26){\line(0,1){102}}
\put(14,128){\usebox{\foldera}}
\multiput(34,86)(0,-37){3}
{\usebox{\folderb}}
\end{picture}
\end{example}
یک جعبهٔ تصویر را میتوان با فرمان
\begin{lscommand}
\ci{newsavebox}\verb|{|\emph{name}\verb|}|
\end{lscommand}
\noindent
معرفی، و با فرمان
\begin{lscommand}
\ci{savebox}\verb|{|\emph{name}\verb|}(|\emph{width,height}\verb|)[|\emph{position}\verb|]{|\emph{content}\verb|}|
\end{lscommand}
\noindent تعریف، و نهایتاً با فرمان
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|)|\ci{usebox}\verb|{|\emph{name}\verb|}|
\end{lscommand}
رسم کرد.
پارامتر اختیاری \emph{position} نقش لنگر را برای جعبه بازی میکند. در مثال این پارامتر برابر \lr{\texttt{bl}} تعریف شده است که لنگر را در گوشهٔ چپ پایین صفحه قرار میدهد. گزینههای دیگر \lr{\texttt{t}} (بالا)
و \lr{\texttt{r}} (راست)
هستند.
آرگومان \emph{name} به یک جعبه در لاتک ارجاع میکند و بنابراین طبیعت فرمان دارد. تصاویر درون جعبهها میتوانند تودرتو باشند:
در این مثال \ci{foldera} درون \ci{folderb} تعریف شده است.
فرمان \ci{oval} که باید همانند \ci{line} استفاده شود به پارهخطهای کمتر از ۳ میلیمتر بیتأثیر است.
\subsection{خمهای درجهٔ دوم بزیه}
\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,4)
\linethickness{0.075mm}
\multiput(0,0)(1,0){7}
{\line(0,1){4}}
\multiput(0,0)(0,1){5}
{\line(1,0){6}}
\thicklines
\put(0.5,0.5){\line(1,5){0.5}}
\put(1,3){\line(4,1){2}}
\qbezier(0.5,0.5)(1,3)(3,3.5)
\thinlines
\put(2.5,2){\line(2,-1){3}}
\put(5.5,0.5){\line(-1,5){0.5}}
\linethickness{1mm}
\qbezier(2.5,2)(5.5,0.5)(5,3)
\thinlines
\qbezier(4,2)(4,3)(3,3)
\qbezier(3,3)(2,3)(2,2)
\qbezier(2,2)(2,1)(3,1)
\qbezier(3,1)(4,1)(4,2)
\end{picture}
\end{example}
همانطور که این مثال نشان میدهد، تقسیم یک دایره به چهار خم بزیه مطلوب نیست. حداقل ۸ قسمت مورد نیاز است. شکل، دوباره اثر فرمان \ci{linethickness} را روی خطهای افقی و عمودی، و اثر \ci{thinlines} و \ci{thicklines} را روی خطهای مورب نشان میدهد. این مثال همچنین نشان میدهد که همهٔ این فرمانها روی خمهای بزیه مؤثر هستند و اثر فرمانهای قبلی را از بین میبرند.
فرض کنید $P_1=(x_1,\,y_1),\,P_2=(x_2,\,y_2)$ نقاط انتهایی باشند، و $m_1,\,m_2$ به ترتیب شیبهای خمهای بزیه باشند. نقطهٔ کنترل کنندهٔ میانی
$S=(x,\,y)$ با رابطهٔ
\begin{equation} \label{zwischenpunkt}
\left\{
\begin{array}{rcl}
x & = & \displaystyle \frac{m_2 x_2-m_1x_1-(y_2-y_1)}{m_2-m_1}, \\
y & = & y_i+m_i(x-x_i)\qquad (i=1,\,2).
\end{array}
\right.
\end{equation}
\noindent
داده شده است.
\graphicsinlatex را برای دیدن یک برنامهٔ جاوا که خطفرمان لازم برای فرمانهای \ci{qbezier} را ارائه میدهد ببینید.
\subsection{تسبیح}
\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(4.3,3.6)(-2.5,-0.25)
\put(-2,0){\vector(1,0){4.4}}
\put(2.45,-.05){$x$}
\put(0,0){\vector(0,1){3.2}}
\put(0,3.35){\makebox(0,0){$y$}}
\qbezier(0.0,0.0)(1.2384,0.0)
(2.0,2.7622)
\qbezier(0.0,0.0)(-1.2384,0.0)
(-2.0,2.7622)
\linethickness{.075mm}
\multiput(-2,0)(1,0){5}
{\line(0,1){3}}
\multiput(-2,0)(0,1){4}
{\line(1,0){4}}
\linethickness{.2mm}
\put( .3,.12763){\line(1,0){.4}}
\put(.5,-.07237){\line(0,1){.4}}
\put(-.7,.12763){\line(1,0){.4}}
\put(-.5,-.07237){\line(0,1){.4}}
\put(.8,.54308){\line(1,0){.4}}
\put(1,.34308){\line(0,1){.4}}
\put(-1.2,.54308){\line(1,0){.4}}
\put(-1,.34308){\line(0,1){.4}}
\put(1.3,1.35241){\line(1,0){.4}}
\put(1.5,1.15241){\line(0,1){.4}}
\put(-1.7,1.35241){\line(1,0){.4}}
\put(-1.5,1.15241){\line(0,1){.4}}
\put(-2.5,-0.25){\circle*{0.2}}
\end{picture}
\end{example}
در این شکل، هر نیمهٔ متقارن از تسبیح $y=\cosh x -1$ با یک خم بزیه تقریب زده شده است. نیمهٔ سمت راست در نقطهٔ
\((2,\,2.7622)\) به پایان میرسد، که شیب خط در این نقطه
\(m=3.6269\) است. با استفادهٔ دوباره از رابطهٔ (
\ref{zwischenpunkt})، میتوانیم نقاط میانی کنترلی را بدست آوریم. این نقاط برابرند با
$(1.2384,\,0)$ و
$(-1.2384,\,0)$.
علامتهای صلیب نقاط تسبیح را نشان میدهند. خطا قابل چشمپوشی است و کمتر از یک درصد است.
این مثال استفاده از آرگومان اختیاری فرمان \verb|\begin{picture}| را نشان میدهد.
تصویر به صورت مناسب مولفههای ریاضی تعریف شده است، با این وجود با فرمان
\begin{lscommand}
\ci{begin}\verb|{picture}(4.3,3.6)(-2.5,-0.25)|
\end{lscommand}
\noindent گوشهٔ سمت چپ پایین
(که با قرص سیاه مشخص شده است)
با مختصات
$(-2.5,-0.25)$ تعریف شده است.
\subsection{سرعت در نظریه نسبیت عام}
\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,4)(-3,-2)
\put(-2.5,0){\vector(1,0){5}}
\put(2.7,-0.1){$\chi$}
\put(0,-1.5){\vector(0,1){3}}
\multiput(-2.5,1)(0.4,0){13}
{\line(1,0){0.2}}
\multiput(-2.5,-1)(0.4,0){13}
{\line(1,0){0.2}}
\put(0.2,1.4)
{$\beta=v/c=\tanh\chi$}
\qbezier(0,0)(0.8853,0.8853)
(2,0.9640)
\qbezier(0,0)(-0.8853,-0.8853)
(-2,-0.9640)
\put(-3,-2){\circle*{0.2}}
\end{picture}
\end{example}
نقاط کنترلی خمهای بزیه با فرمولهای
\eqref{zwischenpunkt} محاسبه شدهاند.
شاخهٔ مثبت با $P_1=(0,\,0)$، $\,m_1=1$، $P_2=(2,\,\tanh 2)$، و $\,m_2=1/\cosh^2 2$ تعریف میشود.
دوباره، تصویر به شکل مختصات مناسب مؤلفهای ریاضی تعریف شده است و گوشهٔ سمت چپ پایین با مختصات
$(-3,-2)$ تعریف شده است
(دیسک سیاه).
\section{بستهٔ گرافیک \lr{TikZ \& PGF}}
امروزه هر سیستم تولید خروجی \lr{\LaTeX{}} توانایی تولید تصاویر بُرداری زیبا را دارد، تنها ابزار انجام این کار ممکن است تغییر کند. بستهٔ \lr{PGF}
یک لایهٔ رویی برای انجام این کار را در اختیار شما قرار میدهد و اجازه میدهد که این کار را با استفاده از فرمانهای ساده به راحتی انجام دهید
و تصاویر برداری پیچیده را دقیقاً از داخل نوشتار تولید کنید. بستهٔ \lr{PGF} دارای راهنمای +۵۰۰ صفحهای است\cite{pgfplots}.
بنابراین در این بخش کوتاه قصد داریم تنها جرعهای از این چشمهٔ بیکران را به شما بچشانیم.
برای دسترسی سطح بالا به توابع \lr{PGF} باید بستهٔ \pai{tikz} را فراخوانی کنید. با استفاده از بستهٔ \lr{tikz} میتوانید فرمانهای بسیار مؤثری را برای
رسم تصاویر از داخل نوشتار خود استفاده کنید. از محیط \ei{tikzpicture} برای این کار استفاده کنید.
\begin{example}
\begin{tikzpicture}[scale=3]
\clip (-0.1,-0.2)
rectangle (1.8,1.2);
\draw[step=.25cm,gray,very thin]
(-1.4,-1.4) grid (3.4,3.4);
\draw (-1.5,0) -- (2.5,0);
\draw (0,-1.5) -- (0,1.5);
\draw (0,0) circle (1cm);
\filldraw[fill=green!20!white,
draw=green!50!black]
(0,0) -- (3mm,0mm)
arc (0:30:3mm) -- cycle;
\end{tikzpicture}
\end{example}
اگر به زبانهای دیگر برنامهنویسی آشنا هستید، ممکن است به فرمان آشنای نیمنقطه (\lr{\texttt{;}}) توجه کرده باشید که
برای جداسازی فرمانهای مختلف مورد استفاده قرار میگیرد. با استفاده از فرمان \ci{usetikzlibrary} در سرآغاز نوشتار خود
میتوانید امکانات بیشتری را برای رسم اشکال ویژه فعال کنید، مانند جعبههایی که کمی خم شدهاند.
\begin{example}
\usetikzlibrary{%
decorations.pathmorphing}
\begin{tikzpicture}[
decoration={bent,aspect=.3}]
\draw [decorate,fill=lightgray]
(0,0) rectangle (5.5,2);
\node[circle,draw]
(A) at (.5,.5) {A};
\node[circle,draw]
(B) at (5,1.5) {B};
\draw[->,decorate] (A) -- (B);
\draw[->,decorate] (B) -- (A);
\end{tikzpicture}
\end{example}
همچنین میتوانید دیاگرامهایی را رسم کنید که مانند این است که دقیقاً از یک کتاب برنامه نویسی پاسکال برداشته شده است.
کد این کار کمی پیچیدهتر از مثال بالا است، بنابراین تنها اثر آن را نمایش میدهم. اگر به راهنمای بستهٔ \lr{PGF}
نگاهی بیندازید، میتوانید راهنمای مفصل رسم این دیاگرامها را ببینید.
\setLR
\begin{center}
\begin{tikzpicture}[point/.style={coordinate},thick,draw=black!50,>=stealth',
tip/.style={->,shorten >=1pt},every join/.style={rounded corners},
skip loop/.style={to path={-- ++(0,#1) -| (\tikztotarget)}},
hv path/.style={to path={-| (\tikztotarget)}},
vh path/.style={to path={|- (\tikztotarget)}},
terminal/.style={
rounded rectangle,
minimum size=6mm,
thick,draw=black!50,
top color=white,bottom color=black!20,
font=\ttfamily\tiny},
nonterminal/.style={
rectangle,
minimum size=6mm,
thick,
draw=red!50!black!50, % 50% red and 50% black,
top color=white, % a shading that is white at the top...
bottom color=red!50!black!20, % and something else at the bottom
font=\itshape\tiny}]
\matrix[column sep=4mm] {
% First row:
& & & & & & & & & & & \node (plus) [terminal] {+};\\
% Second row:
\node (p1) [point] {}; & \node (ui1) [nonterminal] {\rl{عدد بدونعلامت}}; &
\node (p2) [point] {}; & \node (dot) [terminal] {.}; &
\node (p3) [point] {}; & \node (digit) [terminal] {\rl{رقم}}; &
\node (p4) [point] {}; & \node (p5) [point] {}; &
\node (p6) [point] {}; & \node (e) [terminal] {E}; &
\node (p7) [point] {}; & &
\node (p8) [point] {}; & \node (ui2) [nonterminal] {\rl{عدد بدونعلامت}}; &
\node (p9) [point] {}; & \node (p10) [point] {};\\
% Third row:
& & & & & & & & & & & \node (minus)[terminal] {-};\\
};
{ [start chain]
\chainin (p1);
\chainin (ui1) [join=by tip];
\chainin (p2) [join];
\chainin (dot) [join=by tip];
\chainin (p3) [join];
\chainin (digit) [join=by tip];
\chainin (p4) [join];
{ [start branch=digit loop]
\chainin (p3) [join=by {skip loop=-6mm,tip}];
}
\chainin (p5) [join,join=with p2 by {skip loop=6mm,tip}];
\chainin (p6) [join];
\chainin (e) [join=by tip];
\chainin (p7) [join];
{ [start branch=plus]
\chainin (plus) [join=by {vh path,tip}];
\chainin (p8) [join=by {hv path,tip}];
}
{ [start branch=minus]
\chainin (minus) [join=by {vh path,tip}];
\chainin (p8) [join=by {hv path,tip}];
}
\chainin (p8) [join];
\chainin (ui2) [join=by tip];
\chainin (p9) [join,join=with p6 by {skip loop=-11mm,tip}];
\chainin (p10) [join=by tip];
}
\end{tikzpicture}
\end{center}
\setRL
\pagebreak
چیزهای بیشتری وجود دارد؛ اگر میخواهید نمودار دادههای عددی را رسم کنید، باید نگاه دقیقتری به راهنمای بستهٔ \pai{pgfplot}
بیندازید. این راهنما شامل هر چیزی است که برای رسم این نمودارها لازم دارید. حتی میتوانید فرمان \lr{\texttt{gnuplot}}
را استفاده کنید تا مقدار دقیق توابع مورد نظر خود را بدست آورید.
\section{\lr{\Xy-pic}}
%\secby{Alberto Manuel Brand\~ao Sim\~oes}{albie@alfarrabio.di.uminho.pt}
\pai{xy} یک بسته برای طراحی دیاگرامهاست. برای استفاده از آن، فرمان زیر را در سرآغاز نوشتار خود قرار دهید:
\begin{lscommand}
\verb|\usepackage[|\emph{options}\verb|]{xy}|
\end{lscommand}
\emph{options}
لیستی از توابع \lr{\Xy-pic} است که میخواهید فراخوانی کنید. این گزینهها برای غلط\-گیری بسیار مؤثر هستند. توصیه میکنم تمام گزینهها را با گزینهٔ \verb!all! فعال کنید تا لاتک تمام فرمانهای \lr{\Xy} را فراخوانی کند.
دیاگرامهای \lr{\Xy-pic} روی یک طرح ماتریسی نمایش داده میشوند، که هر دیاگرام در یک خانهٔ ماتریس قرار میگیرد:
\begin{example}
\begin{displaymath}
\xymatrix{A & B \\
C & D }
\end{displaymath}
\end{example}
فرمان \ci{xymatrix} باید در محیط ریاضی مورد استفاده قرار بگیرد. در اینجا دو سطر و دو ستون مشخص کردهایم. برای این که این ماتریس را به یک دیاگرام تبدیل کنیم باید جهت پیکانها را با فرمان \ci{ar} مشخص کنیم.
\begin{example}
\begin{displaymath}
\xymatrix{ A \ar[r] & B \ar[d] \\
D \ar[u] & C \ar[l] }
\end{displaymath}
\end{example}
فرمان پیکان در سلول اصلی پیکان قرار داده میشود. آرگومانها جهت پیکان هستند و باید به
\lr{\texttt{u}p}،\lr{\texttt{d}own}، \lr{\texttt{r}ight}، یا
\lr{\texttt{l}eft}
اشاره کنند.
\begin{example}
\begin{displaymath}
\xymatrix{
A \ar[d] \ar[dr] \ar[r] & B \\
D & C }
\end{displaymath}
\end{example}
برای رسم قطرها، فقط کافی است جهت را معرفی کنیم. در حقیقت، میتوانید جهت را تکرار کنید تا پیکانها بزرگتر شوند.
\begin{example}
\begin{displaymath}
\xymatrix{
A \ar[d] \ar[dr] \ar[drr] & & \\
B & C & D }
\end{displaymath}
\end{example}
میتوانیم حتی دیاگرامهای جالب با افزودن برچسب به پیکانها طراحی کنیم. برای این کار، از فرمانهای زیرنویس و بالانویس استفاده میکنیم.
\begin{example}
\begin{displaymath}
\xymatrix{
A \ar[r]^f \ar[d]_g &
B \ar[d]^{g'} \\
D \ar[r]_{f'} & C }
\end{displaymath}
\end{example}
همانطور که نشان داده شد، این کارها را همانند سبک ریاضی میتوان انجام داد. تنها تفاوت در این است که بالانویس به معنای بالای پیکان و پاییننویس پایین پیکان است. عملگر سومی نیز وجود دارد : \verb+|+ این فرمان باعث میشود متنی در درون یک پیکان ظاهر شود.
\begin{example}
\begin{displaymath}
\xymatrix{
A \ar[r]|f \ar[d]|g &
B \ar[d]|{g'} \\
D \ar[r]|{f'} & C }
\end{displaymath}
\end{example}
برای رسم یک پیکان با یک حفره درون آن از \verb!\ar[...]|\hole! استفاده کنید.
در بعضی حالات، مهم است که تفاوت بین انواع پیکانها را بدانیم. این کار را میتوان با قرار دادن برچسبی بر آنها یا تغییر ظاهر آنها انجام داد.
\begin{example}
\begin{displaymath}
\xymatrix{
\bullet\ar@{->}[rr] && \bullet\\
\bullet\ar@{.<}[rr] && \bullet\\
\bullet\ar@{~)}[rr] && \bullet\\
\bullet\ar@{=(}[rr] && \bullet\\
\bullet\ar@{~/}[rr] && \bullet\\
\bullet\ar@{^{(}->}[rr] &&
\bullet\\
\bullet\ar@2{->}[rr] && \bullet\\
\bullet\ar@3{->}[rr] && \bullet\\
\bullet\ar@{=+}[rr] && \bullet
}
\end{displaymath}
\end{example}
به تفاوت بین دو دیاگرام توجه کنید:
\begin{example}
\begin{displaymath}
\xymatrix{
\bullet \ar[r]
\ar@{.>}[r] &
\bullet
}
\end{displaymath}
\end{example}
\begin{example}
\begin{displaymath}
\xymatrix{
\bullet \ar@/^/[r]
\ar@/_/@{.>}[r] &
\bullet
}
\end{displaymath}
\end{example}
تنظیمکنندههای بین دو اسلش روش رسم خمها را مشخص میکنند.
\lr{\Xy-pic} روشهای بسیاری را برای تغییر سبک رسم خمها ارائه میکند: برای اطلاع بیشتر به راهنمای \lr{\Xy-pic} مراجعه کنید.
%%% Local Variables:
%%% TeX-master: "lshort.tex"
%%% mode: flyspell
%%% TeX-PDF-mode: t
%%% End:
|