summaryrefslogtreecommitdiff
path: root/Master/texmf-doc/doc/vietnamese/lshort-vietnamese/src/graphic.tex
blob: bea786e48ff70bb3d20925def056be6cebb5312f (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
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{chapter}{4}
\newcommand{\graphicscompanion}{\emph{The \LaTeX{} Graphics Companion}~\cite{graphicscompanion}} 
\newcommand{\hobby}{\emph{A User's Manual for MetaPost}~\cite{metapost}}
\newcommand{\hoenig}{\emph{\TeX{} Unbound}~\cite{unbound}}
\newcommand{\graphicsinlatex}{\emph{Graphics in \LaTeXe{}}~\cite{ursoswald}}

\chapter{Biên soạn hình ảnh toán học}

\begin{intro}
Hiện nay rất nhiều người dùng \LaTeX{} để biên soạn tài liệu. Bên cạnh việc hỗ trợ biên soạn các tài liệu thông thường, \LaTeX{} còn hỗ trợ biên soạn hình ảnh dựa trên những mô tả thuần văn bản. Ban đầu, tính năng này có phần bị hạn chế nhưng theo thời gian, một số lượng lớn các gói mở rộng của \LaTeX{} đã khiến tác vụ này trở nên đơn giản, góp phần khắc phục những hạn chế trước đây. Trong chương này, bạn sẽ làm quen với một vài gói tiêu biểu.
\end{intro}

\section{Tổng quan}

Môi trường \ei{picture} cho phép chúng ta dùng \LaTeX{} để biên soạn trực tiếp các hình ảnh. Bạn có thể tham khảo trong \manual\ để biết thêm chi tiết. Một mặt, môi trường này vẫn còn một số hạn chế lớn như hệ số góc của các đoạn thẳng cũng như bán kính của đường trọn bị giới hạn trong một số ít các giá trị lựa chọn. Mặt khác, môi trường \ei{picture} trong \LaTeXe{} có lệnh \ci{qbezier}, ``\texttt{q}'' có nghĩa là ``bậc hai' (quadratic)'. Các đường cong thường dùng như đường tròn, ellipse hay các đường cong liên tiếp nhau có thể được thay thế bằng đường cong B\'ezier bậc hai, tuy nhiên, điều này đòi hỏi chúng ta phải thực hiện các tính toán toán học không đơn giản. Nếu bạn sử dụng ngôn ngữ lập trình như Java để tạo ra tập tin nhập liệu của \LaTeX{} chứa các lệnh \ci{qbezier} thì sức mạnh của  gói \ei{picture} sẽ tăng lên rất nhiều.

Mặc dù việc lập trình để xuất ra hình ảnh một cách trực tiếp với \LaTeX\ là một công việc không đơn giản, mệt nhọc và gặp phải những hạn chế nhất định nhưng chúng ta có lý do để thực hiện việc này: tài liệu của chúng ta sẽ chiếm rất ít bộ nhớ cũng như chúng ta không phải lo lắng việc chép thiếu tập tin hình ảnh minh hoạ khi mang tài liệu từ nơi này đến nơi khác.

Các gói như \pai{epic} và \pai{eepic} (được mô tả trong tài liệu \companion) hay \pai{pstricks} sẽ giúp chúng tra vượt qua những hạn chế của gói \ei{picture} và mở rộng sức mạnh soạn thảo hình ảnh của \LaTeX.

Trong khi hai gói \pai{epic} và \pai{eepic} chỉ mở rộng môi trường \ei{picture}, gói \pai{pstricks} có riêng môi trường vẽ của mình là \ei{pspicture}. Gói \pai{pstricks} có được sức mạnh này nhờ vào việc sử dụng rất nhiều ngôn ngữ \PSi{}. Ngoài ra, một số lượng lớn các gói đã được thiết kế nhằm phục vụ cho các mục đích nhất định. Một trong số đó là \texorpdfstring{\Xy}{Xy}-pic, được mô tả ở cuối chương này. Hầu hết các gói này đều được giới thiệu trong \graphicscompanion{} (bạn không nên nhầm lẫn giữa tài liệu này và \companion).

Có lẽ công cụ đồ hoạ mạnh nhất của \LaTeX\ là \texttt{MetaPost}, người anh em song sinh với \texttt{METAFONT} của Donald E. Knuth. \texttt{MetaPost} có ngôn ngữ lập trình rất tinh tế, linh hoạt của \texttt{METAFONT}. Tuy nhiên \texttt{METAFONT} tạo ra tập tin ảnh dạng bitmap còn \texttt{MetaPost} tạo ra ảnh dạng \PSi{} để thêm thêm vào trong tài liệu. Để biết thêm thông tin bạn có thể tham khảo ở \hobby hay \cite{ursowald}.

Các cách sử dụng hình ảnh (font chữ) trong \LaTeX{} và \TeX{} được thảo luận chi tiết trong \hoenig.

\section{Môi trường \texttt{picture}}
\secby{Urs Oswald}{osurs@bluewin.ch}

\subsection{Các lệnh cơ bản}

Môi trường \ei{picture}\footnote{Môi trường picture hoạt động độc lập, không cần thêm bất kỳ một gói nào khác ngoài trừ \LaTeXe{} chuẩn} được tạo ra bởi một trong hai lệnh sau
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}
\noindent hay
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)(|$x_0,y_0$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}
Các giá trị $x,\,y,\,x_0,\,y_0$ sẽ dựa vào \ci{unitlength}, bạn có thể gán lại giá trị này vào bất kỳ lúc nào (bên ngoài môi trường \ei{picture}) với lệnh như sau
\begin{lscommand}
\ci{setlength}\verb|{|\ci{unitlength}\verb|}{1.2cm}|
\end{lscommand}
Giá trị mặc định của \ci{unitlength} là \texttt{1pt}. Cặp giá trị đầu tiên, $(x,y)$ là toạ độ bắt đầu, bên trong tài liệu, của hình chữ nhật bao quanh hình. Cặp giá trị tùy chọn thứ hai, $(x_0, y_0)$, là toạ độ góc dưới bên trái của hình chữ nhật này.

Hầu hết các lệnh vẽ có hai dạng
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\emph{đối tượng}\verb|}|
\end{lscommand}
\noindent hay
\begin{lscommand}
\ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{đối tượng}\verb|}|\end{lscommand}
Đường cong B\'ezier là một ngoại lệ. Các đường cong này được vẽ với lệnh
\begin{lscommand}
\ci{qbezier}\verb|(|$x_1,y_1$\verb|)(|$x_2,y_2$\verb|)(|$x_3,y_3$\verb|)|
\end{lscommand}

\subsection{Các đoạn thẳng}

\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}
Các đoạn thẳng được vẽ thông qua lệnh
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{line}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{lscommand}
Lệnh \ci{line} có hai tham số:
\begin{enumerate}
  \item vector chỉ phương,
  \item độ dài.
\end{enumerate}
Các thành phần của vector chỉ phương phải là các số nguyên
\[
  -6,\,-5,\,\ldots,\,5,\,6,
\]
\noindent nguyên tố cùng nhau (không có ước chung trừ số 1). Hình vừa rồi minh họa 25 giá trị hệ số góc khác nhau trong gốc phần tư thứ nhất. Chiều dài của đoạn thẳng phụ thuộc vào giá trị của \ci{unitlength}.


\subsection{Mũi tên}

\begin{example}
\setlength{\unitlength}{1mm}
\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}
Các dấu mũi tên được vẽ thông qua lệnh
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{vector}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{lscommand}
Đối với mũi tên, các thành phần của vectơ chỉ phương bị giới hạn nhiều hơn so với đoạn thẳng, chúng phải là các số nguyên
\[
  -4,\,-3,\,\ldots,\,3,\,4.
\]
\noindent nguyên tố cùng nhau (không có ước chung ngoại trừ 1). Bạn cần chú ý đến tác động của lệnh \ci{thicklines} đến hai mũi tên hướng lên góc trên bên trái.

\subsection{Đường tròn}

\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}
Lệnh
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{circle}\verb|{|\emph{đường kính}\verb|}}|
\end{lscommand}
\noindent vẽ đường tròn có tâm là $(x,y)$ và đường kính (không phải bán kính) là \emph{đường kính}.
Môi trường \ei{picture} chỉ chấp nhận giá trị đường kính tối đa là 14\,mm; tuy nhiên, trong một số trường hợp dù giá trị đường kính nhỏ hơn giới hạn nhưng vẫn không được chấp nhận. Lệnh \ci{circle*} được dùng để vẽ hình tròn.

Khi vẽ các đoạn thẳng, đôi khi ta cần phải sử dụng thêm các gói như \pai{eepic} hay \pai{pstricks}. Bạn có thể tham khảo thêm \graphicscompanion\ để biết thêm thông tin chi tiết.

Trong môi trường \pai{picture}, nếu bạn không ngại tính toán (hay dùng phần mềm hỗ trợ để tính), bạn có thể thay thế việc vẽ các đường tròn và ellipse bằng các đường cong B\'ezier. Xem thêm ví dụ trong \graphicsinlatex\ để biết thêm chi tiết.

\subsection{Văn bản và công thức}

\begin{example}
\setlength{\unitlength}{1cm}
\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}
Thông qua ví dụ trên, bạn có thể thấy rằng văn bản và các công thức có thể được đặt vào môi trường \ei{picture} với lệnh \ci{put} như bình thường.

\subsection{Lệnh \ci{multiput} và \ci{linethickness}}

\begin{example}
\setlength{\unitlength}{2mm}
\begin{picture}(30,20)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){31}%
    {\line(0,1){20}}
  \multiput(0,0)(0,1){21}%
    {\line(1,0){30}}
  \linethickness{0.15mm}    
  \multiput(0,0)(5,0){7}%
    {\line(0,1){20}}
  \multiput(0,0)(0,5){5}%
    {\line(1,0){30}}
  \linethickness{0.3mm}    
  \multiput(5,0)(10,0){3}%
    {\line(0,1){20}}
  \multiput(0,5)(0,10){2}%
    {\line(1,0){30}}
\end{picture}
\end{example}
Lệnh
\begin{lscommand}
  \ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{đối tượng}\verb|}|
\end{lscommand}
\noindent có 4 tham số: điểm bắt đầu, vectơ tịnh tiến từ đối tượng này đến đối tượng tiếp theo, số đối tượng và đối tượng cần vẽ. Lệnh \ci{linethickness} áp dụng cho các đoạn thẳng nằm ngang hay thẳng đứng nhưng không có tác dụng đối với các đoạn xiên hay đường tròn. Tuy nhiên lệnh này có tác dụng với các đường cong B\'ezier!

\subsection{Hình oval. Lệnh \ci{thinlines} và \ci{thicklines}}

\begin{example}
\setlength{\unitlength}{1cm}
\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}
Lệnh
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)}|
\end{lscommand}
\noindent hay
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)[|\emph{vị trí}\verb|]}|
\end{lscommand}
\noindent xuất ra một hình oval tại $(x,y)$, có độ rộng $w$ và chiều cao $h$. Tham số vị trí là \texttt{b}, \texttt{t}, \texttt{l}, \texttt{r} tương ứng với ``cuối trang'', ``đầu trang'', ``bên trái'', ``bên phải''. Bạn có thể kết hợp các tham số vị trí này lại với nhau.

Độ dày của hàng có thể được điều khiển bởi hai lệnh:\\
\ci{linethickness}\verb|{|\emph{length}\verb|}|, \ci{thinlines} và \ci{thicklines}. Lệnh \ci{linethickness}\verb|{|\emph{length}\verb|}|
chỉ có tác dụng với các đường thẳng nằm ngang hay thẳng đứng (và các đường cong B\'ezier) còn lệnh \ci{thinlines} và \ci{thicklines} có tác dụng với các đường thẳng nằm xiên cũng như đối với đường tròn và oval.

\subsection{Các cách sử dụng các khung hình được định nghĩa trước}

\begin{example}
\setlength{\unitlength}{0.5mm}
\begin{picture}(120,168)
\newsavebox{\foldera}% declaration
\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}% declaration
\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}
Một khung hình (picture box) có thể được \emph{khai báo} thông qua lệnh
\begin{lscommand}
  \ci{newsavebox}\verb|{|\emph{tên}\verb|}|
\end{lscommand}
\noindent sau đó \emph{định nghĩa} bởi lệnh
\begin{lscommand}
  \ci{savebox}\verb|{|\emph{tên}\verb|}(|\emph{chiều rộng,chiều cao}\verb|)[|\emph{vị trí}\verb|]{|\emph{nội dung}\verb|}|
\end{lscommand}
\noindent và cuối cùng được \emph{vẽ} ra với lệnh
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|)|\ci{usebox}\verb|{|\emph{tên}\verb|}|
\end{lscommand}

Tham số \emph{vị trí} có tác dụng xác định `điểm mốc' của khung (savebox). Trong ví dụ trên, chúng ta đã sử dụng tham số là \texttt{bl} để đặt điểm mốc ở góc dưới bên trái của khung. Các tham số khác là \texttt{t} -- ở trên, \texttt{r} -- bên phải.

Các khung hình có thể được lồng vào nhau: trong ví dụ trên, ta thấy khung \ci{foldera} được dùng bên trong định nghĩa của khung \ci{folderb}

Lệnh \ci{oval} được sử dụng như lệnh \ci{line} sẽ không có tác dụng nếu kích thước của đoạn thẳng nhỏ hơn 3\,mm.

\subsection{Các đường cong B\'ezier}

\begin{example}
\setlength{\unitlength}{1cm}
\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}
Trong ví dụ trên, việc chia đường tròn thành 4 đường cong B\'ezier là không thoả đáng, chúng ta cần ít nhất là 8 đường cong. Hình minh hoạ cũng cho thấy tác dụng của lệnh \ci{linethickness} đối với các đường thẳng nằm ngang và nằm thẳng đứng, lệnh \ci{thicklines} đối với các đướng thẳng nằm xiên. Ngoài ra chúng ta cũng thấy được tác dụng của các lệnh này đối với các đường cong B\'ezier. Bạn cần lưu ý rằng lệnh nằm sau sẽ có tác dụng.

Đặt $P_1=(x_1,\,y_1),\,P_2=(x_2,\,y_2)$ là các điểm cuối và $m_1,\,m_2$ là các hệ số góc tương ứng của đường cong B\'ezier. Điểm giữa điều khiển $S=(x,\,y)$ sẽ được xác định bởi
\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 Xem \graphicsinlatex\ để biết thêm thông tin về chương trình Java hỗ trợ việc tạo các đường cong B\'ezier từ lệnh.

\subsection{Catenary}

\begin{example}
\setlength{\unitlength}{1.3cm}
\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}

Trong hình trên, các nữa đối xứng nhau của đồ thị hàm số $y = \cosh x - 1$ được sắp xỉ bởi đường cong B\'ezier. Phần nữa bên phải của đường cong kết thúc bởi điểm \((2,\,2.7622)\), hệ số góc là \(m=3.6269\). Sử dụng phương trình (\ref{zwischenpunkt}), ta có thể tính được điểm điều khiển giữa là $(1.2384,\,0)$ và $(-1.2384,\,0)$. Độ sai lệch là rất thấp và thường nhỏ hơn một phần trăm.

Ví dụ này cũng cho ta thấy được cách sử dụng tham số tuỳ chọn của lệnh \verb|\begin{picture}|.
Hình ảnh sẽ được định nghĩa một dựa vào các hệ trục ``toán học'' dựa vào lệnh
\begin{lscommand} 
  \ci{begin}\verb|{picture}(4.3,3.6)(-2.5,-0.25)|
\end{lscommand}
\noindent góc dưới bên trái (đánh dấu bởi hình tròn màu đen) được xác định toạ độ là $(-2.5,-0.25)$. 

\subsection{Tốc độ trong thuyết tương đối đặc biệt}

\begin{example}
\setlength{\unitlength}{1cm}
\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}
Điểm điều khiển của hai đường cong B\'ezier được tính bởi công thức (\ref{zwischenpunkt}). Nhánh dương được xác định bởi $P_1=(0,\,0),\,m_1 = 1$ và $P_2 = (2,\,\tanh 2),\, m_2 = 1/\cosh^2 2$. Khi này toạ độ của góc dưới bên trái được xác định là $(-3,-2)$ (hình tròn màu đen).

\section{\texorpdfstring{\Xy}{Xy}-pic}
\secby{Alberto Manuel Brand\~ao Sim\~oes}{albie@alfarrabio.di.uminho.pt}
Gói \pai{xy} là một gói đặc biệt để vẽ các biểu đồ. Để sử dụng gói này, bạn chỉ việc thêm vào các hàng lệnh sau trong phần tựa đề của tài liệu:
\begin{lscommand}
\verb|\usepackage[|\emph{tùy chọn}\verb|]{xy}|
\end{lscommand}
Với \emph{tùy chọn} là một danh sách các hàm của \Xy-pic mà bạn muốn nạp vào. Tôi đề nghị bạn đưa vào mục chọn \verb!all! để \LaTeX{} nạp tất cả các lệnh của \Xy.

Các biểu đồ của \Xy-pic được vẽ dựa trên mô hình của các ma trận trong đó mỗi phần tử của biểu đồ được đặt trong một ô của ma trận:
\begin{example}
\begin{displaymath}
\xymatrix{A & B \\
          C & D }
\end{displaymath}
\end{example}
Lệnh \ci{xymatrix} phải được sử dụng trong chế độ toán học. Trong ví dụ trên, chúng ta có hai hàng và hai cột. Để tạo biểu đồ này, chúng ta chỉ cần thêm vào các muỗi tên tương ứng với lệnh
\ci{ar}.
\begin{example}
\begin{displaymath}
\xymatrix{ A \ar[r] & B \ar[d] \\
           D \ar[u] & C \ar[l] }
\end{displaymath}
\end{example}
Lệnh vẽ mũi tên được đặt ở ô gốc. Các tham số ở đây là hướng trỏ đến của các mũi tên. (\texttt{u}: mũi tên hướng lên, \texttt{d}: mũi tên hướng xuống, \texttt{r}: mũi tên hướng sang phải và \texttt{l}: mũi tên hướng sang trái).
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[r] & B \\
  D                       & C }
\end{displaymath}
\end{example}
Để tạo ra các mũi tên theo đường chéo, bạn chỉ cần sử dụng tham số là tổ hợp của các hướng. Để có mũi tên đậm hơn, bạn có thể lặp lại các tham số về hướng.
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[drr] & & \\
  B                      & C & D }
\end{displaymath}
\end{example}
Bạn có thể vẽ các biểu đồ ``hấp dẫn'' bằng cách thêm vào phía trên dấu mũi tên các nhãn. Để làm điều này, bạn có thể sử dụng các toán tử viết lên trên hay viết xuống dưới.
\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}
Như đã thấy, bạn sử dụng các toán tử này trong chế độ toán học. Sự khác biệt duy nhất là việc viết văn bản lên trên được hiểu là ``viết lên phía trên của mũi tên'' còn viết văn bản ở dưới nghĩa là ``ở dưới dấu mũi tên''. Ngoài ra chúng ta còn có toán tử thứ ba là: \verb+|+. Lệnh đặt nội dung lên trên mũi tên.
\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}

Để vẽ các mũi tên có khoảng trống ở giữa, bạn có thể sử dụng lệnh \verb!\ar[...]|\hole!.

Trong một số tình huống, việc phân biệt các kiểu mũi tên khác nhau là quan trọng, khi này, bạn có thể đặt các nhãn lên các dẫu mũi tên hay thay đổi kiểu hiển thị của nó:
\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
}
\end{displaymath}
\end{example}

Bạn hãy chú ý sự khác biệt giữa hai biểu đồ dưới đây:
\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}

Từ bổ sung thêm vào giữa hai dấu gách chéo /~/ xác định cách các đường cong được vẽ. Ngoài ra, \Xy-pic cung cấp nhiều cách khác nhau để tác động đến việc vẽ các đường cong. Để biết thêm chi tiết, bạn có thể tham khảo thêm tài liệu của \Xy-pic.

% Local Variables:
% TeX-master: "lshort2e"
% mode: latex
% coding: utf-8
% End: