You are on page 1of 358

NGUYỄN HỮU ĐIỂN

LATEX
VỚI GÓI LỆNH
VÀ PHẦN MỀM CÔNG CỤ

Nhà xuất bản Đại học Quốc gia Hà Nội 2004


Chịu trách nhiệm xuất bản:

Giám đốc: PHÙNG QUỐC BẢO


Tổng biên tập: NGUYỄN BÁ THÀNH

Biên tập và sửa bản in: LAN HƯƠNG


Trình bầy bìa: NGỌC ANH

LATEX TRA CỨU VÀ SOẠN THẢO


Mã số: 1K-23 ĐH2008 (In lần thứ 2)
In 1000 cuốn, khổ 16×24 cm tại Nhà in Đại học Quốc gia Hà Nội
Số xuất bản: 106 - 2008/CXB/12 - 14/ĐHQGHN, ngày 23/1/2008
Quyết định xuất bản số: 23KH/XB
In xong và nộp lưu chiểu Quý II năm 2008
LỜI GIỚI THIỆU

Cuốn sách LATEX tra cứu và soạn thảo-NXB ĐHQG -2001 của chúng
tôi đã giới thiệu những phần sử dụng cơ bản của LATEX cùng với phần
mềm PcTEX. Nhiều bạn đọc đã sử dụng tốt trong thời gian ngắn để làm
chế bản các loại sách báo về Toán. Nhưng cũng còn nhiều câu hỏi và
những khó khăn khi sử dụng LATEX, những vấn đề nhiều bạn đọc hỏi
đều thuộc những công cụ kèm theo của LATEX mà ở Việt Nam đều khó
tìm được và không ai phổ biến. Tôi biên soạn cuốn sách này nhằm nâng
cao tay nghề sử dụng LATEX cùng với công cụ của nó. Các bạn tìm thấy
trong cuốn sách này những cách làm, các thủ thuật thay đổi chính trong
LATEX cho phù hợp thiết kế văn bản của ta như thay đổi tiêu đề, thay đổi
số đếm, chú thích,... Những công cụ gần như người sử dụng LATEX nào
cũng nên có như các gói lệnh chuyên về một chủ đề nào đó trong toán
học như biểu bảng, vẽ hình, đặt hình trong văn bản, ... Những gói lệnh
cần thiết được giới thiệu và cho ví dụ áp dụng cụ thể, các bạn có thể
thử nghiệm. Gắn liền với LATEX là những phần mềm trợ giúp soạn thảo,
in ấn, trong cuốn sách này chúng tôi giới thiệu và hướng dẫn hai phần
mềm thông dụng hiện nay là PcTEX và MikTEX cùng với hệ soạn thảo
của chúng. Nội dung của cuốn sách được chia làm bốn phần cơ bản.
I. LATEX cơ bản và thông số biến đổi: Từ chương 1 đến chương 4. Phần
này giới thiệu những điều cơ bản nhất khi sử dụng LATEX, không
lặp lại tất cả những gì đã giới thiệu trong cuốn sách trước, chỉ
giới thiệu những vấn đề và cách thức thay đổi trong LATEX đã có.
Hướng dẫn các bạn chủ động hơn trong khi sử dụng khai báo cơ
bản của LATEX. Phần này và phần sau có liên quan với nhau đều
muốn thay đổi một phần vốn có của LATEX. Phần này và phần phụ
lục bao hàm toàn bộ sử dụng LATEX, nghĩa là những người bắt đầu
học LATEX cũng tìm thấy trong cuốn sách này cách dùng LATEX. Còn
những người đã sử dụng LATEX thì đây là cẩm nang tương đối đầy
đủ khi sử dụng LATEX.
4 LATEX với gói lệnh và phần mềm công cụ

II. Những gói lệnh kèm theo LATEX: Từ chương 5 đến chương 8. Để
đáp ứng nhu cầu sử dụng LATEX từ phiên bản LATEX 2ε Hội những
người dùng TEX trên thế giới đã thiết kế mở cho người sử dụng,
đó là kèm theo các gói lệnh thiết kế của người dùng cùng với
LATEX. Hiện nay tồn tại một lượng lớn những gói công cụ phục
vụ cho mọi đối tượng chuyên biệt khi dùng LATEX như các gói về
phông chữ, gói lệnh về lược đồ giao hoán, gói lệnh về vẽ hình
trong LATEX, gói lệnh về hóa, gói lệnh về vật lý, hầu như các nhà
xuất bản nào cũng có gói lệnh riêng định dạng lại sách báo của
mình... Trong phần này giới thiệu những gói lệnh cơ bản cho chế
bản sách, các báo, bài báo, luận án, nhúng hình, ... Mỗi gói lệnh
đều có cách sử dụng đơn giản là khai báo và thực hiện các lệnh
trong gói lệnh đó, với những cộng cụ trong phần này các bạn sẽ
sử dụng LATEX dễ hơn và có nhiều ý tưởng văn bản làm đẹp tài
liệu của mình.
III. Những phần mềm quản lý LATEX: Từ chương 9 đến chương 11.
Phần này liên quan đến phần trước là sử dụng gói lệnh tiếng Việt
cho từng phần mềm quản lý LATEX. Ta đã biết PcTEX và sử dụng
rất dễ dàng với gói lệnh tiếng Việt của chúng tôi. Chúng tôi nhắc
lại ở đây một số chú ý cần thiết mà nhiều người hay hỏi chúng tôi
khi sử dụng. Chương này còn giới thiệu phần mềm quản lý LATEX
cho không MikTEX và cách sử dụng nó cùng với gói lệnh cho tiếng
Việt, đặc biệt là cho tiếng Việt. Bằng một hệ soạn thảo tệp nguồn
LATEX hiện đại cho không với MikTEX thực sự cho chúng ta sử
dụng MiKTeX ưu tiên hơn. Tất cả những gì cập nhật của LATEX
với đầy đủ gói lệnh như chuyên đổi sang tệp ps, tệp pdf, ... trong
cuốn sách này chúng tôi trình bầy, đáng giá cho các bạn dùng thử
MiTEX. Còn PcTEX vẫn dễ sử dụng nhưng phiên bản mới không
được cung cấp kịp thời và các gói lệnh của nó cũng không được
đầy đủ lắm.
IV. Phụ lục cần thiết về LATEX: Chương 12 và chương 13. Những ký
hiệu và cách sử dụng LATEX được giới thiệu trong phần này. Đây
là phần tổng quan mọi mặt về sử dụng LATEX.
Cuối cùng là các từ khóa của LATEX dùng để tra cứu khi cần thiết.
Sử dụng cuốn sách này
Phần mềm và gói lệnh trong cuốn sách này được thử trên:
- Hệ điều hành: MS Window 2000.
- Phần cứng: CPU Pentium IV tốc độ 850 Hz, RAM 252Mb.
Lời giới thiệu 5

- Hệ soạn thảo văn bản dành cho TEX: WinShell 2.5 của Hoer.
- Phần mềm MiTEX 2.4.
- LATEX được cập nhất mới nhất lấy từ Internet.
- Gói lệnh VnTEX 2.0 phiên bản mới nhất được cập nhật.
Những ví dụ được mô tả theo chia đôi trang sách hoặc một phần ở
trên nguồn và dưới kết quả thật. Biểu tượng của mỗi ví dụ là

7 8 : 2
Phần nguồn cần gõ vào Kết quả đạt được in ra
Tất cả ví dụ trong sách này đều chạy được trên PcTEX32, nhiều gói
lệnh được nạp vào cùng với gói lệnh VnTEX2.0. Những ví dụ được gõ
vào trong dòng chấm chấm dưới đây:
\documentclass{article}
\usepackage{amsmath,amsxtra,amssymb,latexsym, amscd,amsthm}
\usepackage{vnfonts}
\begin{document}
....................................................
\end{document}
Tất cả những gói công cụ và phần mềm có nói tới trong sách này
được tác giả chuẩn bị thành một đĩa CD cài đặt, nội dung chính là phần
cài đặt VnTEX 2.0 cho cuốn sách này. Ngoài ra trong đĩa CD theo cuốn
sách này còn chứa rất nhiều ví dụ mẫu mà không có khả năng mô tả
hết ở đây. Bạn đọc có thể liên hệ với tác giả để mua sản phẩm CD này.
Mọi liên lạc và trợ giúp với tác giả:
Nguyễn Hữu Điển
Phòng Giải tích số và Tính toán khoa học, Viện Toán học
Hộp thư: Viện Toán học, 18 Hoàng Quốc Việt, 10307 Hà Nội, Việt
Nam.
Điện thoại: Cơ quan: 04-7 563 474, Nhà riêng: 04-7 560 253
Điện thoại di động: 091 2342752
Thư điện tử: nhdien@math.ac.vn
Lời cảm ơn
Nhân đây tác giả cảm ơn các bạn đọc đã sử dụng LATEX trong soạn thảo
văn bản tiếng Việt và cho những lời khuyên bổ ích, cần thiết để tôi hoàn
thiện phần mềm của mình. Tác giả cảm ơn GS.TSKH Hoàng Xuân Phú
đã động viên, giúp đỡ và cho nhiều lới khuyên cần thiết để hoàn thiện
6 LATEX với gói lệnh và phần mềm công cụ

cuốn sách. Chân thành cảm ơn đồng nghiệp trong phòng Giải tích số và
Tính toán khoa học, lãnh đạo Viện Toán học. Tác giả nhận được nhiều
ý kiến đóng góp có giá trị của Ban biên tập và những điều kiện thuận
lợi cho việc xuất bản cuốn sách này của Nhà xuất bản đại học Quốc gia
Hà Nội, xin cảm ơn.
Hà Nội, ngày 15 tháng 7 năm 2004
Tác giả
MỤC LỤC

Lời giới thiệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3


MỤC LỤC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
DANH SÁCH CÁC HÌNH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
DANH SÁCH CÁC BẢNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Chương 1. Cấu trúc văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1. Giới thiệu về TEX và LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2. Cấu trúc tệp nguồn LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3. Định dạng trang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.4. Phong cách trang văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5. Cấu trúc lôgic của văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Chương 2. Lệnh và môi trường . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.1. Lệnh trong LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.2. Số đếm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.3. Định nghĩa lệnh mới . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.4. Gói lệnh ifthen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.5. Môi trường LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.6. Định nghĩa môi trường mới . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.7. Môi trường toàn văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.8. Môi trường khối hộp văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Chương 3. Văn bản toán học . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
3.1. Phông và ký hiệu trong công thức . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.2. Môi trường ma trận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.3. Biểu đồ trong toán học . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.4. Mở rộng môi trường theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.5. Dạng thông số toán học . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.6. Sắp xếp đẳng thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.7. Tùy chọn của gói lệnh amsmath . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8 LATEX Tra cứu và soạn thảo

Chương 4. Thông báo lỗi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116


4.1. Những lỗi khi sử dụng LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.2. Các loại lỗi điển hình trong LATEX . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.3. Danh sách các lỗi của LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.4. Thông báo lỗi của TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.5. Những cảnh báo: Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.6. Phương pháp tìm lỗi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Chương 5. Công cụ định dạng cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . 145
5.1. Một số định dạng cơ bản trong LATEX . . . . . . . . . . . . . . . . . . . . . . 146
5.2. Định dạng đoạn và câu văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . 156
5.3. Nguyên dạng văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.4. Chú thích, ghi chú và ghi bên lề . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.5. Định dạng văn bản nhiều cột . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Chương 6. Các dạng biểu bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
6.1. Cấu trúc bảng cơ bản trong LATEX . . . . . . . . . . . . . . . . . . . . . . . . . 171
6.2. Gói lệnh array mở rộng môi trường tabular . . . . . . . . . . . . . . . 175
6.3. Gói lệnh tabularx tự động tính độ rộng cột . . . . . . . . . . . . . . . 180
6.4. Gói lệnh delarray với ký hiệu biên mảng . . . . . . . . . . . . . . . . . . 183
6.5. Môi trường bảng tabbing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
6.6. Gói lệnh supertabular bảng dài nhiều trang . . . . . . . . . . . . . . . 187
6.7. Gói lệnh longtable bảng nhiều trang tinh vi . . . . . . . . . . . . . . . 189
6.8. Một số gói lệnh sắp cột và hàng một bảng . . . . . . . . . . . . . . . . . 193
6.9. Gói lệnh multirow sắp xếp dọc cột bảng . . . . . . . . . . . . . . . . . . 196
6.10. Điều chỉnh bảng với ô ngang toàn bộ cột . . . . . . . . . . . . . . . . . 198
6.11. Chú thích dưới bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
6.12. Bảng lồng trong bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
Chương 7. Vẽ hình và quản lý hình vẽ . . . . . . . . . . . . . . . . . . . . . . . . . 202
7.1. Những gói lệnh làm khung văn bản . . . . . . . . . . . . . . . . . . . . . . 203
7.2. Môi trường picture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.3. Gói lệnh đưa hình vào . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
7.4. Tô mầu nền và chữ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
7.5. Các loại môi trường di động . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Mục lục 9

Chương 8. Làm chỉ dẫn và tra cứu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230


8.1. Bảng mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
8.2. Chỉ dẫn chéo trong văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.3. Làm danh mục từ khóa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
8.4. Người dùng định dạng lại chỉ số . . . . . . . . . . . . . . . . . . . . . . . . . 250
8.5. Thay đổi trình bày bảng danh mục từ khóa . . . . . . . . . . . . . . . 255
8.6. Trích dẫn tài liệu tham khảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
Chương 9. Sử dụng phần mềm PCTEX . . . . . . . . . . . . . . . . . . . . . . . . . 265
9.1. Phần cài đặt và lập cấu hình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
9.2. Hướng dẫn sử dụng trong soạn thảo . . . . . . . . . . . . . . . . . . . . . 270
9.3. PcTEX với phần mềm VnTEX2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
Chương 10. Sử dụng phần mềm MiKTEX . . . . . . . . . . . . . . . . . . . . . . 274
10.1. Phần cơ bản của MiKTEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
10.2. Chương trình soạn thảo WinShell . . . . . . . . . . . . . . . . . . . . . . . 277
10.3. MikTEX với phần mềm VnTEX2.0 . . . . . . . . . . . . . . . . . . . . . . . . 287
Chương 11. Những phần mềm trợ giúp . . . . . . . . . . . . . . . . . . . . . . . . 290
11.1. Phần mềm vẽ hình WinTpic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
11.2. Đưa các hình đã vẽ từ WinTpic vào LATEX . . . . . . . . . . . . . . . . 297
11.3. Các chương trình vẽ hình ngoài LATEX . . . . . . . . . . . . . . . . . . . . 300
11.4. Các chương trình đọc tài liệu và in ấn . . . . . . . . . . . . . . . . . . . 302
Chương 12. Các lớp văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
12.1. Sử dụng văn bản không cần mẫu . . . . . . . . . . . . . . . . . . . . . . . . 305
12.2. Lớp văn bản letter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
12.3. Lớp văn bản slides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
12.4. Lớp văn bản article và book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Chương 13. Tra cứu địa chỉ và kí hiệu . . . . . . . . . . . . . . . . . . . . . . . . . 322
13.1. Địa chỉ các gói lệnh trên Internet . . . . . . . . . . . . . . . . . . . . . . . . 322
13.2. Mẫu chữ tiếng Việt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
13.3. Những kí hiệu đẹp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
TÀI LIỆU THAM KHẢO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
DANH MỤC TỪ KHÓA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
DANH SÁCH CÁC HÌNH

1.1 Tổng quan các tệp TEX và LATEX . . . . . . . . . . . . . . . . . 16


1.2 Trang văn bản do gói lệnh layout . . . . . . . . . . . . . . . . 20
1.3 Tiêu đề trên trang chẵn lẻ của gói lệnh fancyheadings . . . . 29
1.4 Tiêu đề và số trang với gói lệnh fancyheadings . . . . . . . . 30
1.5 Thông số liên quan đến tiêu đề đoạn . . . . . . . . . . . . . . 36
1.6 Thông số liên quan đến đoạn nhỏ . . . . . . . . . . . . . . . . 37

5.1 Cấu trúc danh sách tổng quát . . . . . . . . . . . . . . . . . . 152


5.2 Hình tròn và tam giác . . . . . . . . . . . . . . . . . . . . . . . 159

6.1 Mô phỏng môi trường bảng supertabular . . . . . . . . . . . 188


6.2 Mô phỏng môi trường supertabular* . . . . . . . . . . . . . . 189
6.3 Mô phỏng môi trường longtable . . . . . . . . . . . . . . . . 190

7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209

8.1 Sơ đồ làm chỉ số . . . . . . . . . . . . . . . . . . . . . . . . . . 243


8.2 Tệp nguồn vdmindex.tex . . . . . . . . . . . . . . . . . . . . . 257
8.3 Tệp kết quả vdmindex.dvi . . . . . . . . . . . . . . . . . . . . 258
8.4 Tệp nguồn vdindex.tex . . . . . . . . . . . . . . . . . . . . . . 261
8.5 Tệp kết quả vdindex.dvi . . . . . . . . . . . . . . . . . . . . . 262
DANH SÁCH CÁC BẢNG

1.1 Giá trị mặc định cho thông số trang văn bản . . . . . . . . . . 21
1.2 Tên trong LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2.1 Bảng các loại đơn vị độ đo . . . . . . . . . . . . . . . . . . . . 46

3.1 Dấu trong môi trường toán . . . . . . . . . . . . . . . . . . . 78


3.2 Dấu co dãn của LATEX . . . . . . . . . . . . . . . . . . . . . . . 78
3.3 Chữ cái Hy Lạp . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.4 Toán tử nhị phân . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.5 Toán tử quan hệ . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.6 Ký hiệu mũi tên . . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.7 Toán tử nhị phân với gói lệnh amssymb . . . . . . . . . . . . 81
3.8 Ký hiệu toán học khác . . . . . . . . . . . . . . . . . . . . . . 83
3.9 Ký hiệu toán học hai cỡ . . . . . . . . . . . . . . . . . . . . . . 83
3.10 Ký hiệu biên . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.11 Ký hiệu biên phóng to . . . . . . . . . . . . . . . . . . . . . . 85
3.12 Ký hiệu biên và chữ cái Hebrew với gói lệnh amssymb . . . . 85
3.13 Ký hiệu mũi tên với gói lệnh amssymb . . . . . . . . . . . . . 86
3.14 Toán tử nhị phân với gói lệnh amssymb . . . . . . . . . . . . 86
3.15 Toán tử quan hệ với gói lệnh amssymb . . . . . . . . . . . . . 87
3.17 Một số ký hiệu khác với gói lệnh amssymb . . . . . . . . . . 87
3.16 Toán tử quan hệ phủ định với gói lệnh amssymb . . . . . . . 88
3.18 Bảng cỡ của chỉ số và số hạng của phân số . . . . . . . . . . . 90

6.1 Quần nam cỡ . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

8.1 Thông số định dạng nhập vào cho MakeIndex . . . . . . . . 251


8.2 Thông số định dạng nhập vào cho MakeIndex . . . . . . . . 252
12 LATEX Tra cứu và soạn thảo

13.3 Bảng phông ABC trong LATEX . . . . . . . . . . . . . . . . . . 332


13.4 Bảng phông webdings trong LATEX . . . . . . . . . . . . . . . 333
13.5 Bảng phông wingdin0 trong LATEX . . . . . . . . . . . . . . . 334
13.6 Bảng phông wingdin2 trong LATEX . . . . . . . . . . . . . . . 335
13.7 Bảng phông wingdin3 trong LATEX . . . . . . . . . . . . . . . 336
13.8 Bảng phông monotype trong LATEX . . . . . . . . . . . . . . . 337
13.9 Bảng phông sports at 12pt trong LATEX . . . . . . . . . . . . . 338
13.10Bảng phông animals1 at 14pt trong LATEX . . . . . . . . . . . 338
13.11Bảng phông animals2 at 14pt trong LATEX . . . . . . . . . . . 338
CHƯƠNG 1

CẤU TRÚC VĂN BẢN

1.1. Giới thiệu về TEX và LATEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13


1.1.1. Sự phát triển của TEX và EX . . . . . . . . . . . . . . . . . . . .
LAT 14
1.1.2. LATEX và các thành phần của nó . . . . . . . . . . . . . . . . . . . 14
1.2. Cấu trúc tệp nguồn LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.1. Lớp văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.2.2. Những tùy chọn chuẩn của lớp văn bản . . . . . . . . . . . 17
1.2.3. Những lệnh riêng cho lớp và gói lệnh . . . . . . . . . . . . . 18
1.3. Định dạng trang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.1. Định dạng trang cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.2. Thay đổi định dạng trang . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.3. Trang nằm ngang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
1.4. Phong cách trang văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4.1. Phong cách cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4.2. Tiêu đề chạy và đánh số trang . . . . . . . . . . . . . . . . . . . . 26
1.4.3. Viết phong cách văn bản mới . . . . . . . . . . . . . . . . . . . . . 27
1.4.4. Gói lệnh fancyheadings tự tạo phong cách trang . . 28
1.4.5. Định dạng đoạn văn bản và phân trang . . . . . . . . . . . 31
1.5. Cấu trúc lôgic của văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
1.5.1. Đánh số tiêu đề một đoạn . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.5.2. Định dạng tiêu đề một đoạn . . . . . . . . . . . . . . . . . . . . . . 36
1.5.3. Định dạng tiêu đề chương và phần tập sách . . . . . . . 39
1.5.4. Thay đổi tên các loại tiêu đề trong LATEX . . . . . . . . . . . 41

1.1. Giới thiệu về TEX và LATEX


Ngày nay LATEX không chỉ còn giới hạn dùng cho những người làm
toán nữa. Nó được sử dụng rộng rãi làm các báo cáo, thư từ qua mạng,
những bài báo, sách vở khoa học mọi ngành, ... LATEX đã được đặt khắp
nơi trên mạng toàn cầu Internet. Mọi vấn đề về LATEX người dùng có
thể tư vấn các trung tâm quản lý LATEX. Điều quan trọng là LATEX chạy
trên các môi trường và là chương trình cho không người dùng, nhưng
14 Chương 1. Cấu trúc văn bản

chất lượng làm các bản thảo chế bản chất lượng cao. Những công cụ
của LATEX đã cung cấp cho ta việc quản lý văn bản chính xác, nhất quán
một lần dùng mãi.

1.1.1. Sự phát triển của TEX và LATEX

Tháng 5 năm 1977, Donald Knuth ở Đại học Stanford bắt đầu tạo ra
hệ thống xử lý văn bản theo một phương thức hoàn toàn khác với các
chương trình soạn thảo khác, ngày nay gọi là TEX và Metafont. Trong
lời nói đầu cuốn sách TEX book, D. Knuth có viết "TEX là một hệ thống
xếp chữ mới để tạo ra những cuốn sách đẹp và đặc biệt là những cuốn sách có
nhiều ký hiệu toán học. Với bản thảo định dạng bằng TEX bạn sẽ nói với máy
tính bản thảo chính xác như thế nào để triển khai vào các trang mà chất lượng
nghệ thuật của nó so sánh với những máy in tốt nhất của thế giới".
Sau đó là sự phổ biến TEX và Metafont như là một hướng mới trong
chế bản điện tử. Bắt đầu từ năm 1980, Leslie Lamport bắt đầu tạo ra hệ
thống soạn thảo văn bản ngày nay gọi là LATEX dựa trên định dạng của
TEX. Hệ thống LATEX thêm vào những lệnh tổng quát cho TEX và hướng
người dùng vào cấu trúc văn bản hơn là định dạng chi tiết. Một số lệnh
bậc cao cho phép người dùng dễ dàng soạn ra hầu hết các loại tài liệu.
Những chức năng của LATEX kết hợp với những chương trình phụ
trợ như sinh ra chỉ số, tạo ra tài liệu, tra cứu chéo, bảng mục lục, ... làm
cho LATEX hoàn thiện và dễ sử dụng hơn.
Người dùng LATEX và TEX càng ngày càng nhiều, để đáp ứng với đòi
hỏi đó và ứng dụng các công nghệ tin học hiện đại, từ năm 1989 có một
dự án xem xét lại LATEX và mở rộng nó, người ta gọi là dự án LATEX3.
Nhóm những người dùng TEX với các chuyên gia hàng đầu về TEX như
Frank Mittelbach, Chirs Rowley và Rainer Schopf đang nghiên cứu và
phát triển LATEX trong giai đoạn mới.

1.1.2. LATEX và các thành phần của nó

Nhưng LATEX làm việc như thế nào, các thành phần của nó là gì ta
nên biết khái quát. Cách hoạt động của LATEX và các tệp mà LATEX cần
khi chạy sẽ được giới thiệu ở đây.
1.2. Cấu trúc tệp nguồn LATEX 15

Tệp quan trọng nhất cho chạy LATEX (đôi khi ta còn gọi là biên dịch
LATEX) là tệp nguồn văn bản. Đó là tệp chỉ có các kí tự và được soạn thảo
bằng một hệ soạn thảo bình thường, có phần mở rộng là *.tex. Những
tệp chứa định nghĩa cấu trúc văn bản có phần mở rộng là *.cls hoặc
*.sty và được đặt trong các thư mục chính của LATEX. LATEX được phổ
biến với 5 lớp văn bản cơ bản như article, report, book, slides và
letter. Những lớp văn bản này người dùng có thể tùy chọn của LATEX
và dùng thêm các gói lệnh được nghiên cứu tương đối chi tiết trong
cuốn sách này.
Kích thước của các phông ký tự được TEX sử dụng gọi là kích thước
phông và được mã hóa trong tệp *.tfm. Mỗi phông dùng trong tài liệu
cần có tệp *.tfm để mô tả chiều cao, chiều rộng và chiều sâu như thông
tin hạt nhân cho mỗi ký tự.
Các tệp khác liên quan đến LATEX và LATEX chạy được thể hiện trong
sơ đồ hình 1.1, còn sử dụng các tệp như thế nào dần dần ta sẽ nghiên
cứu trong nội dung cuốn sách này.

1.2. Cấu trúc tệp nguồn LATEX


Ta có thể dùng LATEX cho một vài mục đích khác nhau như viết bài
báo, viết bức thư hoặc làm cuốn sách. Cho những mục đích khác nhau
này ta định dạng thành các lớp văn bản khác nhau.

1.2.1. Lớp văn bản

Lệnh đầu tiên trong phần đầu của tệp nguồn định dạng cách thực
hiện định dạng toàn cục cho toàn bộ văn bản. Một ví dụ cho lớp văn
bản article:
\documentclass[12pt, draft]{article}
\usepackage{amsmath,amssymb}
\begin{document}
..........
\end{document}
Tại vị trí article ta có thể thay vào bằng những lớp khác như book,
16 Chương 1. Cấu trúc văn bản

Tệp người dùng đưa vào (tex)

Các tệp sinh ra Tệp định dạng (fmt)


Tệp lớp và gói lệnh (cls, sty)
Tệp các hình (lof) LATEX Tệp cỡ phông (tfm)
Tệp các bảng (lot) Tệp định nghĩa phông (fd)
Tệp chỉ số (ind, bbl)
Tệp mục lục (toc)
Tệp chỉ số (idx)
Tệp trung gian (aux) Tệp nhật ký (lis, log)
Tệp kết quả (dvi)

Tệp PostScript Màn hình Máy in Tệp khác (pdf)

Hình 1.1: Tổng quan các tệp TEX và LATEX


ý nghĩa các tệp phần mở rộng tệp
Tệp LATEX đưa vào *.tex, *.ltx
Tệp kết quả của TEX *.dvi
Tệp ghi hoạt động của TEX *.log, *.texlog, *.lis, *.list
Tệp nguồn Metafont *.mf
Tệp định nghĩa phông *.fd
Tệp ảnh của phông *.pk
Tệp kích thước của phông *.tfm
Tệp chuỗi ký tự chung *.pool, *.poo, *.pol
Tệp định dạng văn bản *.fmt
Tệp cấu trúc và lớp L TEX
A *.clo, *.cls, *.dtx, *.sty
Tệp trung gian của LATEX *.aux
Tệp bảng mục lục *.toc
Tệp danh sách các hình *.lof
Tệp danh sách các bảng *.lot
Tệp liên quan chương trình BibTEX *.bbl, *.bib, *.blg, *.bst
Tệp chỉ số và chương trình MakeIndex *.idx, *.ilg, *.ind, *.ist

report, letter và một số lớp văn bản khác được thiết kế do người
dùng. Những khác biệt cơ bản giữa những lớp này không những chỉ
cách bố trí trang mà còn trong sự tổ chức văn bản. Ví dụ lớp article
1.2. Cấu trúc tệp nguồn LATEX 17

có thể chứa \part, \section, \subsection,... , trong khi đó report


có thể có \chapter. Lớp văn bản book cũng có \chapter, nhưng thực
hiện trang chẵn và trang lẻ khác nhau.
Từ lệnh \documentclass đến lệnh \begin{document} là phần mở
đầu của văn bản, nó bao gồm những lệnh khai báo có tác dụng trên
toàn văn bản. Đặc biệt là lệnh \usepackage thêm vào những lệnh đã có
của lớp văn bản những gói lệnh bổ sung mới. Như vậy nếu muốn thay
đổi mẫu văn bản ta có những khả năng sau đây:

• Thay đổi đặt thông số chuẩn trong một lớp văn bản trong tệp lớp
văn bản (có phần mở rộng .cls).
• Thêm vào một hoặc nhiều gói lệnh cho văn bản và dùng những
lệnh của chúng.
• Thay đổi những thông số đặt mặc định trong những tệp gói lệnh
(có phần mở rộng là .sty).
• Định nghĩa một gói lệnh mới có chứa những thông số cần đặt và
gọi vào bằng lệnh \usepackage.
• Sự điều chỉnh lại bằng các lệnh đặt trong phần mở đầu.

1.2.2. Những tùy chọn chuẩn của lớp văn bản

Biến tùy chọn cho phép ta tạo ra những định dạng khác nhau của
văn bản. Chúng được nhóm lại như sau:

• Chọn cỡ phông: Cỡ phông cơ bản cho toàn văn bản 10pt, 11pt,
12pt. Số mặc định cho tùy chọn này là 10pt.
• Cỡ trang chỉ sẵn: LATEX tính toán chiều rộng của dòng và những
dòng cho một trang theo cỡ phông đã chọn và loại trang. Đó là
những động tác định dạng một trang. Ta chỉ ra tùy chọn này bằng:
letterpaper(11× 8.5 in) a4paper(29.7× 21 cm)
legalpaper(14× 8.5 in) a5paper(21× 14.8 cm)
executivepaper(10.5× 7.25 in) b5paper(25× 17.6 cm)
• Định dạng trang: Văn bản trên một trang có thể định dạng
thành một hoặc hai cột bằng tùy chọn onecolumn hoặc twocolumn.
Mặc định là onecolumn. Trong trường hợp tùy chọn twocolumn,
18 Chương 1. Cấu trúc văn bản

khoảng cách giữa hai cột có chiều rộng điều khiển bằng lệnh
\columnsep và đường kẻ đứng \columnseprule.
Trang đánh số chẵn và trang đánh số lẻ có thể in ra bằng tùy chọn
oneside hoặc twoside.Với tùy chọn oneside tất cả các trang in ra
định dạng như nhau, còn twoside tiêu đề chạy trên trang chẵn và
lẻ khác nhau và số trang đánh số khác nhau.
Lớp văn bản book bắt đầu một chương bao giờ cũng ở trang bên
phải, có số trang lẻ bằng tùy chọn openright. Còn openany bắt
đầu chương ngay khi kết thúc chương trước.
Lớp văn bản article dùng tùy chọn titlepage dành trang đầu
tiên làm trang bìa, nếu không thì cho tùy chọn notitlepage.

R
• Những tùy chọn khác:

leqno Đánh số công thức toán về phía bên trái thay giá trị

R
đánh số bên phải.
fleqn Thể hiện công thức toán đẩy về phía bên trái dòng mà
bình thường chúng ở giữa dòng. Khoảng thụt công thức so

R
với đầu dòng bằng thông số \mathindent.
openbib Định dạng liệt kê tài liệu tham khảo theo những

R
dòng khác nhau cho mỗi chi tiết.
draft Nếu ngắt dòng không đạt được LATEX sẽ đánh dấu

R
bằng vệt đen bên cạnh dòng.
final Ngược lại với tùy chọn draft và là mặc định.

1.2.3. Những lệnh riêng cho lớp và gói lệnh

LATEX có rất nhiều lệnh bên trong những tệp lớp văn bản và gói lệnh,
những lệnh này chỉ có tác dụng trong nó mà ta không thể sử dụng
ở trong văn bản của ta dù có sử dụng lớp văn bản hoặc gói lệnh đó.
Những lệnh này thường chứa ký tự @, như đã biết ký tự này là ký tự
đặc biệt, những lệnh có \ sau đó là @ là không hợp lệ theo định nghĩa
lệnh (xem chương 2). Nhưng những lệnh này thực hiện trong gói lệnh
thì LATEX lại coi như một ký tự và hợp lệ.
Tuy nhiên ta có thể sửa lại những lệnh trong của gói lệnh hoặc lớp
1.3. Định dạng trang 19

văn bản ngay ở phần mở đầu bằng cách bao quanh khu vực có lệnh
chứa @ bằng \makeatletter và \makeatother.

Ví dụ: Trong lớp văn bản đánh \documentclass{article}


số công thức toán tăng dần ...
bằng lệnh trong \@addtoreset. \makeatletter
Khi sử dụng lớp văn bản \@addtoreset{equation}{section}
article, ta có thể đánh số công \makeatother
thức theo từng phần văn bản \begin{document}
(nghĩa là mỗi phần lại đánh số ......
lại từ đầu), thì ngay phần mở \end{document}
đầu văn bản ta có dãy lệnh:

Ta sẽ sử dụng quy trình này trong một số phần sau.

1.3. Định dạng trang

1.3.1. Định dạng trang cơ bản

Những thông số định dạng trang được giải thích sau đây và hình

R
1.2 thể hiện hệ thống những thông số này.

R
\textheight Chiều cao của khối văn bản chính một trang.

R
\textwidth Chiều rộng trang văn bản.
\columnsep Chiều rộng giữa những cột văn bản trong một trang ở

R
chế độ nhiều cột.
\columnseprule Chiều rộng của đường kẻ tách hai cột liền nhau

R
trong chế độ văn bản nhiều cột (giá trị mặc định là 0pt).
\columnwidth Độ rộng của một cột trong chế độ nhiều cột. LATEX
tính toán thông số này từ \textwidth và \columnsep cho thích

R
hợp.
\linewidth Độ rộng của dòng hiện thời. Thường được đặt bằng
\columnwidth nhưng có thể nhận giá trị khác nhau do đặt lề trái,

R
phải.
\evensidemargin Với trường hợp in hai mặt, một khoảng trắng
phụ thêm vào bên trái của những trang chẵn.
20 Chương 1. Cấu trúc văn bản

4 5
2
Tiêu đề

Ghi chú
Phần văn bản 7
bên lề

10

8
11

1
Ghi chú

1 one inch + \hoffset 2 one inch + \voffset


3 \oddsidemargin = -15pt 4 \topmargin = -22pt
5 \headheight = 12pt 6 \headsep = 12pt
7 \textheight = 554pt 8 \textwidth = 341pt
9 \marginparsep = 7pt 10 \marginparwidth = -7pt
11 \footskip = 27pt \marginparpush = 5pt (not shown)
\hoffset = 0pt \voffset = 0pt
\paperwidth = 455pt \paperheight = 682pt
Hình 1.2: Trang văn bản do gói lệnh layout

\oddsidemargin R
Với trường hợp in hai mặt, một khoảng trắng phụ

R
thêm vào bên trái của những trang lẻ.
\footskip Khoảng cách dọc từ đường cơ sở của dòng cuối cùng
trong thân văn bản đến đường cơ sở của dòng tiêu đề chạy dưới.
1.3. Định dạng trang 21

R
R
\headheight Chiều cao của tiêu đề chạy trên.

R
\headsep Khoảng cách giữa tiêu đề chạy và thân văn bản.

R
\topmargin Khoảng cách đứng thêm vào phía trên tiêu đề chạy.
\marginparpush Khoảng cách nhỏ nhất giữa hai cột bên lề (trong

R
hình không có).
\marginparsep Khoảng cách ngang giữa thân văn bản và ghi chú

R
bên lề.
\marginparwidth Chiều rộng của cột ghi chú.

Những giá trị mặc định của thông số trên thể hiện trong bảng 1.1.

Thông số In hai mặt In một mặt


10pt 11pt 12pt 10pt 11pt 12pt
\oddsidemargin 44pt 36pt 21pt 63pt 54pt 39pt
\evensidemargin 82 74pt 59pt 63pt 54pt 39pt
\marginparwidth 107pt 100pt 85pt 90pt 83pt 68pt
\marginparsep 10pt 10pt 10pt như trên
\maginparpush 5pt 5pt 7pt như trên
\topmargin 27pt 27pt 27pt như trên
\headheight 12pt 12pt 12pt như trên
\headsep 25pt 25pt 25pt như trên
\footskip 30pt 30pt 30pt như trên
\textheight 43
| 38
{z 36} như trên
×\baselineskip
\textwidth 345pt 360pt 390pt như trên
\columnsep 10pt 10pt 10pt như trên
\columnseprule 0pt 0pt 0pt như trên

Bảng 1.1: Giá trị mặc định cho thông số trang văn bản

R
Có hai lệnh mô tả chiều dài và rộng trang giấy về mặt vật lý là:
\paperheight
\paperwidth R Chiều cao của trang in ra.
Chiều rộng của trang in ra.
Mặc định của những giá trị này là phụ thuộc vào các lớp văn bản.
Trong LATEX 2ε thiết kế chi tiết hơn giá trị mặc định cho những độ
đo trên theo bảng 1.1.
22 Chương 1. Cấu trúc văn bản

1.3.2. Thay đổi định dạng trang

Khi ta muốn thay đổi giá trị của một trong những kích thước
của trang văn bản thì dùng lệnh \setlength{...}{...} hoặc
\addtolength{...}{...}. Theo kinh nghiệm chỉ nên thay đổi thông
số ở các tệp gói lệnh hoặc là trên phần mở đầu của tệp văn bản.
Do TEX lấy khoảng cách của hai dòng là \baselineskip để sắp xếp
chiều dài một trang nên khi thay đổi trang ta cố gắng tính toán dựa vào
đại lượng này. Ta có thể cho rằng \baselineskip là chiều cao của một
dòng văn bản. Do đó cách đặt phần đầu trang là hai dòng bằng
\normalsize %đặt về dòng chuẩn \baselineskip (có thể đã bị
phóng to)
\setlength{\headheight}{2\baselineskip} %chiều cao đầu
trang.
Đôi khi theo một quy định ta phải đặt một trang 50 dòng. Khi đó
ta phải tính toán tất cả các dòng theo \baselineskip trong thân trang
văn bản và cộng thêm với \topskip khoảng trống đầu trang. Chú ý để
tính toán lại ta nên dùng gói lệnh calc và dùng công thức lệnh
\setlength{\textheight}{\baselineskip*49+\topskip}
Có thể đòi hỏi đặt một trang với chiều cao cố định ví dụ như 198mm.
Ta có thể tiến hành tính toán theo các số đếm vì không biết số cụ thể và
phép chia dưới đây là chỉ lấy phần nguyên
\setlength{\textheight}{198mm-\topskip}
\newcounter{tempc}\setcounter{tempc}{\textheight}
\newcounter{tempcc}\setcounter{tempcc}{\baselineskip}
\setcounter{tempc}{\value{tempc}/\value{tempcc}}
\setlength{\textheight}{\baselineskip*\value{tempc}+\topskip}
Vì giá trị mặc định kích thước trang theo tiêu chuẩn giấy của Mỹ,
nên để thích hợp với các khổ giấy khác đã có nhiều gói lệnh viết riêng
cho việc này như gói lệnh a4dutch của Johannes Braams và Nico Poppe-
lier, gói lệnh a4wide của Jean-Francois Lamy, gói lệnh a5 và a5comb của
Mario Wolczko,... Đặc biệt chú ý gói lệnh vpage của Volker Kuhlmann
có thể đặt hầu hết các cỡ giấy của Mỹ, ngoài ra còn có thể đặt các loại
1.3. Định dạng trang 23

trang khác nhau theo ý người dùng với lệnh đầu tiên là

R
\setpapersize[<hướng trang>]{<kích cỡ>}

R
<kích cỡ> có thể là Afour, Bfive hoặc USletter, ...
<hướng trang> hướng của trang mặc định là đứng portrait,
còn lại là nằm ngang landscape. Ta cũng có thể đặt trang theo ý muốn
bằng lệnh
\setmargins{<lề trái>}{<lề trên>}{<chiều rộng>}{<chiều
cao>}%
{<chiều cao đầu trang>}{<mép đầu trang>}{<chiều cao
ghi>}{<mép ghi>}
\setmarginsrb{<lề trái>}{<lề trên>}{<lề phải>}{<lề dưới>}%
{<chiều cao đầu trang>}{<mép đầu trang>}{<chiều cao
ghi>}{<mép ghi>}
Những thông số trên đều tương ứng với các lệnh thông số của trang,
bạn đọc có thể tra lại ở những trang trước. Ví dụ ta có thể dùng giấy
Afour và có tất cả các lề là 1in còn không có tiêu đề chạy trên và ghi chú

\setpapersize{Afour}
\setmarginsrb{1in}{1in}{1in}{1in}{0pt}{0pt}{0pt}{0pt}
Số dòng trong một trang còn phụ thuộc vào cỡ ký tự trong văn bản,
trong LATEX có các cỡ 10pt, 11pt, 12pt, để định nghĩa lại \textheight
theo các cỡ cơ bản ta dùng lệnh \@ptsize cho giá trị 0, 1, 2 tương
ứng với 10pt, 11pt, 12pt. Dưới đây là một phương án (có dùng gói lệnh
ifthen)
\makeatletter
\ifthenelse{\@ptsize=0}{\setlength{\textheight}{53\baselineskip}}{}
\ifthenelse{\@ptsize=1}{\setlength{\textheight}{46\baselineskip}}{}
\ifthenelse{\@ptsize=2}{\setlength{\textheight}{42\baselineskip}}{}
\addtolength{\textheight}{\topskip}
\makeatother
Định dạng quan trọng nữa là khi in một mặt oneside và hai mặt
twoside thì khoảng trắng bên lề khác nhau, ta có thể định nghĩa lại
dựa vào biến số @twoside có giá trị đúng nếu văn bản đặt in hai mặt,
vậy
\ifthenelse{\@ptsize=0}%trường hợp 10pt, trường hợp còn lại
24 Chương 1. Cấu trúc văn bản

tương tự
{\setlength{\textwidth}{5.00in}%
\setlength{\marginparwidth}{1.00in}%
\ifthenelse{\boolean{@twoside}}%
{\setlength{\oddsidemargin}{0.55in}% In hai mặt
\setlength{\evensidemargin}{0.75in}%
}
{\setlength{\oddsidemargin}{0.55in}% In một mặt
\setlength{\evensidemargin}{0.55in}%
}}{}
Ta có thể đặt in hai mặt cũng như một mặt được, vì hiện nay làm
chế bản người ta thường in từng tờ rời, nhưng các tiêu đề chạy lại phải
theo tùy chọn in hai mặt.

1.3.3. Trang nằm ngang

Thường thường trong chế độ mặc định một trang đều theo chiều
đứng (chiều dài lớn hơn chiều rộng). Nhiều trường hợp như trang để
làm tài liệu chiếu thuyết trình, hoặc một số bảng lớn người ta thường
xoay ngang trang giấy để có kích cỡ thích hợp. Khi đó chiều dài trang
trở thành chiều rộng, ngày nay hầu như các máy in đều cung cấp khả
năng in cả hai chiều. Một văn bản LATEX quan niệm chiều ngang và
đứng hoàn toàn khác nhau. Như vậy sau lệnh \begin{document} cần
đòi hỏi thay đổi kích cỡ của trang. Gói lệnh portland của Hubert Partl
có hai lệnh để thay đổi từ trang dạng này sang trang dạng khác là
\portrait và \landscape, cả hai lệnh này khi thực hiện đều tạo ra
lệnh \clearpage để kết thúc trang hiện thời và thiết lập trang mới với
định dạng mới. Trong gói lệnh này cũng có hai môi trường hoàn toàn
tương tự portrait và landscape. Gói lệnh cũng có thể đòi hỏi một số
lệnh của người dùng như \paperheight cần cho chiều cao của trang.
Nếu chương trình hiển thị tập DVI không đúng khi ta dùng đồng thời
trong một văn bản cả in đứng và in ngang thì sau các lệnh \clearpage
ta thêm vào lệnh \special để nhận được trang in ra đúng.
Nếu ta không quan tâm tới tiêu đề chạy của văn bản có cả in ngang
và in đứng thì dùng gói lệnh lscape của David Carlisle, trong đó có
1.4. Phong cách trang văn bản 25

môi trường landscape và khắc phục được nhược điểm của gói lệnh
trên. Chú ý gói lệnh này xoay ngang trang nhưng các tiêu đề chạy theo
trang đứng vẫn giữ nguyên.

1.4. Phong cách trang văn bản

1.4.1. Phong cách cơ bản

Bình thường định dạng trang được đặt ngay phần đầu bằng lệnh:
\pagestyle{<định dạng>}

R
Đối số <định dạng> bắt buộc thuộc một trong các giá trị sau:

plain Tiêu đề trên bỏ trắng, tiêu đề dưới có số trang ở giữa. Đây


là giá trị mặc định cho hai lớp văn bản article và report (nghĩa

R
là không cần có lệnh \pagestyle).

R
empty Cả tiêu đề trên và dưới đều để trống (không đánh số trang).
headings Tiêu đề trên chứa số trang và những thông tin của đối
số các lệnh \chapter và \section, còn tiêu đề dưới để trắng. Đây

R
là giá trị mặc định của lớp văn bản book.
myheadings Cũng như thông số headings nhưng tiêu đề trên được
lấy từ lệnh \markright hoặc \markboth sẽ được giải thích ở dưới
đây.

Lệnh \thispagestyle{<định dạng>} chức năng giống như


\pagestyle, nhưng chỉ có tác dụng trên trang hiện thời có lệnh này. Ví
dụ: Lệnh \thispagestyle{empty} nghĩa là trang hiện thời để trắng cả
tiêu đề trên và dưới, nhưng không ảnh hưởng tới trang trước và trang
sau.
Lệnh \clearpage và \cleardoublepage đều để ra trang trắng,
nhưng vẫn có tiêu đề và số trang bên dưới. Lệnh thứ hai chỉ ra chắc
chắn trang tiếp theo là trang lẻ, nếu không phải trang lẻ thì nó bỏ thêm
một trang nữa. Lệnh sau đây để ra một trang hoàn toàn trắng dùng cho
việc khác
\newcommand{\clearemptydoublepage}{\newpage
{\pagestyle{empty}\cleardoublepage}}.
26 Chương 1. Cấu trúc văn bản

1.4.2. Tiêu đề chạy và đánh số trang

Hai phong cách trang headings và myheadings có thể thay đổi tiêu
đề chạy bằng cách gán những lệnh:
\markboth{<tiêu đề trái>}{<tiêu đề phải>} cho văn bản in ra
hai mặt, trang chẵn tiêu đề chạy in ra <tiêu đề trái> còn trang lẻ in
ra <tiêu đề phải>.
\markright{<tiêu đề phải>} cho in văn bản một mặt, tất cả các
trang đều coi như là mặt phải. Ta cũng có thể dùng lệnh \markboth
nhưng nó chỉ in ra <tiêu đề phải> cho các trang.
Với giá trị mặc định cho phong cách trang headings ta có:

Lớp văn bản Kiểu in Trang bên trái Trang bên phải
book, report Một mặt - Tên chương
Hai mặt Tên chương Tên đoạn
article Một mặt - Tên đoạn
Hai mặt Tên đoạn Tên đoạn nhỏ

Những ’Tên chương’, ’Tên đoạn’, ’Tên đoạn nhỏ’ là những đối số của
các lệnh \chapter,\section và \subsection. Nếu trong một trang
có nhiều \section hoặc \subsection thì tiêu đề được lấy ở thông
số cuối cùng của nó. Định dạng lại thể hiện chữ số trang bằng
lệnh \pagenumbering{<dạng số>}. Giá trị của <dạng số> là một trong
những biến số sau:

<dạng số> Tên gọi Ví dụ (số trang hiện thời)


arabic những số bình thường 26
roman những số La Mã nhỏ xxvi
Roman những số La Mã hoa XXVI
alph những chữ cái nhỏ a
Alph những chữ cái hoa A

Bằng lệnh \pagenumering{roman} văn bản đánh số trang bắt đầu


bằng những chữ số La Mã, sau đó dùng lệnh \pagenumering{arabic}
các trang lại đánh số bình thường.
Muốn đánh số lại trang văn bản dùng lệnh
\setcouter{page}{<trang số>},
1.4. Phong cách trang văn bản 27

ở đây <trang số> là số trang ta muốn gán. Ví dụ


\setcounter{page}{17}.

1.4.3. Viết phong cách văn bản mới


Phong cách cơ bản trong lệnh \pagestyle{...} được định nghĩa
tương ứng với lệnh nguồn \ps@style. Từ lệnh định nghĩa bên trong

R
LATEX làm lại tiêu đề chạy trên và tiêu đề chạy dưới của một trang:

\@oddhead Nếu in hai mặt thì sinh ra tiêu đề chạy trên ở những

R
trang đánh số lẻ, ngược lại thì tiêu đề chạy cho mọi trang.
\@oddfoot Nếu in hai mặt thì nó sinh ra tiêu đề chạy dưới ở những
trang lẻ, ngược lại in một mặt thì tất cả các trang đều có tiêu đề

R
chạy dưới.
\@evenhead Nếu in hai mặt thì nó sinh ra tiêu đề chạy trên ở những
trang chẵn, ngược lại in một mặt thì tất cả các trang đều có tiêu

R
đề chạy trên.
\@evenfoot Nếu in hai mặt thì nó sinh ra tiêu đề chạy dưới ở
những trang chẵn, ngược lại in một mặt thì tất cả các trang đều có
tiêu đề chạy dưới.

Định nghĩa phong cách plain cho đánh số ở giữa đáy trang được
thể hiện như sau
\newcommand{\ps@plain}{
\newcommand{\@oddhead}{}% Bỏ trống
\newcommand{\@evenhead}{}% Bỏ trống
\newcommand{\@evenfoot}{\hfil\textrm{\thepage}\hfil}%
\newcommand{\@oddfoot}{\@evenfoot}}
Nếu bạn đọc phải viết luận án theo tiêu chuẩn của Bộ Đại học Việt Nam
thì sửa đánh số trang ở trên đầu mỗi trang một cách dễ dàng, bằng cách
bỏ trống đánh số cuối trang mà đánh số lên đầu trang.
\makeatletter
\renewcommand{\ps@plain}{
\renewcommand{\@oddhead}{\hfil\textrm{\thepage}\hfil}%
\renewcommand{\@evenhead}{\@oddhead}%
28 Chương 1. Cấu trúc văn bản

\renewcommand{\@evenfoot}{}% Bỏ trống
\renewcommand{\@oddfoot}{}}% Bỏ trống
\makeatother
Ta cũng có thể thay nội dung tiêu đề chạy bằng định nghĩa lại:
\renewcommand{\chaptermark}[1]{\markboth{\chaptername%
\thechapter. #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection. #1}}
Bằng cách này các bạn cũng có thể định dạng lại tiêu đề chạy. Hai
lệnh \markboth{...}{...} và \markright{...} đều gán nội dung tiêu
đề chạy, lệnh thứ nhất gán cả trang bên trái và trang bên phải. Còn lệnh
sau chỉ gán vào trang bên phải còn trang bên trái thì bỏ trống.

1.4.4. Gói lệnh fancyheadings tự tạo phong cách trang


Gói lệnh fancyheadings của Piet van Oostrum cho phép ta làm tiêu
đề chạy trên và dưới dễ dàng. Gói lệnh cung cấp các chức năng sau đây:

• Mỗi tiêu đề trên và tiêu đề dưới được chia làm ba phần;


• Có đường kẻ dưới tiêu đề trên và trên tiêu đề dưới;
• Tiêu đề trên và tiêu đề dưới có độ rộng bằng \textwidth;
• Tiêu đề trên và dưới có thể đồng thời nhiều dòng;
• Phân biệt tiêu đề trên và tiêu đề dưới đối với trang chẵn và trang
lẻ.
• Cách trang cho các trang đầu chương (không có tiêu đề chạy trang
này).

Bằng lệnh bắt buộc trước khi bắt đầu văn bản là \pagestyle{fancy}.
Những lệnh sau đây cung cấp thông tin cho 6 khu trên các tiêu đề, xem
hình 1.3
\lhead[LH-lẻ]{LH-chẵn} \lfoot[LF-lẻ]{LF-chẵn}
\chead[CH-lẻ]{CH-chẵn} \cfoot[CF-lẻ]{CF-chẵn}
\rhead[RH-lẻ]{RH-chẵn} \rfoot[RF-lẻ]{RF-chẵn}
Hai đường kẻ phía trên và phía dưới có thể thay đổi nét kẻ bằng
cách đặt lại cỡ thông số \headrulewidth, giá trị mặc định của nó là
1.4. Phong cách trang văn bản 29

0.4pt và thông số \footrulewidth, giá trị mặc định của nó là 0pt. Thích
hợp hơn ta có thể định nghĩa lại thông số \headrule và \footrule.

LH-lẻ CH-lẻ RH-lẻ LH-chẵn CH-chẵn RH-chẵn

Trang Trang
lẻ chẵn

LF-lẻ CF-lẻ RF-lẻ LF-chẵn CF-chẵn RF-chẵn

Hình 1.3: Tiêu đề trên trang chẵn lẻ của gói lệnh fancyheadings

Tiêu đề trên và tiêu đề dưới thực chất được chứa trong hộp có chiều
rộng bằng \headwidth, giá trị mặc định của nó bằng chiều rộng của
trang \textwidth. Độ rộng \headwidth có thể dùng lệnh \setlength
đặt lại, có thể chiều rộng này rộng hơn cả bề ngang của văn bản. Ví dụ
ta có thể cộng thêm độ rộng lề của trang vào tiêu đề bằng cách cộng
thêm \marginparsep và \marginparwidth vào \headwidth.
Trong mỗi khu vực của tiêu đề có thể dùng nhiều dòng và xuống
dòng bằng \\ và có thể dùng các lệnh dãn chiều dọc như \vspace{...}
để tăng chiều cao \headheight và \footskip.
Khi một trang không dùng đánh tiêu đề nữa ta có thể dùng lệnh
\thispagestyle{fancyplain} để chuyển về phong cách plain sau đó
nó tự động thiết lập lại các thông số của phong cách fancy những trang
sau. Những đường kẻ trong trường hợp chuyển đổi trên định nghĩa
bằng lệnh \plainheadrulewidth và \plainfootrulewidth có giá trị
mặc định là 0pt.
Sáu phần tiêu đề có thể xác định riêng biệt cho các trang plain và
30 Chương 1. Cấu trúc văn bản

các trang có tiêu đề bình thường bằng lệnh \fancyplain, cụ thể là


\fancyplain{plain_value}{normal_value}
Lệnh này bắt buộc phải dùng trong đối số của các lệnh
\lhead[...]{...}, \lfoot[...]{...}, ... Ví dụ lệnh
\lhead[\fancyplain{F1}{F2}]{\fancyplain{F3}{F4}}
chỉ ra tiêu đề trên bên trái cho văn bản hai mặt: F1 cho trang lẻ phong
cách plain, F2 cho trang lẻ bình thường (có tiêu đề), F3 cho trang chẵn
plain và F4 trang chẵn có tiêu đề. Giá trị mặc định của các thông số
như sau:

\headrulewidth=0.4pt \footrulewidth=0.4pt
\plainheadrulewidth=0pt \plainfootrulewidth=0pt

Lệnh mặc định của gói này cho tiêu đề chạy trên và dưới có chữ
xiên:
\lhead[\fancyplain{}{\sl\rightmark}]{\fancyplain{}{\sl\leftmark}}
\rhead[\fancyplain{}{\sl\leftmark}]{\fancyplain{}{\sl\rightmark}}
\cfoot{\rm\thepage} \chead{}\lfoot{}\rfoot{}
Những định nghĩa trên thể hiện trên các trang như hình 1.4:

\rightmark \leftmark \leftmark \rightmark

Trang Trang
lẻ chẵn

\thepage \thepage

Hình 1.4: Tiêu đề và số trang với gói lệnh fancyheadings


1.4. Phong cách trang văn bản 31

Tiêu đề chạy của cuốn sách này được định nghĩa như sau
\renewcommand{\chaptermark}[1]{%
\markboth{Chương \thechapter.\sl #1}{}}
\renewcommand{\sectionmark}[1]{\markright{\thesection #1}}
\lhead[\fancyplain{}{\thepage}]{\fancyplain{}{\rightmark}}
\rhead[\fancyplain{}{\leftmark}]{\fancyplain{}{\thepage}}
\cfoot{}\sloppy

1.4.5. Định dạng đoạn văn bản và phân trang

Trong một văn bản gồm nhiều đoạn, LATEX có một số thông số bằng
lệnh điều khiển định dạng các đoạn một cách đồng loạt. Những thông

R
số này có thể gán bằng lệnh \setlength:

\parskip Khoảng cách giữa hai đoạn văn bản, được thể hiện bằng
độ đo ex thích hợp với các cỡ chữ khác nhau. Khoảng cách này

R
nên gán bằng độ dài co dãn.

R
\parindent Khoảng thụt đầu dòng của dòng thứ nhất một đoạn.
\baselinestretch Đây là số phóng của dòng cơ bản. Giá trị mặc
định của nó là 1. Nếu ta muốn dòng rộng lên gấp rưỡi thì dùng
lệnh:
\renewcommand{\baselinestretch}{1.5}

LATEX gép nối các đoạn hoặc các khối văn bản thành từng trang,
muốn ngắt trang sớm ta cần phải dùng lệnh \pagebreak ngắt trang
nhưng dồn văn bản cho đều theo chiều dọc. Lệnh \newpage ngắt trang
sang làm trang mới, những chỗ chưa có văn bản để trắng. Nhiều khi ta
không muốn ngắt trang tại đoạn nào đó thì dùng lệnh \nopagebreak.
Nói chung LATEX không bao giờ làm chiều dài trang vượt quá kích thước
\textheight. Nhiều khi ta muốn một trang thêm ra một dòng hoặc
ngắn đi một dòng cho đủ ý nghĩa của một câu trong một trang, thì
dùng lệnh điều chỉnh độ dài trang
\enlargethispage{<số đo>}
ở đây <số đo> là số độ đo, ví dụ như khoảng cách một dòng
\baselineskip. Muốn thay đổi độ dài trang ta đặt lệnh đó tại trang
32 Chương 1. Cấu trúc văn bản

cần kéo dài


\newcommand{\longpage}{\enlargethispage{\baselineskip}}
\newcommand{\shortpage}{\enlargethispage{-\baselineskip}}
Lệnh \enlargethispage làm dãn chiều cao \textheight của trang
hiện thời, còn các trang khác vẫn giữ nguyên. Lệnh \flushbottom có
tác dụng trên chiều cao của trang. Như vậy muốn co dãn thêm dòng
một trang nào, thì ta nên đặt lệnh trên trước dòng cần co dãn.
Lệnh \enlargethispage*{<số đo>} cũng làm dài hoặc ngắn trang,
nhưng với lệnh này thì LATEX nén hoặc trải văn bản ra với khả năng có
thể. Lệnh có ích để ta giữ một số đoạn văn bản trong cùng một trang.
Ví dụ ta muốn giữ một bảng trên cùng một trang với đòi hỏi vô lý, sau
đó phải dùng \pagebreak như
\enlargethispage*{100cm}! %Đòi hỏi vô lý
\begin{tabular}{l l l l } %bảng quá dài
.....
\end{tabular}
\pagebreak %Phải ngắt trang
Những lệnh như trên không nên thực hiện trong văn bản, khi đó
các trang sẽ méo mó, dài ngắn khác nhau. Ta cố gắng soạn thảo sao cho
văn bản để LATEX chạy một cách tự nhiên.

1.5. Cấu trúc lôgic của văn bản


Ta biết rằng những lớp của LATEX chứa các lệnh và môi trường được
định nghĩa phía trong những đơn vị văn bản như chương, phân đoạn,
phụ đính, tài liệu tham khảo,... Chúng ta hay dùng nhất là lớp article
về mặt lôgic như:
1.5. Cấu trúc lôgic của văn bản 33

\documentclass{article}% Đây là ví dụ về cấu trúc khung của


\usepackage{...} lớp article, trong lớp này không có
\begin{document} lệnh \chapter. Ta cố gắng dùng lệnh
\maketitle cấu trúc này vì đã được lập trình
\section{...} chuẩn về các khoảng cách và đánh số.
\section{...} Tham khảo chéo các đoạn cũng được
\subsection{...} làm tự động bằng lệnh \label{...}
\subsection{...} sau các lệnh trên và khi trích dẫn chỉ
\subsubsection{...} số dùng lệnh \ref{...}.
\section{...} Nếu các bạn làm sách thì có lớp book
\begin{thebibliography} chứa đựng những lệnh lôgic tương
... xứng với việc làm một cuốn sách, lớp
\end{thebibliography} report cũng tương tự như vậy.
\end{document}
\documentclass{book}%Lớp book chuẩn của LaTeX
\usepackage{...}
\begin{document}
%–––––––––––––%Trang bìa hoặc đầu của cuốn sách
\maketitle
\section*{...} %Tên của đoạn như "lời nói đầu".
\tableofcontents %Bảng mục lục của cuốn sách
\listoffigures %Danh sách hình trong sách
\listoftables %Danh sách bảng trong sách
%–––––––––––––-%Thân của cuốn sách
\part{...} %Phần của cuốn sách
\chapter{...} %Chương của cuốn sách
\section{...} %Một đoạn trong chương
\subsection{...} %Một đoạn nhỏ trong đoạn
\chapter{...}
%––––––––––––––%Phần cuối ấn phẩm
\appendix %Những chương sau cũng là phụ đính
\chapter{...}
\begin{thebibliography}...\end{thebibliography}%Tài liệu
dẫn
\begin{theindex}...\end{theindex} %Danh mục từ khóa
\end{document}
34 Chương 1. Cấu trúc văn bản

Lệnh trong các lớp văn bản này được phân theo thứ bậc như sau:

Lệnh Bậc Lệnh Bậc


\part (book và report) -1 \part (article) 0
\chapter 0 \section 1
\subsection 2 \subsubsection 3
\paragraph 4 \subparagraph 5

Những lệnh cho các đoạn tự động thực hiện một trong các thao tác:

• Sinh ra tiêu đề chạy tương ứng thứ bậc đã liệt kê ở trên.


• Ghi nội dung tiêu đề vào tệp bảng mục lục.
• Ghi lại nội dung tiêu đề chạy, để chuẩn bị dùng nó làm tiêu đề
chạy.
• Định dạng lại đầu đề.

Tất cả việc thực hiện trên được thể hiện trong bảng

Lệnh Đánh số mục lục Tiêu đề


\section{<tiêu đề>} có <tiêu đề> <tiêu đề>
\section[<ML>]{<tiêu đề>} có <tên ML> <tên ML>
\section*{<ttiêu đề>} không không không

1.5.1. Đánh số tiêu đề một đoạn

Khi đánh số LATEX dùng số đếm secnumdepth để đánh số theo bậc


với số từ nhỏ đến lớn. Ví dụ nếu gán \setcounter{secnumdepth}{1}
chỉ còn đánh số đến \section. Đánh số tất cả các lệnh cho đến
\subparagraph là \setcounter{secnumdepth}{10}.
Lớp văn bản book và report có định nghĩa các số đếm như sau:

\newcounter{part} % (-1) Phần


\newcounter{chapter} % (0) Chương
\newcounter{section}[chapter] % (1) Đoạn
\newcounter{subsection}[section] % (2) Đoạn con
\newcounter{subsubsection}[subsection] % (3) Đoạn nhỏ
\newcounter{paragraph}[subsubsection] % (4) Phân đoạn
\newcounter{subparagraph}[paragraph] % (5) Phân đoạn nhỏ
1.5. Cấu trúc lôgic của văn bản 35

Thông số này được thể hiện đánh số trong trong văn bản theo
chương, đoạn và dưới đoạn (trong dấu ngoặc [ ] là đánh tiếp theo số
đếm trước đó). Những số trên là các số đếm, để thể hiện các số này
người ta thêm lệnh \the vào đầu số đếm, ví dụ \thechapter số đếm
chương; \thesection số đếm đoạn. Trong cuốn sách này để có dấu
chấm trong cách đánh số ở Việt Nam tôi đã định nghĩa lại như sau
\makeatletter
\renewcommand\thepart{\@Roman\c@part.}
\renewcommand\thechapter{\@arabic\c@chapter}
\renewcommand\thesection{\thechapter.\@arabic\c@section.}
\renewcommand\thesubsection{\thesection\@arabic\c@subsection.}
\renewcommand\thesubsubsection{\thesubsection\@arabic%
\c@subsubsection.}
\makeatother
Ta có thể thay đổi số đếm theo các chữ số hoặc các chữ cái bằng cách
thay số đếm của chương \thechapter như sau

7 8 : 2
\renewcommand{\thechapter}
A.1. Tiêu đề đoạn dạng
{\Alph{chapter}}
khác
\section{Tiêu đề đoạn dạng khác}
Bằng cách định nghĩa lại thế
Bằng cách định nghĩa lại thế này
này chúng ta được dạng thể
chúng
hiện số đếm mới.
ta được dạng thể hiện số đếm mới.

Ta cũng có thể đóng khung số đếm các đoạn trên theo ví dụ sau,
nhưng chú ý là khi tham chiếu số của đoạn này vẫn còn

7 8 : 2
\renewcommand{\thesection}
{fbox{\thechapter.\arabic{section}}} 1.1 Sai lầm to
\section{Sai lầm to}\label{wrong}
Bằng cách định nghĩa thế này thì Bằng cách định nghĩa thế
mang hậu quả \ref{wrong}. này thì mang hậu quả

1.1 .

Muốn không mắc lỗi này với các lệnh \label và \ref, ta phải can
thiệp vào lệnh bên trong của LATEX như:
36 Chương 1. Cấu trúc văn bản

7 8 : 2
\makeatletter
\renewcommand{\@seccntformat}[1] 1.1 Lần này đúng rồi
{fbox{\csname\the#1\endcsname}
\hspace{0.5em}} Chỉ có bằng cách này mới
\makeatother đúng là số 1.1.
\section{Lần này đúng
rồi}\label{sec:OK}
Chỉ có bằng cách này mới đúng là
số \ref{sec:OK}.

1.5.2. Định dạng tiêu đề một đoạn

LATEX có lệnh bên trong \@startsection định dạng lại tiêu đề đoạn,
trong nó chứa lệnh \secdef để định nghĩa định dạng cho tiêu đề một
đoạn bất kỳ. Những lệnh này liên quan tới việc nội dung tiêu đề được
đưa vào mục lục và chạy trên tiêu đề của trang văn bản. Cấu trúc tổng
quát của lệnh này như sau
\@startsection{<tên lệnh>}{<bậc>}{<thụt đầu dòng>}
{<khoảng trắng trước>}{<khoảng trắng sau>}{<định dạng>}

R
Các đối số trên có ý nghĩa như sau:

<tên lệnh> Tên lệnh làm tiêu đề đoạn nhưng không có kí tự gạch
ở phần đầu lệnh, ví dụ định nghĩa lệnh \section ta chỉ cần thay
<tên lệnh> bằng section.

Văn bản trước đề mục đoạn

<khoảng trắng trước>


<thụt đầu dòng>
1.1. Tên tiêu đề đoạn

<khoảng trắng sau> (>0)

Văn bản sau tiêu đề mục đoạn

Hình 1.5: Thông số liên quan đến tiêu đề đoạn


1.5. Cấu trúc lôgic của văn bản 37

<bậc> R Đây là một số gán cho bậc lồng nhau của lệnh tiêu đề đoạn.
Bậc này dùng cho tiêu đề nhận số khi thể hiện hoặc ghi vào mục
lục số này. Nếu là lệnh cho tiêu đề đoạn thường là số nhỏ hơn

R
hoặc bằng secnumdepth.
<thụt đầu dòng> Tiêu đề thụt vào bằng kích thước này so với lề
trái của trang. Nếu cho giá trị âm này thì tiêu đề đoạn lùi ra ngoài
cả lề trang văn bản. Nếu cho giá trị dương thì các tiêu đề đoạn

R
đều thụt vào.
<khoảng trắng trước> Giá trị tuyệt đối khoảng trống giữa văn
bản trước tiêu đề và dòng tiêu đề. Khoảng cách này đã có độ dài
\parskip.

Văn bản trước đề mục đoạn

<Khoảng trắng trước>


<thụt đầu dòng> <khoảng trắng sau> (<0)
Văn bản tiếp
1.1.2.Tên tiêu đề đoạn
tiếp tục của dòng văn bản.

Hình 1.6: Thông số liên quan đến đoạn nhỏ

<khoảng trắng sau> R Giá trị tuyệt đối của khoảng cách từ tiêu đề
đoạn đến văn bản tiếp sau đó. Thông số này lớn hơn không thì
khoảng cách đó còn được cộng thêm vào \parskip (hình 1.5). Nếu
đại lượng này là số âm thì giữa tiêu đề và văn bản sau không cách
ra nữa mà là liền một dòng; khi đó khoảng cách theo chiều ngang
giữa tên tiêu đề đoạn và bắt đầu dòng văn bản tiếp theo như hình

R
1.6.
<định dạng> Định dạng văn bản của tiêu đề. Ta có thể đặt bất
kỳ lệnh định dạng nào cho văn bản ở đây đều được ví dụ như
\Large, \bfseries, hoặc \raggedright.

Cụ thể cho việc định nghĩa lại các tiêu đề đoạn như sau:
\makeatletter
\renewcommand{\subsection}{\@startsection
38 Chương 1. Cấu trúc văn bản

{subsection} % tên lệnh


{2} % bậc
{0mm} % thụt đầu dòng
{-\baselineskip}% khoảng trắng trước
{0.5\baselineskip}% khoảng trắng sau
{\normalfont\normalsize\itshape}}% định dạng
\makeatother
Với định nghĩa lại như trên thì

7 8 : 2
\ldots văn bản trước. . . . văn bản trước.
\section{Tên ví dụ} 1.2.3. Tên ví dụ
Tiêu đề đoạn bị thay đổi và Tiêu đề đoạn bị thay đổi và sau đó
sau là các văn bản tiếp tục.
đó là các văn bản tiếp tục.

Ta cũng dễ dàng định nghĩa lại tiêu đề đoạn để tiêu đề có cùng một
dòng với dòng văn bản đầu tiên của đoạn tiếp sau đó.
\makeatletter
\renewcommand{\section}{\@startsection
{section} % tên lệnh
{1} % bậc
{1em} % thụt đầu dòng
{\baselineskip}% khoảng trắng trước
{-1em} % khoảng trắng sau
{\normalfont\normalsize\bfseries}}% định dạng
\makeatother
Trong trường hợp này dòng tiêu đề đoạn không xuống dòng như:

7 8 : 2
\ldots văn bản trước. . . . văn bản trước.
\section{Ví dụ trên một 1.5. Ví dụ trên một dòng Tiếp
dòng} tục đoạn sau cùng dòng.
Tiếp tục đoạn sau cùng dòng.

Hoàn toàn tương tự ta có thể thiết lập các tiêu đề đoạn căn bên phải
\raggedright, vào giữa \centering, căn bên trái \raggedleft hoặc
trước tiêu đề đoạn có đường kẻ \hrule\medskip; các lệnh này đặt vào
1.5. Cấu trúc lôgic của văn bản 39

thông số <định dạng>. Bạn đọc dựa vào công thức định nghĩa lại tiêu
đề đoạn theo các cách:

7 8 : 2
\Csubsection{Tên tiêu đề 1.1.2. Tên tiêu đề đoạn
đoạn} <định dạng> thay bằng
\verb!<định dạng>! thay bằng \centering\itshape.
\verb!\centering\itshape!.

7 8 : 2
\Rsubsection{Tên tiêu đề 1.1.3. Tên tiêu đề đoạn
đoạn} <định dạng> thay bằng
\verb!<định dạng>! thay bằng \raggedright\itshape.
\verb!\raggedright\itshape!.

7 8 : 2
\Lsubsection{Tên tiêu đề 1.1.4. Tên tiêu đề đoạn
đoạn} <định dạng> thay bằng
\verb!<định dạng>! thay bằng \raggedleft\itshape.
\verb!\raggedleft\itshape!.

7 8 : 2
\Hsubsection{Tên tiêu đề
đoạn} 1.1.5. Tên tiêu đề đoạn
\verb!<định dạng>! thay bằng <định dạng> thay bằng
\verb!\hrule\medskip\itshape!. \hrule\medskip\itshape.

Bắt đầu một đoạn trong LATEX không tự nhiên thụt vào đầu dòng.
Muốn có thụt vào đầu dòng cho mọi đoạn văn bản ta phải dùng gói
lệnh indentfirst của David Carlisle.

1.5.3. Định dạng tiêu đề chương và phần tập sách

Những lệnh định dạng cho tiêu đề đoạn, chương và phần của tập
sách, LATEX cung cấp lệnh \secdef cho ta ba khả năng lựa chọn đưa các
tên vào vị trí thích hợp như tiêu đề, tập mục lục, hay không đánh số.
Bằng cách định nghĩa \newcommand{\part}{\secdef\cmda\cmdb}
thì khi sử dụng theo các dạng sau đây có kết quả khác nhau:
\part{<tiêu đề>} sẽ gọi lệnh \cmda[<tiêu đề>]{<tiêu đề>}
\part[<Tên vào mục lục>]{<Tên tiêu đề>} sẽ gọi lệnh
40 Chương 1. Cấu trúc văn bản

\cmda[<Tên vào mục lục>]{<Tên tiêu đề>}


\part*{<Tên tiêu đề>} sẽ gọi lệnh \cmdb{<Tên tiêu đề>}
Như vậy thực chất ta phải định nghĩa lại hai lệnh \cmda và \cmdb.
LAT EX 2ε đã mở rộng định nghĩa các phần
\renewcommand{\part}{...\secdef \cmda \cmdb}
\newcommand{\cmda}[2][defaul]{...}
\newcommand{\cmdb}[1]{...}
Để thấy được cấu trúc trên hoạt động ra sao ta định nghĩa lại lệnh phụ
lục \appendix. Ta định lại \section để tiêu đề thích hợp với hai lệnh
Appendix và sAppendix, ngoài ra ta đặt lại số đếm section của phụ lục
và định dạng lại số đếm theo chữ cái. Cụ thể như sau:
\renewcommand{appendix}{%
\renewcommand{\section}{%%định nghĩa lại tiêu đề đoạn
\newpage\thispagestyle{plain}%
\secdef\Appendix\sAppendix}%
\setcounter{section}{0}%
\renewcommand{\thesection}{\Alph{section}}}
Ta định nghĩa \Appendix và \sAppendix bằng cách định lại số đếm
của phụ lục với lệnh \refstepcounter. Sau đó phải đưa nội dung vào
mục lục như sau:
\newcommand{\Appendix}[2][?]{
\refstepcounter{section}%
\addcontentsline{toc}{appendix}%
{\protect\numberline{\appendixname~\thesection} #1}%
\centering\large\bfseries\appendixname\ \thesection\par
\nohyphens\centering #2 \par}%
\sectionmark{#1}\vspace{\baselineskip}}
Còn \sAppendix chỉ thực hiện định dạng
\newcommand{\sAppendix}[1]{%
{ \centering\large\bfseries\appendixname\par
\nohyphens\centering #1 \par}%
\vspace{\baselineskip}}
Tác dụng của những lệnh trên được thể hiện qua ví dụ
1.5. Cấu trúc lôgic của văn bản 41

7 8 : 2
\appendix Phụ lục A
\section{Liệt kê lệnh Liệt kê lệnh LATEX
\LaTeX} Sau đó là nội dung của phụ lục
Sau đó là nội dung của phụ cần đưa vào.
lục cần đưa vào.

1.5.4. Thay đổi tên các loại tiêu đề trong LATEX

LATEX có đưa một loạt các tên tiêu đề với giá trị mặc
định như bảng 1.2. Bằng cách định nghĩa lại tên mới như
\renewcommand{\abstract}{Tóm tắt}. Bảng sau đây liệt kê tất cả
những tên mà ta có thể thay đổi được, trong cuốn sách này chúng tôi
đã thay đổi sang tiếng Việt bằng các lệnh như bảng 1.2.

Lệnh Tên mặc định Tiếng Việt


\abstractname Abstract Tóm tắt
\alsoname Also Cũng vậy
\alsoseename Also see Cũng vậy xem
\appendixname Appendix Phụ lục
\bibname Bibliography Tài liệu
\ccname Cc Cc
\chaptername Chapter Chương
\contentsname Contents Mục lục
\datename Date Ngày
\enclname Enclosure Kèm theo
\figurename Figure Hình
\indexname Index Chỉ số
\keywordsname Key words Khoá từ
\listfigurename List of Figures Danh sách các hình
\listtablename List of Tables Danh sách các bảng
\notesname Notes Ghi chú
\pagename Page Trang
\partname Part Phần
\proofname Proof Chứng minh
\refname References Tài liệu tham khảo
\tablename Table Bảng
\preffacename Preface Lời nói đầu
\seename See Xem
\subjectname Subject Chủ đề
42 Chương 1. Cấu trúc văn bản

\tablename Table Bảng


\tocname Table of Contents Bảng danh mục
\contentsname Table of Contents Bảng danh mục
\headtoname To Đến
Bảng 1.2: Tên trong LATEX

Chú ý: 1. Rất nhiều người hỏi về vấn đề thay đổi này, nên bạn đọc
chú ý: Khi sử dụng những lớp tài liệu khác nhau những tên bảng trên
cũng khác nhau như: lớp article, amsart và amsproc dùng \refname
trong khi đó lớp report, book, amsbook lại dùng \bibname. Lớp
letter dùng một loạt các lệnh riêng \pagename, \enclname, \ccname
và \headtoname.
2. Trong lớp văn bản của chúng tôi vnbook hoặc phiên bản mới của
VnTEX đã có sẵn các định nghĩa này, các bạn không phải định nghĩa lại.
CHƯƠNG 2

LỆNH VÀ MÔI TRƯỜNG

2.1. Lệnh trong LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44


2.1.1. Các loại lệnh. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.1.2. Lệnh độ dài và đơn vị độ dài . . . . . . . . . . . . . . . . . . . . . . 46
2.1.3. Những lệnh đặc biệt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.2. Số đếm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.2.1. Số đếm mặc định và số đếm tự tạo . . . . . . . . . . . . . . . . 49
2.2.2. Thao tác trên các số đếm . . . . . . . . . . . . . . . . . . . . . . . . . . 50
2.3. Định nghĩa lệnh mới . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.3.1. Lệnh không có đối số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.3.2. Lệnh có đối số . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.3.3. Lệnh có đối số tùy chọn . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.4. Một số ứng dụng hữu ích khi tạo lệnh . . . . . . . . . . . . 55
2.4. Gói lệnh ifthen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.5. Môi trường LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.5.1. Khái niệm môi trường . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.5.2. Những môi trường đặc biệt . . . . . . . . . . . . . . . . . . . . . . . 60
2.6. Định nghĩa môi trường mới . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.6.1. Môi trường không đối số . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.6.2. Môi trường có đối số. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.6.3. Môi trường có đối số tùy chọn . . . . . . . . . . . . . . . . . . . . 66
2.7. Môi trường toàn văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.8. Môi trường khối hộp văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.8.1. Hộp văn bản theo chiều ngang . . . . . . . . . . . . . . . . . . . . 68
2.8.2. Hộp văn bản theo chiều dọc . . . . . . . . . . . . . . . . . . . . . . 70

Để sử dụng LATEX ta sử dụng các lệnh tạo ra ký hiệu và điều khiển


các khối văn bản đặt vào vị trí thích hợp của trang. Có những lệnh toàn
cục ảnh hưởng tới mọi trang, cũng có lệnh chỉ bó hẹp trong một khối
nào đó. Hiểu các loại lệnh, tạo ra các lệnh mới, môi trường mới ta phải
xem xét kỹ một chút về chúng. Còn các lệnh cụ thể sẽ được đề cập lần
lượt ở các chương sau. Từ chương trước ta đã làm quen với một số lệnh
44 Chương 2. Lệnh và môi trường

của LATEX.

2.1. Lệnh trong LATEX

2.1.1. Các loại lệnh


Lệnh trong LATEX là những chỉ thị làm việc đặc biệt gì đó, ví dụ như
in ra một ký hiệu mà trong các loại kí tự không có hoặc định dạng lại
một văn bản theo ý muốn người dùng. Có ba loại tên lệnh khác nhau:

• Những kí tự đơn # $ & ~ ^ _ % { }, tất cả chúng đều có một


nghĩa riêng ta xem xét phần dưới đây.
• Một gạch chéo xuôi \ với ký hiệu không phải chữ cái. Ví dụ như
\$ sẽ in ra $, tất cả kí tự đơn ở trên đều có lệnh kiểu này để
in ra chính ký hiệu đó. Thật vậy, \#→#, \$→$, \&→&, \~{}→˜,
\^{}→ˆ, \_{}→_, \%→%, $\{$→{, $\}$→ }.
• Một gạch chéo xuôi \ với một dãy kí tự và kết thúc không phải là
một chữ cái, ví dụ \large chuyển chữ in ra được phóng lên.

Như chương trước ta đã gặp rất nhiều lệnh của LATEX để điều khiển
từng trang, từng đề mục, từng chi tiết,... cho một văn bản. Phần này ta
nghiên cứu kỹ hơn các dạng của lệnh, cách sử dụng cơ bản của nó, tất
nhiên nhận biết hàng loạt các lệnh mới cho soạn thảo LATEX. Những lệnh
xuất phát từ TEX của D. Knuth thường người ta gọi là lệnh nguyên thủy,
có khoảng 300 lệnh như vậy. Còn các gói lệnh và LATEX có vào khoảng
300 lệnh nữa cấu tạo từ các lệnh nguyên thủy. Nhưng một bài văn bản
người ta cũng chỉ lặp đi lặp lại khoảng trên 10 lệnh quen thuộc nào đó.
Lệnh một kí tự là thuộc những lệnh nguyên thủy và đặc biệt. Muốn
in ra các kí tự này phải dùng lệnh \ kèm với nó, đó là loại lệnh thứ hai.

R
Nghĩa của các lệnh đặc biệt như sau:

# Dùng để làm biến số trong định nghĩa lệnh mới có đối số.
Ví dụ \newcommand{\can}[1]{\sqrt{#1}}, khi đó ta áp dụng

R
$\can{x}$ cho kết quả x.
$ Dùng bắt đầu và kết thúc môi trường toán (môi trường xem ở
phần sau). Trong văn bản thường mặc định là môi trường văn
2.1. Lệnh trong LATEX 45

bản cho các kí tự bình thường, muốn làm công thức toán, ký hiệu
toán ta phải mở môi trường toán bằng $ và sau đó phải đóng lại

R
cũng bằng $ (ta học kỹ ở phần sau).
& Ký hiệu dùng để dóng cột cho một bảng, ma trận, môi trường
dóng công thức, ... Ví dụ
7 8: 2
$$\begin{pmatrix} a b c
 
a&b&c\\ d&e&f d e f

R
\end{pmatrix}$$

~ Lệnh cho khoảng trắng giữa hai từ và hai từ này trên cùng một
dòng, không được ngắt dòng tại điểm có dấu này. Ví dụ khi viết

R
N.~H.~Điển thì khối chữ này luôn đi liền nhau trên một dòng.
_ Lệnh làm chỉ số dưới hoặc lệnh chuyển khối kí tự xuống dưới
một số ký hiệu hàm hay ký hiệu khác, như $a_1, a_{i+1}$
cho a1 , ai+1 hoặc là $\sum_{i=0}, \sum\limits_{i=0} $ cho
∑ i =0 , ∑ .

^R i =0
Lệnh làm chỉ số trên hoặc lệnh chuyển khối kí tự lên trên một số
ký hiệu hàm hay ký hiệu khác, như $a^2, a^{i+1}$ cho a2 , ai+1
n
hoặc là $\sum_{i=0}^n, \sum\limits_{i=0}^n $ cho ∑in=0 , ∑ .

%R i =0
Lệnh không đưa các kí tự sau dấu này vào văn bản để in ra, dùng

R
để chú thích thêm cho tệp nguồn của văn bản.
{ } Mở một nhóm và đóng nhóm đó lại nhằm mục đích giới hạn
sự tác dụng của một lệnh đối với một nhóm ký hiệu như một số
dòng hay một số ký tự. Ví dụ muốn làm số mũ $x^{n+1}$ cho
x n+1 , hay {\it làm nghiêng} cho kết quả làm nghiêng.

Dạng lệnh thứ ba của LATEX là nhiều nhất và có thể chỉ có lệnh không
như \medskip làm khoảng cách dọc trung bình, nhưng cũng có nhiều
lệnh có thể mang đối số như một hàm, có thể có dạng là
\<tên lệnh>[<tùy chọn>]{<đối số bắt buộc>}
Theo định nghĩa trên <tên lệnh> chỉ là những chữ cái, ký hiệu
[...] trong đó là những <tùy chọn> cho lệnh đó, có thể có hoặc
không; còn <đối số bắt buộc> là những đối số cần cho lệnh đó, một
46 Chương 2. Lệnh và môi trường

lệnh có thể có nhiều đối số đều được để trong dấu {...}. Ví dụ


lệnh \rule[<khoảng di dời>]{<chiều rộng>}{<chiều cao>} đây là
lệnh vẽ một hộp đen có chiều rộng là <chiều rộng>, chiều cao là
<chiều cao>, có thể di chuyển lên nếu <khoảng di dời> dương, còn
di chuyển xuống nếu đại lượng đó âm, còn không di chuyển gì nếu
không có tùy chọn này. Cụ thể \rule{10mm}{3mm} cho ta , còn
\rule[2mm]{10mm}{3mm} cho ta .

2.1.2. Lệnh độ dài và đơn vị độ dài

Rất nhiều lệnh có đối số là độ dài, LATEX có hai loại độ dài, một loại
cố định và một loại co dãn theo các mức độ chữ trong văn bản. Độ dài
cũng có thể mang dấu âm hoặc dương nhưng phải có đơn vị độ dài.
Tên các đơn vị độ dài trong bảng 2.1: Số thập phân có thể dùng dấu

Viết tắt So sánh Hình ảnh


sp Độ đo cực nhỏ của TEX : 65536sp = 1pt
pt Điểm 1pt = 72.27
1
in = 0.351mm
bp Điểm to 72bp = 1in
dd Điểm Điđô 1dd = 72 1
in = 0.376mm
mm Milimét 1mm = 2.845pt
pc Pica 1pc = 12pt = 4.218mm
cc Cicero 1cc = 12dd = 4.531mm
cm Centimeter 1cm = 10mm = 2.371pc
in Inch 1in = 25.4mm = 72.27pt = 6.022pc
ex Chiều cao của ’x’ phông hiện thời
em Chiều rộng của ’M’ phông hiện thời

Bảng 2.1: Bảng các loại đơn vị độ đo

chấm theo tiêu chuẩn của Anh hoặc dùng dấu phẩy theo tiêu chuẩn
của Pháp đều được. Ta nên dùng dấu chấm để thống nhất ví dụ như
12.5mm, hoặc \textheight=21.5cm. Những độ dài bằng 0 ta phải viết
kèm theo đơn vị độ đo như 0pt hoặc 0cm.
Những lệnh về thông số chứa độ dài như \textwidth chiều dài
trang, \parindent khoảng xuống dòng thụt đầu dòng, ... thì muốn thay
đổi phải dùng lệnh \setlength hoặc \addtolength như
\setlength{<lệnh độ dài>}{<số độ dài>}
2.1. Lệnh trong LATEX 47

<lệnh độ dài> lệnh như ví dụ trên ta sẽ học cụ thể sau. <số


độ dài> là một số với đơn vị tính độ dài. Ví dụ ta gán lại chiều
dài trang \setlength{\textheight}{20.5cm} và chiều rộng trang
\setlength{\textwidth}{16cm}.
Một số đối số có độ dài co dãn. Nghĩa là độ dài có thể thêm vào hoặc
bớt đi cho phù hợp với kích thước tính toán và độ dài như vậy có cú
pháp:
<giá trị độ dài> plus <giá trị dãn> minus <giá trị co >
Ví dụ \setlength{\parskip}{1ex plus 0.5ex minus 0.2ex} đây
là lệnh lập khoảng cách giữa hai đoạn văn bản, lệnh này sẽ hoạt động
như sau: Nó thiết lập khoảng cách giữa hai đoạn bằng chiều cao chữ ’x’
ở phông hiện thời, nhưng khoảng cách đó có thể tăng lên đến 1.5 hoặc
giảm đi 0.8 lần để thích hợp với trang văn bản.
Các lệnh độ dài có thể bị phóng to nhỏ phụ thuộc vào văn bản
ta dùng tùy chọn ở phần đầu là 10pt, 11pt hoặc 12pt. Để cố định và
đo đúng kích thước của đơn vị độ đo ta thêm vào từ true, ví dụ
\setlength{\textwidth}{16truecm} nghĩa là độ rộng của trang luôn
luôn đúng 16cm.
Ta có thể đặt một lệnh độ dài bằng một lệnh độ dài đã có, ví dụ
\setlength{\rightmargin}{\leftmargin} nghĩa là lề phải trong môi
trường list được đặt bằng lề trái.
Một số thập phân đặt trước một lệnh độ dài được hiểu là nhân với
độ dài đó, như 1.5\baselineskip nghĩa là khoảng cách dòng tăng lên
gấp rưỡi, 0.5\textwidth nghĩa là một nửa chiều rộng của trang,...
\addtolength{\<lệnh độ dài>}{<số độ dài>}
cho kết quả là \<lệnh độ dài> được cộng thêm vào <số độ dài>. Ví
dụ \addtolength{\headsep}{6pt}: khoảng trắng từ tiêu đề chạy đầu
trang đến dòng đầu tiên của văn bản được cộng thêm 6pt (nửa dòng).
Người ta còn lấy độ dài từ độ dài tự nhiên của văn bản bằng lệnh
\settowidth{\<lệnh độ dài>}{<văn bản>}
Khi đó độ dài của \<lệnh độ dài> được đặt bằng độ dài tự nhiên
của <văn bản> từ trái qua phải. Tương tự cũng có lệnh
48 Chương 2. Lệnh và môi trường

\settoheight{\<lệnh độ dài>}{<văn bản>}


\settodepth{\<lệnh độ dài>}{<văn bản>}
đặt \<lệnh độ dài> bằng chiều cao và chiều sâu của <văn bản> so với
đường cơ sở.
Người dùng có thể tự tạo ra lệnh độ dài mới bằng lệnh
\newlength{\<lệnh độ dài mới>}
lệnh này tạo ra lệnh \<lệnh độ dài mới> có giá trị khởi đầu bằng 0pt.
Sau đó ta có thể áp dụng lệnh với những thao tác như các lệnh độ dài
khác đã nói ở trên.

2.1.3. Những lệnh đặc biệt

Khoảng trắng ngang và dấu ngắt dòng


Khoảng trắng và kí tự xuống dòng có những tính chất đặc biệt không
như các kí tự khác. TEX đã xử lý những kí tự này theo nguyên tắc sau:

• Một kí tự trắng cũng bằng hàng nghìn kí tự trắng liền nhau, nghĩa
là chỉ tính một kí tự trắng đầu tiên.
• Những kí tự trắng đầu dòng trong văn bản bị bỏ qua.
• Kí tự trắng sau tên một lệnh của LATEX cũng không tính.
• Dấu xuống dòng trong tệp nguồn cũng coi như là kí tự trắng.

Ta lợi dụng tính chất này để bố trí văn bản gõ vào dễ xem hơn. Như
vậy muốn đưa một khoảng trắng vào văn bản để in ra ta phải dùng lệnh
\␣ hoặc các lệnh cho độ dài như \quad bằng một kí tự trắng, \qquad
bằng hai kí tự trắng, đặc biệt là lệnh \hspace{2cm} sẽ cho ta khoảng
trắng trên dòng 2cm. Lệnh này cũng không có tác dụng khi ở đầu dòng
văn bản, một phương án là độ dài luôn luôn được thực hiện là thêm
dấu * vào cuối lệnh như \hspace*{1cm} dù lệnh này đặt ở đâu nó cũng
làm một khoảng trắng 1cm.
Những lệnh làm khoảng trắng đặc biệt như dành khoảng trắng
đúng bằng nội dung của nó ví dụ I\phantom{bằng máy chữ này}I cho
ta I I. Lệnh đẩy văn bản trên một dòng, hoặc điền vào
dấu chấm hoặc đường kẻ vào đó như
2.2. Số đếm 49

7 8
\noindent Làm mục lục \dotfill 17\\
Đẩy ra trái \hfill ở giữa \hfill bên trái\\
Kết hợp \hrulefill và \dotfill cuối cùng.

: 2
Làm mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Đẩy ra trái ở giữa bên trái
Kết hợp và . . . . . . . . . . . . . . . . . . . . . . cuối cùng.

Khoảng trắng dọc


Khoảng trắng dọc là khoảng trắng tính theo chiều dài của trang.
LATEX cung cấp một số lệnh để tạo ra khoảng cách dọc này như \\[<độ
dài>], ở đây <độ dài> là một số có đơn vị độ dài, lệnh này nghĩa là
xuống dòng và cách ra một khoảng theo chiều dọc <độ dài>. Những
khoảng trắng dọc thường dùng là \smallskip, \medskip, \bigskip
tương ứng với chiều dọc là 3pt, 6pt, 12pt. Một lệnh rất thông
dụng là \vspace{<độ dài>}, lệnh này cũng có phương án *, như
\vspace*{4cm} luôn luôn làm khoảng cách dọc 4cm.
LATEX cũng coi nhiều dòng trắng chỉ là một dòng đầu tiên được tính.
Một dòng trắng là bắt đầu một đoạn mới và dòng đầu tiên của một
đoạn được thụt vào theo độ dài \parindent. Nếu không muốn thụt
đầu dòng hãy dùng lệnh \noindent trực tiếp tại dòng đó.
LATEX cũng có lệnh đẩy theo chiều dọc là \vfill, nếu trên một trang
ta thiết lập lệnh <Phần trước trang> \vfill <phần cuối trang> thì
hai phần trên được đẩy lên đầu trang và cuối trang ở giữa là khoảng
trắng dọc. Lệnh \vfill\eject tương đương với lệnh \newpage sang
trang mới.

2.2. Số đếm

2.2.1. Số đếm mặc định và số đếm tự tạo

LATEX quản lý số đếm cho giá trị ban đầu khi bắt đầu biên dịch và nó
thay đổi giá trị mỗi khi gọi tới nó. Hầu như tất cả các số đếm có cùng
50 Chương 2. Lệnh và môi trường

tên với lệnh gọi nó, nhưng không có dấu gạch chéo phía trước. Chương
trước ta đã học
part chapter paragraph figure enumi
section subparagraph table enumii
subsection page footnote enumiii
subsubsection equation mpfootnote enumiv

Nghĩa của các số đếm trên đã được biết ở chương 1. Chỉ còn cột thứ
năm: enumi, ..., enumiv là các số đếm trong môi trường enumerate
theo các bậc lồng nhau, vấn đề này cũng được đề cập tới rất kĩ ở chương
5.
Đặc biệt sau mỗi lần dùng lệnh \newtheorem để tạo môi trường
định lý thì môi trường đó tạo ra một số đếm cho nó. Trong chương 3 ta
cũng biết các số đếm này.
Người dùng có thể tạo ra một số đếm mới bằng lệnh
\newcounter{<tên số đếm>}[<trong số đếm khác>]
ở đây <tên số đếm> là tên số đếm mới được lập bao gồm tổ hợp các
chữ cái, không được trùng với số đếm đã có trong LATEX. Giá trị mặc
định khi đặt là 0, sau đó ta có thể dùng các lệnh \setcounter và
\refstepcounter được nói tới ở phần sau.
Lệnh \newcounter không nên đặt ở các tệp lẻ được đọc vào bằng
\include hoặc \input. Tốt nhất đặt lệnh này ở phần mở đầu văn bản.

2.2.2. Thao tác trên các số đếm

Ta có thể thay đổi các số đếm của LATEX cũng như số đếm người

R
dùng tự đặt bằng các lệnh sau đây:

\setcounter{<số đếm>}{<số>} Thực hiện gán <số đếm> bằng số

R
nguyên <số>.
\addtocounter{<số đếm>}{<số>} Giá trị của <số đếm> được cộng

R
thêm một số <số>, có thể dùng số âm để thành phép trừ số đếm.
\stepcounter{<số đếm>} Giá trị của <số đếm> tăng lên 1 và đồng
thời tất cả những số đếm con (như trong định nghĩa số đếm mới
ở trên có tùy chọn [<trong số đếm khác>]) đặt trở lại bằng 0.
2.3. Định nghĩa lệnh mới 51

\refstepcounter{<số đếm>} R Lệnh này tương tự như


\stepcounter nhưng nó làm <số đếm> thành số đếm hiện
thời cho lệnh tra cứu chéo \label.
Lệnh này có thể dùng môi trường figure hoặc table khi
lệnh \caption bị mất mà ta phải tham khảo chéo văn bản
trong lệnh đó. Khi đó ta dùng \refstepcounter{figure} hoặc

R
\refstepcounter{table} trong môi trường của chúng.
\value{<số đếm>} Lệnh cho biết giá trị của <số đếm>. Ta có thể
kết hợp với các lệnh trên để định nghĩa một số đếm mới. Ví dụ
\newcounter{mypage}
\setcounter{mypage}{\value{page}}

R
Định dạng giá trị số đếm có các lệnh như sau:

R
\arabic{<số đếm>} Chữ số Ảrập, số ta thường dùng.

R
\Roman{<số đếm>} Chữ số La Mã hoa (I, II, III, ....).

R
\roman{<số đếm>} Chữ số La Mã thường (i, ii, iii, ...).

R
\alph{<số đếm>} Chữ cái thường (a, b, c, ..., z).

R
\Alph{<số đếm>} Chữ cái hoa (A, B, C, ..., Z).
\fnsymbol{<số đếm>} Ký hiệu cho ghi chú từ 1 đến 9 là *,†, ...
Muốn in một số đếm ra văn bản dùng lệnh
\the<số đếm>
\the viết liền ngay số đếm. Ví dụ \thepage cho số trang này là 51,
\thesection cho số đếm mục này là 2.2 Chương 1 ta đã định nghĩa lại
các số đếm đề mục và chương cho thích hợp với sách ở Việt Nam, khi
các bạn dùng lớp văn bản vnbook chúng tôi cũng đã định nghĩa lại cả.

2.3. Định nghĩa lệnh mới


Trong quá trình sử dụng LATEX bạn đọc sẽ dần được biết rất nhiều
lệnh có ích cho soạn thảo văn bản. LATEX còn cung cấp khả năng mở
rộng tạo ra những lệnh mới của người dùng. Như ta đã biết dạng lệnh
thứ ba của LATEX có ba loại sau đây:

1. Lệnh chỉ có tên không, không có đối số. Ví dụ như \noindent


52 Chương 2. Lệnh và môi trường

không thụt đầu dòng, \medskip cách theo chiều dọc một khoảng
6pt,...
2. Lệnh có đối số, khi ta thay đổi đối số thì lệnh đó thực hiện sự
thay đổi theo đối số này như \centerline{Đầu đề} lệnh sẽ tạo
ra một dòng và đặt Đầu đề vào giữa dòng, có thể thay vào giữa
dòng bằng bất cứ chữ gì trong đối số; hoặc \vspace{1cm} làm
một khoảng cách trắng theo chiều dài trang bằng 1cm,...
3. Lệnh có đối số tùy chọn, nghĩa là khi cho một đối số tùy chọn nó
sẽ làm theo tùy chọn đó, ngược lại nó có giá trị mặc định để thực
hiện.

Để có thể tạo ra ba loại lệnh như trên LATEX cho ta lệnh


\newcommand{\<tên lệnh>}[<số đối số>][<tùy chọn>]{<định nghĩa>}

R
\renewcommand{\<tên lệnh>}[<số đối số>][<tùy chọn>]{<định nghĩa>}

\<tên lệnh> Lệnh đầu tiên cho ta thiết lập lệnh mới hoàn toàn
\<tên lệnh>, tên lệnh không được trùng với bất cứ lệnh nào của
LATEX hoặc trước đó đã định nghĩa. Tên lệnh chỉ được dùng các
chữ cái. Nếu ta dùng lệnh này trùng một lệnh đã có trước đó thì
khi biên dịch sẽ bị báo lỗi (các bạn có thể xem ở chương 4). Để

R
định nghĩa lại một lệnh đã có ta dùng lệnh thứ hai ở trên.
<số đối số> Đối số tùy chọn này là một trong các số từ 1 đến 9

R
phụ thuộc vào ta có bao nhiêu đối số.
<tùy chọn> Đối số tùy chọn này là giá trị mặc định của lệnh mới

R
có đối số tùy chọn.
<định nghĩa> Định nghĩa lệnh sẽ làm những thao tác gì được liệt
kê ở đây.

Để cụ thể hóa ta sẽ xét lần lượt các dạng lệnh định nghĩa mới:

2.3.1. Lệnh không có đối số

Nghĩa là lệnh \newcommand định nghĩa mới chỉ có tên lệnh và phần
định nghĩa lệnh. Lệnh này thích hợp với việc cố định các tổ hợp lệnh
của LATEX hoặc những thao tác người dùng cứ lặp đi lặp lại một dãy lệnh
cùng tên. Ví dụ, cấu trúc x1 , x2 , ..., xn gọi là x-vectơ, nó thường xuất hiện
2.3. Định nghĩa lệnh mới 53

rất nhiều trong công thức toán. Khi đó ta định nghĩa


\newcommand{\xvec}{x_1, x_2, \ldots, x_n}
Khi đó ta đã tạo ra lệnh mới \xvec, lệnh này phải nằm trong môi
trường toán vì trong định nghĩa của nó là những lệnh trong môi trường
toán. Khi áp dụng ta phải đặt nó trong môi trường toán $\xvec$ cho
kết quả x1 , x2 , . . . , xn .
Một phương án khác của định nghĩa trên là
\newcommand{\xvec}{$x_1, x_2, \ldots, x_n$}
Khi đó \xvec không phải đặt vào môi trường toán nữa. Nhưng lúc
đó không đặt lệnh này vào môi trường toán được nữa, gây ra nhiều hạn
chế cho sử dụng lệnh. Một phương án định nghĩa lệnh mới dùng được
cả trong hai môi trường là có thêm lệnh \ensuremath:
\newcommand{\xvec}{\ensuremath{x_1, x_2, \ldots, x_n}}
Kết quả là dùng \xvec và $\xvec$ cho cùng một kết quả.
Như ta đã biết khi sử dụng một lệnh như \xvec và ... cho kết quả
x1 , x2 , . . . , xn và ... chữ tiếp sau lệnh dính vào lệnh. Để khắc phục điều
này khi dùng lệnh ta chú ý thêm vào sau lệnh \xvec{} hoặc \xvec\ .
Còn khắc phục ngay trong định nghĩa thì tốt nhất dùng gói lệnh xspace
được nói ở chương sau.
Lệnh \renewcommand là định nghĩa lại một lệnh đã biết. Nhiều khi
ta muốn định nghĩa một lệnh mới nhưng không biết lệnh ta đặt đã có
hay chưa thì nên dùng lệnh
\providecommand{\<tên lệnh>}[<đối số>][<t.chọn>]{<đ.nghĩa>}
Cú pháp và ý nghĩa như các lệnh ở trên, chỉ có khác là nếu \<tên
lệnh> đã có thì định nghĩa mới này được bỏ qua. Trong nguyên bản của
TEX còn một lệnh định nghĩa mới
\def\<tênlệnh>{<định nghĩa>}
Lệnh này định nghĩa lệnh mới dù đã có lệnh đó rồi, nhưng có nhược
điểm là không thông báo đã có lệnh từ trước chưa. Điều này không hay
vì nhiều khi ta lại xóa mất lệnh có ích cho ta mà không biết. Hạn chế tối
đa dùng lệnh này trong văn bản LATEX.
54 Chương 2. Lệnh và môi trường

2.3.2. Lệnh có đối số

Ví dụ vectơ ở trên còn hạn chế là x1 , x2 , . . . , xn kí tự x luôn luôn cố


định. Nhiều khi ta phải dùng họ vectơ khác thì sao? như y1 , y2 , ..., yn
hoặc z1 , z2 , ..., zn . Lúc đó ta lại định nghĩa các lệnh mới \yvec và \zvec,
đây chỉ là phương án đối phó. Một phương án tổng quát là tạo ra lệnh
có nhận đối số để biến đổi kết quả cho thích hợp với mọi tình thế dù là
x, y hoặc z, ...
\newcommand{\tqvec}[1]{\ensuremath{#1_1, #1_2,\ldots,#1_n}}
Lệnh này có số biến là một trong [1]. Khi sử dụng lệnh này ta phải
bắt buộc có đối số \tqvec{<đối số>} như \tqvec{x} cho x1 , x2 , . . . , xn ;
\tqvec{y} cho y1 , y2 , . . . , yn và \tqvec{z} cho z1 , z2 , . . . , zn .
Như vậy theo định nghĩa trên thì ký hiệu #1 là biến ngầm định được
thay bởi <đối số> khi ta sử dụng lệnh. Ta thấy rằng cứ ở đâu có #1 thì
đều được thay bằng <đối số>. Trong hai trường hợp cụ thể trên thì #1
được thay bằng x và bằng y.
Chữ số 1 trong [1] ngầm định biến số #1, với một biến số thì chưa
thấy hết được ý nghĩa của số này. Ta có thể định nghĩa lệnh hai biến,
cũng ví dụ trên bây giờ ta xét cho số lượng tọa độ vectơ như u1 , u2 , ..., un
và v1 , v2 , ..., vm thì
\newcommand{\tqavec}[2]{\ensuremath{#1_1, #1_2,\ldots,
#1_#2}}
Khi đó gọi lệnh phải có hai đối số \tqavec{u}{n} cho kết quả
u1 , u2 , . . . , un . Tùy chọn [2] cho ta biết phải có hai biến ứng với #1 và
#2. Nghĩa là biến thứ nhất tương ứng với #1 là x, y, z, u, v, ...
còn #2 là các kí tự m, n, k, ... Ta sử dụng theo \tqavec{<đối số
1>}{<đối số 2>}
Hoàn toàn tương tự ta có thể định nghĩa lệnh có ba đối số
\newcommand{\subvec}[3]{\ensuremath{#1_#2, \ldots, #1_#3}}
Khi đó \subvec{a}{i}{j} cho ai , . . . , a j .
Chú ý khi định nghĩa ta dùng dấu { } cho các đối số ngầm định, vì
nếu như định nghĩa trên thì khi áp dụng \subvec{A}{ij}{kl} cho kết
quả Ai j, . . . , Ak l, như vậy kí tự j và l không phải là chỉ số. Để khắc phục
2.3. Định nghĩa lệnh mới 55

điều đó ta phải nhóm các chỉ số lại và định nghĩa phải là


\renewcommand{\subvec}[3]{\ensuremath{#1_{#2},\ldots,#1_{#3}}}
Khi đó \subvec{A}{ij}{kl} cho kết quả Aij , . . . , Akl .

2.3.3. Lệnh có đối số tùy chọn

Một lệnh có đối số phải bắt buộc đưa đối số vào khi gọi lệnh đó. Đối
số tùy chọn là không nhất thiết phải đưa đối số đó vào khi gọi. Với ví
dụ cuối cùng ta có cho đối số tùy chọn là x
\renewcommand{\subvec}[3][x]{
\ensuremath{#1_{#2},\ldots,#1_{#3}}}
Thường người ta chọn đối số đầu tiên là tùy chọn. Khi đó gọi lệnh
\subvec{i}{j} cho kết quả xi , . . . , x j . Ta chú ý tuy định nghĩa 3 đối số
nhưng ta chỉ thực hiện hai đối số còn đối số thứ ba là mặc định. Nếu ta
gọi \subvec[a]{i}{j} thì kết quả là ai , . . . , a j .

2.3.4. Một số ứng dụng hữu ích khi tạo lệnh

1. Trong LATEX có hai lệnh \atop và \choose là xếp chồng hai đại
lượng lên nhau, ta có thể lợi dụng lệnh này định nghĩa lệnh mới gần
giống với \frac nhưng không có dấu gạch ngang:
\newcommand{\xeplen}[2]{\ensuremath{#1\atop #2}}
\newcommand{\heso}[2]{\ensuremath{#1\choose #2}}
a
Với lệnh gọi \xeplen{a}{A} cho A, và \heso{5}{7} cho (57).
2. Ta tạo ra một lệnh \defbox{<văn bản mẫu>} đặt chiều rộng của
hộp bằng chiều rộng của <văn bản mẫu>. Những lệnh con sau đó như
\textbox{<văn bản>} căn <văn bản> vào giữa khung hộp có độ rộng
bằng <văn bản mẫu>.
\newlength{\rong}
\newcommand{\defbox}[1]{\settowidth{\rong}{#1}}
\newcommand{\textbox}[1]{\framebox[\rong]{#1}}
56 Chương 2. Lệnh và môi trường

7 8: 2
Em kéo chiếc khăn xuống vai\\ Em kéo chiếc khăn
\defbox{Em kéo chiếc khăn xuống vai}
\textbox{}\\
\textbox{Vầng trăng nhô lên}\\
\textbox{khỏi núi}\\ Vầng trăng

nhô lên khỏi núi

Nghĩa là đầu tiên ta tạo ra lệnh độ dài bằng độ dài của đối số trong
\defbox (chỉ lấy độ dài của đối số, văn bản không hiện ra), tiếp đó các
khung có độ dài bằng độ dài đã đặt, các văn bản trong khung được căn
vào giữa.
3. Ta muốn tạo ra lệnh ghi chú dùng \footnote{<văn bản>} nhưng
thay vào đó là ký hiệu đánh dấu * chứ không phải số. Hơn nữa mỗi
trang lại đặt lại từ đầu và số ghi chú chỉ tăng trong trang này nếu có
nhiều ghi chú. Khi đó ta phải tạo ra một số đếm theo trang
\newcounter{myfn}[page]
Nghĩa là đặt số đếm của ta bằng 0 mỗi khi sang trang mới sau đó
mới tăng lên.
\renewcommand{\thefootnote}{\fnsymbol{footnote}}
Để lấy ký hiệu chú thích đặc biệt, lệnh làm chú thích của ta là
\newcommand{\myftnote}[1]{\setcounter{footnote}{\value{myfn}}
\footnote{#1}\stepcounter{myfn}}
Khi ta dùng lệnh này \myftnote{Ghi chú của tôi} lần thứ nhất * ,
sau đó lại dùng \myftnote{Lần hai trên một trang} lần hai † . Các
bạn xem dưới chú thích trang này sẽ thấy.
4. Ta sẽ tạo ra một lệnh \seteqn đặt lại số các công thức, khi gọi
lệnh này thì tất cả dãy công thức con sẽ có cùng số nhưng sau đó là các
chữ cái a, b, c, ... cách nhau bởi dấu −, ví dụ như 4 − a, 4 − b, 4 − c, 5, 6 −
a, 6 − b, 7, ... Khi ta dùng lệnh \reseteqn thì số đếm của các công thức
lại trở lại bình thường

* Ghi chú của tôi


† Lần hai trên một trang
2.4. Gói lệnh ifthen 57

\newcounter{saveeqn}
\newcommand{\seteqn}{\setcounter{saveeqn}{\value{equation}}
\stepcounter{saveeqn}\setcounter{equation}{0}%
\renewcommand{\theequation}{%
\mbox{\arabic{saveeqn}-\alph{equation}}}}
\newcommand{\reseteqn}{\setcounter{equation}{\value{saveeqn}}%
\renewcommand{\theequation}{\arabic{equation}}}
Ta đã dùng một số đếm saveeqn để nhớ và vận hành cho cách đánh
số của ta thông qua việc đặt lại số đếm equation giá trị 0 khi ta bắt đầu
sử dụng. Đồng thời ta cũng định nghĩa lại \theequation cho thích hợp
với từng lệnh. Ta có thể áp dụng cho công thức
7 8: 2
\seteqn
\begin{align} x2 + y2 = 3z (1-a)
x^2+y^2&=3z\\
y3 + z3 = 4x (1-b)
y^3+z^3&=4x\\
z^4+x^4&=5y z + x = 5y
4 4
(1-c)
\end{align}
\reseteqn

2.4. Gói lệnh ifthen


Gói lệnh ifthen do Leslie Lamport viết để mở rộng khả năng thực
hiện các lệnh của LATEX. Trong cú pháp của LATEX sử dụng rất nhiều lần
lệnh trong gói này. Như bình thường gói lệnh được gọi vào bằng lệnh
\usepackage{ifthen} ngay phần đầu văn bản.
Gói lệnh có hai lệnh chính có cú pháp như sau:
\ifthenelse{<kiểm tra>}{<văn bản có kiểm tra đúng>}
{<văn bản kiểm tra sai>}
\whiledo{<kiểm tra>}{<văn bản có kiểm tra đúng>}
<kiểm tra> là biểu thức lôgic. Biểu thức lôgic này đúng thì lấy <văn
bản kiểm tra đúng> còn ngược lại thì lấy <văn bản kiểm tra sai>.
Còn công thức thứ hai thì nếu <kiểm tra> không đúng thì không
làm gì cả, còn nếu đúng thì làm khối văn bản trong lệnh.
Biểu thức lôgic trong <kiểm tra> là một trong những khả năng sau:
58 Chương 2. Lệnh và môi trường

Kiểm tra số
Kiểm tra số dùng các toán tử <, =, > tương ứng với nhỏ hơn thực
sự, bằng, lớn hơn thực sự. Giá trị của số đếm có thể kiểm tra thông qua
lệnh \value. Ví dụ dưới đây các bạn tự suy luận so với số trang của
cuốn sách này.
7 8 : 2
\newcommand{\ba}{3} O.K.
\ifthenelse{\ba=3}{O.K.}
{Cái gì đây?}\\[0.5cm] Trang nhỏ
\ifthenelse{\value{page}<100}
{Trang nhỏ}{Trang lớn quá!}

Trong LATEX còn có lệnh kiểm tra trang chẵn hoặc lẻ \isodd
7 8 : 2
\ifthenelse{\isodd{\value{page}}} Đây là trang chẵn 58.
{Đây là trang lẻ \thepage.}
{Đây là trang chẵn \thepage.}

Kiểm tra chuỗi kí tự


Kiểm tra chuỗi kí tự dùng lệnh
\equal{<chuỗi kí tự 1>}{<chuỗi kí tự 2>}
So sánh giữa hai chuỗi trên và đưa ra giá trị đúng hoặc sai. Ví dụ
7 8 : 2
\newcommand{\tenban}{Hồng} Nguyễn Thu Hồng
\ifthenelse{\equal{\tenban}{Hồng}}
{Nguyễn Thu \tenban}{Sai rồi??}

Kiểm tra độ dài


Mệnh đề lôgic so sánh giữa hai độ dài là
\lengtest{<so sánh>}
ở đây <so sánh> bao gồm hai độ dài hoặc hai lệnh độ dài quan hệ bởi
<, = hoặc >. Ví dụ
\newlength{\horiz} \newlength{\vert} \newlength{\min}
......
\ifthenelse{\newlength{\horiz>\vert}}
{\setlength{\min}{\vert}}{\setlength{\min}{\horiz}}
2.4. Gói lệnh ifthen 59

Đặt \min nhỏ hơn \horiz và \vert.


Bộ chuyển đổi
Bộ chuyển đổi là thông số hoặc là đúng hoặc là sai hay còn gọi là cờ.
Có ba lệnh để vận hành chuyển đổi:
\newboolean{<chuỗi kí tự>} Tạo ra bộ chuyển đổi.
\setboolean{<chuỗi kí tự>}{<giá trị>} Gán giá trị true hoặc
false
\boolean{<chuỗi kí tự>} Kiểm tra giá trị.
Lệnh thứ ba dùng để kiểm tra trong câu lệnh của \ifthenelse và
whiledo.
Kết hợp các mệnh đề lôgic
Bất kỳ mệnh đề lôgic ở trên đều có thể tổ hợp lại thành những mệnh
đề phức hợp thông qua các toán tử lôgic sau:
\and \or \not \( \)
Nghĩa của chúng giống với lôgic bình thường. Ví dụ ta muốn đặt
\textwidth=10cm nếu hai cột của văn bản mỗi cột có \paperwidth>15
và ở những trang nhỏ hơn 100, thì
\ifthenelse{\lengtest{\textwidth>10cm} \or
\(\lengtest{\paperwidth>15cm} \and
\value{page}<100\)}
{\setlength{\textwidth}{10cm}} {}
Một ứng dụng thường dùng cho gói lệnh ifthen là sự chuyển đổi
giữa hai cách viết khác nhau của ngôn ngữ cho cùng một từ, như trong
tiếng Anh và tiếng Anh kiểu Mỹ.
\newbooolean{US}
\setboolean{US}{true} %Kiểu đọc tiếng Mỹ
%\setboolean{US}{false} %Kiểu đọc tiếng Anh
\newcommand{USUK}[2]{\ifthenelse{\boolean{US}}{#1}{#2}}
Như vậy lệnh \USUK sẽ in ra đối số thứ nhất hoặc thứ hai phụ thuộc vào
cách đặt cờ US, ví dụ như
... the \USUK{color}{colour} of a picture ...
60 Chương 2. Lệnh và môi trường

Nếu là tiếng Anh kiểu Mỹ thì ta đặt \setboolean{US}{true}, còn


tiếng Anh chính quốc thì ngược lại.

2.5. Môi trường LATEX

2.5.1. Khái niệm môi trường

Môi trường được bắt đầu bằng lệnh \begin{<tên môi trường>} và
kết thúc bằng \end{<tên môi trường>}. Môi trường cũng như lệnh,
nó tác động lên tất cả những gì nằm trong khoảng hai từ khóa trên.
Mỗi môi trường thực hiện một nhiệm vụ cụ thể cho khối văn bản nó
bao hàm.
Môi trường cũng có đối số, đối số tùy chọn để thay đổi sự tác động
của môi trường. Nhiều môi trường trong nó có quy tắc riêng để thể
hiện nội dung văn bản như các môi trường về biểu bảng tabular, môi
trường về vẽ hình figure, hoặc môi trường enumerate, ... ta sẽ đề cập
đến ở các chương sau.
Rất nhiều lệnh có thể cũng có môi trường như vậy, chỉ khác là tên
môi trường không có \ phía trước. Ví dụ, lệnh \bfseries là chuyển
các kí tự thành đậm và tương ứng có môi trường bfseries cũng có
tác dụng như vậy với \begin{bfseries} bắt đầu làm đậm đến khi có
\end{bfseries}.

7 8 : 2
{\bfseries Lệnh làm đậm.} Lệnh làm đậm.
\begin{bfseries} Môi trường làm đậm.
Môi trường làm đậm.
\end{bfseries}
Nhưng cũng có những lệnh và môi trường giống nhau nhưng
tên không hoàn toàn trùng như \centering và \begin{center} ...
\end{center}.

2.5.2. Những môi trường đặc biệt

Môi trường trong LATEX rất phong phú, có tác động trên một khối
văn bản lớn chứ không như lệnh ta đã biết. Môi trường có thể lồng vào
2.5. Môi trường LATEX 61

nhau tùy ý. Những môi trường sau người dùng LATEX nào cũng nhận
ra:
1. Môi trường \begin{document} ... \end{document}, đây là môi
trường văn bản chính của bất cứ một lớp văn bản nào. Điều khiển toàn
bộ môi trường này là các lệnh ở trước \begin{document}. Như chương
1 đã biết là toàn bộ khung văn bản, các tiêu đề chạy, đánh số, căn lề,
chiều dài, rộng của trang,... đều thuộc môi trường này.
Đây là môi trường văn bản nên các lệnh trong môi trường toán sẽ
không thực hiện khi không có ký hiệu chuyển môi trường như $.
2. Môi trường toán. Những ký hiệu toán học có thể đi cùng với dòng
văn bản hoặc tách ra thành những dòng riêng ta gọi là những công thức.
Do vậy người ta đưa vào hai môi trường toán là math và displaymath.
Môi trường \begin{math} ... \end{math} gọi là môi trường toán trên
dòng. Môi trường \begin{displaymath} ... \end{displaymath} gọi
là môi trường công thức.

7 8 : 2
Ký hiệu toán trên cùng dòng Ký
p hiệu toán trên cùng dòng
\begin{math} \sqrt{x^2+y^2} x2 + y2 . Nhưng với công thức
\end{math}. toán thì
Nhưng với công thức toán thì
\begin{displaymath} cos2 α + sin2 α = 1
\cos^2\alpha+\sin^2\alpha=1
\end{displaymath}.

Vì môi trường toán rất hay được dùng nên từ khi có TEX người ta đã
viết tắt môi trường này là $ ... $ là môi trường toán trên dòng, còn
$$ ... $$ là môi trường công thức, theo nghĩa khi mở một môi trường
toán thì đóng lại môi trường đó cũng bằng những ký hiệu như vậy.

7 8: 2
Ký hiệu $\alpha,\beta,\gamma$ Ký hiệu α, β, γ là các góc trong
là các góc trong của một của một tam giác thì
tam giác thì
$$\alpha+\beta+\gamma=\pi.$$ α + β + γ = π.

Trong LATEX còn đưa vào lệnh viết tắt của môi trường là \( ... \)
môi trường toán trên dòng và \[ ... \] môi trường công thức. Môi
62 Chương 2. Lệnh và môi trường

trường này sẽ làm cho LATEX kiểm tra việc đóng hoặc mở môi trường
chính xác và thông báo chính xác điểm mà môi trường có lỗi.

7 8 : 2
Độ dài các cạnh của một tam giác Độ dài các cạnh của một tam
vuông là \(a,b,c\) với \(c\) là giác vuông là a, b, c với c là độ
độ dài cạnh huyền, thì dài cạnh huyền, thì
\[a^2+b^2=c^2\]
a2 + b2 = c2
Những môi trường công thức ở trên không đánh số công thức,
LAT
EX cung cấp một môi trường công thức equation có thể đánh
số theo chương hoặc đoạn văn bản như \begin{equation} ...
\end{equation}. Môi trường này cũng có thể không đánh số công thức
bằng cách dùng dấu * bên cạnh môi trường.

7 8: 2
Nếu $a,b$ là những số dương thì Nếu a, b là những số dương thì
\begin{equation}
\frac{a+b}{2}\ge\sqrt{ab}. a+b √
\end{equation} ≥ ab. (2.2)
2
3. Những môi trường có dấu *. Môi trường làm một số thao tác trên
các văn bản nó chứa, nhưng môi trường có dấu * bên cạnh tên môi
trường đó thì cũng chính là môi trường đó nhưng có một số tác động
hạn chế lại. Ví dụ trên môi trường equation* sẽ không đánh số công
thức nữa.

7 8: 2
Nếu $a, b$ là những số dương thì Nếu a, b là những số dương thì
\begin{equation*}
\frac{a+b}{2}\ge\sqrt{ab}. a+b √
\end{equation*} ≥ ab.
2
Đa số môi trường công thức toán đều có môi trường *, chương sau
ta sẽ nghiên cứu kĩ vấn đề này, ta có thể liệt kê một số ra đây như
align*, gather*, multline*, ...
4. Môi trường từ lệnh. Rất nhiều lệnh khi thực hiện chỉ có mở đầu
không có kết thúc, nhất là các lệnh về phông chữ như \bf, \itshape,
\sffamily, ... các bạn sẽ được thấy ở các chương sau. Để đóng mở sự
2.6. Định nghĩa môi trường mới 63

tác dụng của các loại này người ta dùng dấu nhóm { ... } ví dụ

7 8 : 2
{\bf Đậm lắm} rồi\\
Đậm lắm rồi
{\itshape Lại nghiêng} nghiêng\\
Lại nghiêng nghiêng
{\sffamily Không chân} đấy.
Không chân đấy.

2.6. Định nghĩa môi trường mới


Dần dần bạn đọc sẽ làm quen với các môi trường của LATEX ở những
chương sau. Nhưng chúng ta cũng có thể tự tạo ra môi trường với mục
đích riêng, lệnh để tạo ra môi trường mới là
\newenvironment{<tên>}[<số đối số>][<tùy chọn>]
{<phần đầu>}{<phần cuối>}
\renewenvironment{<tên>}[<số đối số>][<tùy chọn>]
{<phần đầu>}{<phần cuối>}

R
Những đối số trên có nghĩa sau:

<tên> Tên của môi trường với lệnh \newenvironment thì không
được trùng với những tên môi trường đã có trước đó. Còn
\renewenvironment tên môi trường phải tồn tại trước đó để định
nghĩa lại, chỉ nên thực hiện với môi trường ta đã biết rõ. Tên của

R
môi trường là những chữ cái, không chấp nhận các kí tự khác.
<số đối số> Số nguyên từ 1 đến 9, nghĩa là có bấy nhiêu đối số.

R
Nếu không có tùy chọn này thì môi trường không có đối số.
<tùy chọn> Mặc định của tùy chọn, văn bản được tính cho đối số

R
thứ nhất (#1).
<phần đầu> Tác động lên những văn bản đưa vào khi
\begin{<tên>} được gọi; nếu trong văn bản này chứa các thực
thể có dạng #n với n=1, 2, ..., <số đối số> thì khi đó môi
trường được gọi với lệnh
\begin{<tên>}{<đối số 1>}...{<đối số n>}...
và mỗi #n trong <phần đầu> sẽ được thay giá trị văn bản của đối

R
số <đối số n>.
<phần cuối> Kết thúc văn bản đưa vào môi trường khi gọi
64 Chương 2. Lệnh và môi trường

\end{<tên>}. Trong phần này không được dùng đối số #n.

2.6.1. Môi trường không đối số

Cũng giống như lệnh không đối số, môi trường không đối số khi
tạo ra chúng cũng không có [<số đối số>]. Ví dụ ta định nghĩa một
môi trường nghiêng nghieng dựa vào môi trường quote đã có sẵn của
LATEX như sau:
\newenvironment{nghieng}{\begin{quote}\itshape}{\end{quote}}

Đặt văn bản trong \begin{nghieng} ... \end{nghieng} cỡ


nhỏ và in nghiêng thông qua lệnh \small\itshape và đồng thời
thụt vào một chút so với lề văn bản do môi trường quote đã có.

Như vậy <phần đầu> bao gồm \begin{quote}\itshape, trong khi


đó <phần sau> chỉ có \end{quote}. Hai cách gọi dùng
\begin{nghieng} <văn bản> \end{nghieng} và
\begin{quote}\small\itshape <văn bản> \end{quote}
đều cho kết quả hoàn toàn trùng nhau.
Ta định nghĩa môi trường mới cải biên môi trường trên thành lời
bình khi ta muốn đưa văn bản vào:
\newcounter{com}
\newenvironment{loibinh}
{\noindent {\bf Lời bình:}\begin{quote}\small\itshape}
{\stepcounter{com}\hfill(\arabic{com})\end{quote}}
Ta thấy <phần đầu> và <phần cuối> ở hai dòng cuối. Số đếm com
mới đưa vào. Khi bắt đầu \begin{loibinh} thì <phần đầu> tác dụng
lên văn bản sau đó. Cuối cùng \end{loibinh} thì thực hiện <phần
cuối>.

7 8
\begin{loibinh}
Đây là lời bình cho môi trường mới định nghĩa, có chữ nhỏ
in nghiêng và thụt vào so với lề, hơn nữa lại còn đánh số
thứ tự trongvăn bản.
\end{loibinh}
2.6. Định nghĩa môi trường mới 65

: 2
Lời bình:
Đây là lời bình cho môi trường mới định nghĩa, có chữ nhỏ in
nghiêng và thụt vào so với lề, hơn nữa lại còn đánh số thứ tự
trongvăn bản. (1)

Để luôn luôn bắt đầu một đoạn trong môi trường trên, tránh cho
LATEX thông báo lỗi tràn dòng và đánh số luôn luôn ở cuối dòng, ta sửa
lại môi trường trên như sau
\renewenvironment{loibinh}{\begin{sloppypar}\noindent%
{\bf Lời bình:}\begin{quote}\small\itshape}{\stepcounter{com}%
\hspace*{\fill}(\arabic{com})\end{quote}\end{sloppypar}}
Bạn đọc hãy thử lại môi trường này với ví dụ trên.

2.6.2. Môi trường có đối số

Các đối số của môi trường hoạt động cũng giống như các đối số về
lệnh. Bây giờ ta cải tiến môi trường lời bình trên là có tên người sau chữ
lời bình:
\renewenvironment{loibinh}[1]{\begin{sloppypar}\noindent%
{\bf Lời bình:} #1 \begin{quote}\itshape}{\stepcounter{com}
\hspace*{\fill}(\arabic{com})\end{quote}\end{sloppypar}}
Khi đó
\begin{loibinh}{Nguyễn Hữu Điển}
Tôi rất tâm đắc câu thơ .............. khi yêu.
\end{loibinh}
Lời bình: Nguyễn Hữu Điển

Tôi rất tâm đắc câu thơ kết của Lưu Quang Vũ: "Đã quen lắm mà Anh
còn bỡ ngỡ, gọi tên Em môi cứ lạ lùng sao". Vũ đã gọi tên vợ lúc nào
cũng như mới gọi lần đầu tiên khi yêu. (2)

#1 không thể để ở <phần sau> trong định nghĩa môi trường. Nhưng
ta có thể dùng các lệnh \newsavebox, \sbox và \usebox để đưa thông
số vào cuối môi trường như ví dụ sau
\newsavebox{\comname}
66 Chương 2. Lệnh và môi trường

\renewenvironment{loibinh}[1]
{\begin{sloppypar}\stepcounter{com}\noindent{\bf Lời bình:}
\arabic{com}\sbox{\comname}{#1}
\begin{quote}\small\itshape}
{\hspace*{\fill}\usebox{\comname}\end{quote}\end{sloppypar}}
Sử dụng môi trường này

7 8: 2
\begin{loibinh}{N. H. Điển} Lời bình: 3
"Thêm một chiếc lá rụng\\
thế là thành mùa thu"\\ "Thêm một chiếc lá rụng
Cái thêm trong tình yêu thật thế là thành mùa thu"
Cái thêm trong tình yêu
mong manh và đầy thi vị...
thật mong manh và đầy thi
\end{loibinh} vị... N. H. Điển

2.6.3. Môi trường có đối số tùy chọn

Tương tự như lệnh có đối số tùy chọn khi ta định nghĩa với các lệnh
\renewenvironment{loibinh}[1][Nguyễn Hữu Điển]
{\begin{sloppypar}\stepcounter{com} {\bf Lời bình:}
\arabic{com}\sbox{\comname}{#1}
\begin{quote}\small\itshape}
{\hspace*{\fill}\usebox{\comname}\end{quote}\end{sloppypar}}
thì sử dụng với

7 8 : 2
\begin{loibinh} Lời bình: 4
[Nguyễn Thị Liên]
"Thế mà cứ gặp nhau\\ "Thế mà cứ gặp nhau
Mừng như cành gặp lá\\ Mừng như cành gặp lá
Một chút gì keo sơn\\ Một chút gì keo sơn
Gắn đời ta vào đó
Gắn đời ta vào đó\\
Một chút gì như lụa
Một chút gì như lụa\\ Buộc đời ta vào nhau
Buộc đời ta vào nhau Nguyễn Thị Liên
\end{loibinh}
Lệnh mặc định sẽ cho
2.7. Môi trường toàn văn bản 67

7 8: 2
\begin{loibinh} Lời bình: 5
Càng mong manh hơn khi đọc
Càng mong manh hơn
bài thơ của Nguyễn Thị
khi đọc bài thơ của
Liên về những cuộc gặp Nguyễn Thị Liên về
muộn mằn của đời người. những cuộc gặp muộn
\end{loibinh} mằn của đời người.
Nguyễn Hữu Điển

2.7. Môi trường toàn văn bản


Như ta đã thấy môi trường toàn văn bản nằm trong
\begin{document} ... ... \end{document}.
Một tài liệu dài như cuốn sách hoặc luận văn ta phải chứa văn bản
vào nhiều tệp, mỗi tệp chỉ là một chương hoặc một đoạn và được đọc
vào trong tệp chính nằm gọn trong môi trường trên. Nghĩa là ta có một
tệp gồm các khai báo phần đầu một văn bản sau đó là đưa các tệp soạn
riêng vào thân văn bản. LATEX cung cấp một lệnh \input{<tên tệp>}
đưa <tên tệp> cũng có phần mở rộng *.tex vào tệp chính. Nhưng tệp
đưa vào này không có phần mở đầu văn bản mà chỉ là các lệnh định
dạng bên trong một văn bản.
Khi một tệp đưa vào bằng lệnh này sẽ được xử lý lần lượt như bình
thường. Khi có nhiều tệp trong văn bản thì LATEX dùng lệnh \input
luôn luôn đọc vào và xử lý, như vậy sẽ rất lâu, lúc nào cũng phải chạy
lại những tệp đã xong. Nếu bỏ một tệp đi thì những tham khảo chéo và
chỉ số lại không có cho những tệp còn lại ta cần chạy LATEX. Do đó LATEX
đưa ra giải pháp là hãy đưa các tệp bằng lệnh \include{<tên tệp>}.
LATEX cũng đọc các tệp và xử lý như bình thường. Nhưng nếu ở phần
đầu tệp ta đặt lệnh \includeonly{<tên tệp 1>} thì khi chạy LATEX chỉ
có tệp <tên tệp 1> được xử lý và các chỉ số ở các chương khác được
lấy vào bình thường. Ví dụ cuốn sách này tôi đã soạn
68 Chương 2. Lệnh và môi trường

\documentclass[10pt,openany,reqno, twoside]{vnbook}
\usepackage[utf8]{vietnam}
\usepackage{amsxtra,amssymb,latexsym, amscd}
\usepackage{theorem}
.....
\includeonly{mila7}
\begin{document}
\include{gioithieu}
\include{mila1}
...
\include{mila7}
....
\printindex
\end{document}
Lệnh \includeonly có thể cho một số tệp như
\includeonly{gioithieu, mila2} và các tệp này ở cùng thư mục.

2.8. Môi trường khối hộp văn bản


Văn bản được tạo thành nhờ nhiều khối ghép lại theo chiều ngang
hoặc theo chiều dọc, ta sẽ nghiên cứu lần lượt trong các chương sau
như khối hình, bảng, ... Nhưng có môi trường có thể đặt các khối khác
vào đó để sắp xếp thuận tiện hơn như \begin{minipage} ... ...
\end{minipage}.
LATEX có dùng một số môi trường tạo văn bản trong một hộp, coi
như một đơn vị và có thể di chuyển cả hộp văn bản này lên trên, xuống
dưới, sang trái hoặc sang phải. Văn bản trong hộp được căn về bên trái
đến bên phải.

2.8.1. Hộp văn bản theo chiều ngang

\mbox{<văn bản>} và \makebox[<bề rộng>][<vị trí>]{<văn bản>}


\fbox{<văn bản>} và \framebox[<bề rộng>][<vị trí>]{<văn
bản>}
2.8. Môi trường khối hộp văn bản 69

Hai lệnh ở phía bên trái tạo hộp đúng bằng chiều rộng của văn bản
có trong dấu { }. Lệnh \fbox giống như \mbox ngoại trừ nó làm khung

cho văn bản <văn bản> .

Hai lệnh về phía bên phải cho phép tùy chọn độ rộng của hộp qua
đối số <bề rộng>. Còn tùy chọn <vị trí> vị trí văn bản bên trong đối

R
với hộp, tùy chọn này có thể là những chữ sau đây:

R
l căn <văn bản> về bên trái.

R
r căn <văn bản> về bên phải.
s co giãn <văn bản> phân bố đủ chiều rộng.

Ví dụ \makebox[3.5cm]{ Văn bản } tạo ra một hộp có chiều


rộng 3.5cm và nội dung căn vào giữa như (không thấy
khung): Văn bản . Muốn đóng khung hộp và căn lề

dùng\framebox[3.5cm]{Văn bản} cho kết quả Văn bản .


Một ứng dụng của lệnh trên là xây dựng ký tự đè lên nhau như
\makebox[0pt][l]{/}S cho ta /
S. Các lệnh có chiều rộng có thể so với

R
các độ đo của một dòng như:

R
\width độ rộng tự nhiên của hộp.

R
\height độ cao từ đường cơ sở trở lên.

R
\depth độ sâu xuống dưới từ đường cơ sở.
\totalheight bằng \height cộng với \depth.

Ví dụ ta làm hộp có chiều rộng bằng 8 lần chiều cao

\framebox[8\totalheight]{Văn bản} là Văn bản .

Trường hợp có thể văn bản xuất hiện ở nhiều chỗ, thì ta lập một
hộp ghi lại đoạn văn bản đó sau này đem ra sử dụng tại những vị trí
mà văn bản lặp lại. Việc đầu tiên ta thiết lập tên của hộp bằng lệnh
\newsavebox{\boxname}, \boxname là tên hộp sẽ chứa văn bản. Hộp
chứa văn bản theo cách
noindent \sbox{\boxname}{<Văn bản vào đây>}
\savebox{\boxname}[<bề rộng>][<vị trí>]{<Văn bản vào đây>}
70 Chương 2. Lệnh và môi trường

Các thông số <bề rộng> và <vị trí> cũng giống như các lệnh hộp
ở trên. Sau đó muốn cho nội dung hộp hiện ra ở đâu ta dùng lệnh
\usebox{\boxname}.

7 8 : 2
\newsavebox{\tho}
\sbox{\tho}{Con cóc} Con cóc trong hang
\usebox{\tho} trong hang\\ Con cóc nhảy ra
\usebox{\tho} nhảy ra\\ Con cóc ngồi đó
\usebox{\tho} ngồi đó\\ Con cóc nhảy đi.
\usebox{\tho} nhảy đi.

Người ta cũng có thể dùng môi trường tương đương với


\sbox{\boxname}{<văn bản>} là

7 8 : 2
\newsavebox{\boxname} Con cóc là cậu ông trời
\begin{lrbox}{\boxname}
Con cóc là cậu ông trời
\end{lrbox}
\usebox{\boxname}
Lệnh nâng lên, hạ xuống, dịch sang trái hoặc phải hộp văn bản
\raisebox{<khoảng di chuyển>}[<chiều cao>][<chiều sâu>]
{<văn bản>}
Lệnh này tạo ra một \mbox chứa văn bản <văn bản> được nâng lên
hoặc hạ xuống so với đường cơ bản của dòng với độ dài <khoảng di
chuyển>. Nếu có tùy chọn <chiều cao> hoặc <chiều sâu> thì hộp văn
bản được mở rộng thêm, tất cả đại lượng này đều phải có đơn vị độ dài.
Đường cơ bản \raisebox{1ex}{lên cao} và
\raisebox{-1ex}{xuống thấp} lại cũ
Kết quả là: Đường cơ bản lên cao và xuống thấp lại cũ

2.8.2. Hộp văn bản theo chiều dọc


Một lệnh cho hộp văn bản
\parbox[<vị trí>]{<bề rộng>}{<văn bản>}
tương đương với môi trường
2.8. Môi trường khối hộp văn bản 71

\begin{minipage}[<vị trí>]{<bề rộng>}<văn


bản>\end{minipage}
Đối số <bề rộng> độ rộng của các dòng văn bản trong môi trường.
Còn tùy chọn <vị trí> là những ký tự sau:
1. Không có tùy chọn này, hộp văn bản căn dọc vào giữa khối văn
bản:

7 8
\noindent\parbox{4.5cm}{
Anh có nghe hoa rơi \\ Quanh chỗ mình đứng đó }
\hfill (tiếp tục) \hfill
\parbox{5cm}{Hoa ơi sao chẳng nói\\ Anh ơi sao lặng thinh\\
Đốt lòng em câu hỏi:\\ Yêu em nhiều không anh?}

: 2
Hoa ơi sao chẳng nói
Anh có nghe hoa rơi Anh ơi sao lặng thinh
(tiếp tục)
Quanh chỗ mình đứng đó Đốt lòng em câu hỏi:
Yêu em nhiều không anh?
2. Tùy chọn là chữ b hoặc t nghĩa là đường cơ bản của hộp được căn
xuống dòng cuối cùng hoặc dòng đầu tiên.

7 8
\begin{minipage}[b]{4cm}
Ôi con sóng ngày xưa\\ Và ngày sau vẫn thế \\
Nỗi khát vọng tình yêu
\end{minipage}
\parbox{2cm}{Bồi hồi trong ngực trẻ}
\begin{minipage}[t]{4.5cm}
Trước muôn trùng sóng bể \\ Em nghĩ về anh, em\\
Em nghĩ về biển lớn\\ Từ nơi nào sóng lên?
\end{minipage}

: 2
72 Chương 2. Lệnh và môi trường

Ôi con sóng ngày xưa


Và ngày sau vẫn thế Bồi hồi
Nỗi khát vọng tình yêu trong ngực Trước muôn trùng sóng bể
trẻ Em nghĩ về anh, em
Em nghĩ về biển lớn
Từ nơi nào sóng lên?
Như vậy dóng hai hộp ngang hàng nhau là một vấn đề không dễ
khắc phục. Một cách thủ công là ta thêm vào phần cuối của hai hộp văn
bản lệnh \\ \mbox{} như ví dụ sau:

7 8
\begin{minipage}[t]{4.5cm} Sóng bắt đầu từ
gió\end{minipage}
\hfill\begin{minipage}[t]{4.5cm} Gió bắt đầu từ đâu?\\
Em cũng không biết nữa\\ Khi nào ta yêu nhau
\end{minipage}\\ \mbox{}

: 2
Sóng bắt đầu từ gió Gió bắt đầu từ đâu?
Em cũng không biết nữa
Khi nào ta yêu nhau
Công thức tổng quát cho lệnh và môi trường trên là ta có thể có tùy
chọn chiều cao của hộp văn bản.
\parbox[<vị trí>][<chiều cao>][<vị trí trong>]{<rộng>}{<văn bản>}
\begin{minipage}[<vị trí>][<chiều cao>][<vị trí trong>]{<rộng>}
<văn bản>
\end{minipage}
Tùy chọn <chiều cao> là chiều cao của hộp, còn <vị trí trong>
tùy chọn dồn văn bản vào giữa c, dồn lên trên t, dồn xuống dưới b.

7 8
\begin{minipage}[t][2cm][t]{3cm} Con sóng dưới lòng sâu\\
Con sóng trên mặt nước \end{minipage}\hrulefill
\begin{minipage}[t][2cm][c]{2cm}Ôi con sóng nhớ bờ
\end{minipage}\hrulefill
\begin{minipage}[t][2cm][b]{3cm}
Ngày đêm không ngủ được\\ Lòng em nhớ đến anh
\end{minipage}
2.8. Môi trường khối hộp văn bản 73

: 2
Con sóng dưới
lòng sâu Ngày đêm không
Con sóng trên Ôi con sóng ngủ được
mặt nước nhớ bờ Lòng em nhớ đến
anh
Một loại hộp đặc đen nhiều khi dùng là
\rule[<khoảng di chuyển>]{<bề rộng>}{<chiều cao>}.
Thông số <bề rộng> chiều rộng của hộp, <chiều cao> chiều
cao của hộp và tùy chọn <khoảng di chuyển> nâng lên hoặc hạ
xuống một khoảng <khoảng di chuyển> đối với đường cơ bản. Ví dụ
\rule{8mm}{3mm} cho ra .

Đường kẻ khung của lệnh \fbox{<văn bản>} là <văn bản> có


thể đặt lại được bởi lệnh thông số
\foxrule xác định độ dày của đường kẻ khung.
\fboxsep đặt khoảng trống từ văn bản đến đường kẻ khung.
Ví dụ ta đặt \setlength{\fboxrule}{0.5mm} thì \fbox{<văn

bản>} sẽ là <văn bản> .


CHƯƠNG 3

VĂN BẢN TOÁN HỌC

3.1. Phông và ký hiệu trong công thức . . . . . . . . . . . . . . . . . . . . . . . . 75


3.1.1. Phông cho các ký tự toán . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.1.2. Những ký hiệu toán học cơ bản . . . . . . . . . . . . . . . . . . . 78
3.1.3. Ký hiệu của gói lệnh amsmath . . . . . . . . . . . . . . . . . . . . 85
3.1.4. Sự kết hợp giữa các ký hiệu . . . . . . . . . . . . . . . . . . . . . . . 88
3.2. Môi trường ma trận . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
3.2.1. Môi trường ma trận cơ bản . . . . . . . . . . . . . . . . . . . . . . . . 94
3.2.2. Môi trường cases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.3. Biểu đồ trong toán học . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.3.1. Gói lệnh CD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.3.2. Gói lệnh pb-diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
3.4. Mở rộng môi trường theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.4.1. Môi trường định lý cơ bản trong LATEX . . . . . . . . . . . 102
3.4.2. Gói lệnh theorem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
3.5. Dạng thông số toán học . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
3.6. Sắp xếp đẳng thức . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.6.1. Công cụ chung cho các loại công thức . . . . . . . . . . . 108
3.6.2. Các môi trường công thức cụ thể . . . . . . . . . . . . . . . . 110
3.7. Tùy chọn của gói lệnh amsmath . . . . . . . . . . . . . . . . . . . . . . . . . 113

LATEX là một phương án nâng cao khả năng soạn thảo văn bản toán
học và các ngành tự nhiên khác. Khi những cấu trúc toán học phức
tạp hoặc những ký hiệu và các phương trình đa dạng thì LATEX cho
phép xây dựng và thực hiện chúng một cách dễ dàng bằng các lệnh
và môi trường. Đồng thời cùng với LATEX còn có AMSTEX của hội toán
học Mỹ. Hai chương trình này mỗi chương trình đều có thế mạnh riêng,
AMSTEX cũng cho ta cách soạn văn bản toán dễ dàng, nhưng về mặt cấu
trúc lại không được thống nhất và chặt chẽ, tuy nhiên nó có rất nhiều
phông để làm ký hiệu đẹp,... Để thống nhất hai chương trình trên người
ta đã sửa đổi AMSTEX để có thể nhúng vào LATEX. Khi đó người ta dùng
3.1. Phông và ký hiệu trong công thức 75

biểu tượng AMS-LATEX cho không phải chương trình nguyên bản LATEX.
Dự án AMS-LATEX bắt đầu tiến hành từ năm 1987 và ba năm sau đó
có phiên bản 1.0. Nội dung cơ bản của dự án là chuyển đổi các khả năng
của AMS-TEX sang LATEX và tích hợp hệ phông NFSS vào LATEX do Frank
Mittelback và Rainer Schopf làm việc với cố vấn kỹ thuật của hội toán
học Mỹ Michael Downes.
Để dùng được AMS-LATEX đầu văn bản phải dùng gói lệnh
\usepackage{amsmath}. Trong cuốn sách này cũng như các tài liệu
khác chúng tôi phổ biến đều dùng phương án AMS-LATEX và phương
án sau cùng của LATEX là LATEX 2ε . Như vậy những ký hiệu toán học được
định nghĩa trong các gói lệnh khác nhau, khi sử dụng ta chú ý đưa các
gói lệnh đó vào thì LATEX sẽ không báo lỗi.

3.1. Phông và ký hiệu trong công thức

3.1.1. Phông cho các ký tự toán

Gói lệnh amsmath có các lệnh biến ký tự thành các ký hiệu toán.
Lệnh Ý nghĩa
\Bbb Làm những chữ cái rỗng, ví dụ $\Bbb{NQRZ}$ cho
NQRZ.
\boldsymbol Dùng làm đậm chữ số, không làm đậm chữ
cái, chỉ làm đậm chữ cái Hy Lạp, ví dụ
$\boldsymbol{\alpha}$ cho α.
\frak Làm chữ cái Euler, ví dụ $\frak{E}=\frak{mc}^2$
cho E = mc2 .
\pmb Làm đậm ký hiệu toán khi không có phông dùng cho
các ký hiệu này, như $\pmb{\triangle}$ cho 4 .
\text Trong môi trường toán các chữ đều nghiêng, lệnh này
thiết lập môi trường bình thường trong môi trường
toán, như $E=mc^2\quad \text{(Einstein)}$ cho
E = mc2 (Einstein).
Ngoài ra trong hệ thống phông NFSS để làm các ký hiệu có các lệnh
76 Chương 3. Văn bản toán học

Lệnh Gõ vào Kết quả


\mathcal $\mathcal{A}=a$ A=a
\mathrm $\mathrm{min}_i$ mini
\mathbf $\sum x=\mathbf{v}$ ∑x = v
\mathsf $\mathsf{G}_1^2$ G21
\mathtt $\mathtt{W}(a)$ W(a)
\mathnormal $\mathnormal{log}=log$ log = log

Chú ý trong gói amsmath, lệnh \boldsymbol chỉ tác dụng trên một
ký hiệu toán, chữ Hy Lạp trừ chữ cái như \boldsymbol{\infty},
\boldsymbol{+}, \boldsymbol{\pi} và \boldsymbol{0} cho ∞, +, π
và 0.
Để thuận tiện cho việc đánh hàng loạt các ký hiệu toán học đậm ta
định nghĩa lại như ví dụ

7 8
\newcommand{\bpi}{\boldsymbol{\pi}}
\newcommand{\binfty}{\boldsymbol{\infty}}
$$A^\infty+\pi B_1 \sim \mathbf{A}^{\binfty}
\boldsymbol{+} \bpi \mathbf{B}_{\boldsymbol{1}}$$

: 2
∞ ∞
A + πB1 ∼ A + πB1

Lệnh trên nhiều khi không tác dụng cho một số ký tự do thiếu
phông, khi đó ta dùng lệnh \pmb, nhất là những ký hiệu được phóng to
như

7 8 : 2
\[\frac{\partial w}{\partial u}

∂w ∂u
\pmb{\Bigg \vert}
∂u ∂v
\frac{\partial u}{\partial v}\]

Những toán tử lớn và ký hiệu mở rộng ví dụ như ∑ và ∏, lệnh \pmb


không cho kết quả đẹp đối với những chỉ số biên xung quanh các kí tự
này. Do đó TEX cung cấp một lệnh \mathop để chỉnh lại những thiếu sót
này như:
3.1. Phông và ký hiệu trong công thức 77

7 8 : 2
\[ \sum_{j<P} \prod_\lambda
\lambda R(r_i) \qquad ∑ ∏ λR(ri ) ∑ ∏ λR(x j )
j< P λ xj λ
\mathop{\pmb{\sum}}_{x_j}
\mathop{\pmb{\prod}}_\lambda
\lambda R(x_j)\]

Có thể tạo tất cả công thức đều đậm bằng cách dùng \boldmath
trước công thức đó, để không làm đậm đoạn sau đó người ta dùng
lệnh \unboldmath sau công thức:

7 8 : 2
$$\alpha^2+\beta^2=\gamma^2$$ 2 2 2
α +β =γ
\boldmath
$$\alpha^2+\beta^2=\gamma^2$$ α2 + β2 = γ2
\unboldmath
Những ký hiệu có dấu, lệnh làm đậm có tác dụng như
$\mathbf{\hat{A}}$ cho Â. Còn những lệnh khác như
\mathcal,\frak các ký hiệu dấu không có thay đổi gì. Nếu
công thức chỉ có kí tự thì ta có thể áp dụng \mathbf, như
$\mathbf{a^2+b^2=c^2}$ cho ta a2 + b2 = c2 .
Người ta kết hợp các lệnh làm đậm kí tự và đậm ký hiệu trong môi
trường toán để làm đẹp công thức như ví dụ

7 8 : 2
\boldmath\[ \oint\limits_C V\, I I
\mathrm{d}\tau=\oint\limits_\Sigma V dτ = ∇ × V dσ
\nabla\times V \, d \sigma \] C Σ
\unboldmath
Đặc biệt ta có thể dùng \mathrm để đánh công thức hóa học như
$\mathrm{Fe_2^{2+}Cr_2O_4}$ cho ta Fe22+ Cr2 O4 .

7 8
\begin{gather*}
\mathrm{CaCO_3+2HCL=CaCl_2+H_2O+CO_2}\uparrow\\
\mathrm{CaCO_3+2H^++2Cl^-=Ca^{2+}+2Cl^-+H_2O+CO_2}\uparrow\\
\mathrm{CaCO_3+2H^+=Ca^{2+}+H_2O+CO_2}\uparrow
\end{gather*}
78 Chương 3. Văn bản toán học

: 2

CaCO3 + 2HCL = CaCl2 + H2 O + CO2 ↑


CaCO3 + 2H+ + 2Cl− = Ca2+ + 2Cl− + H2 O + CO2 ↑
CaCO3 + 2H+ = Ca2+ + H2 O + CO2 ↑

3.1.2. Những ký hiệu toán học cơ bản

Dấu trong môi trường toán

ô \hat{o} ó \acute{o} ō \bar{o} ȯ \dot{o} ŏ \breve{o}


ǒ \check{o} ò \grave{o} −

o \vec{o} ö \ddot{o} õ \tilde{o}

Bảng 3.1: Dấu trong môi trường toán

Hai kí tự i và j phải in ra không có dấu chấm ở trên cùng với dấu


khác được ghép vào. Để làm được điều đó có hai lệnh trong môi trường
toán \imath và \jmath như $\vec{\imath}+\tilde{\jmath}$ cho kết
quả −
→ı + ̃.
Những khả năng làm dấu co dãn theo các kí tự có các lệnh trong
bảng 3.2.

abc
f \widetilde{abc} abc
c \widehat{abc}
←− −→
abc \overleftarrow{abc} abc \overrighttarrow{abc}
abc \underleftarrow{abc} abc \underrighttarrow{abc}
← − −→
abc \overline{abc} abc \underline{abc}
z}|{
abc \overbrace{abc} abc \underbrace{abc}
√ √
|{z}
n
abc \sqrt{abc} abc \sqrt[n]{abc}
abc
f0 f’ \dfrac{abc}{xyz}
xyz

Bảng 3.2: Dấu co dãn của LATEX

Những lệnh \overline{...} và \underline{...} có thể lồng nhau


bất kì như
3.1. Phông và ký hiệu trong công thức 79

7 8 : 2
\[\overline{\overline{a}^2+\underline{xy}
+\overline{\overline{z}}}\] a2 + xy + z

Tương tự lệnh \overbrace{...} và \underbrace{...} cũng lồng


vào nhau

7 8 : 2
$$\overbrace{a+\underbrace{b+c}+d}$$ z }| {
a + b| {z
+ }c +d

Ngoài ra các móc trên và móc dưới có chỉ số tương ứng với móc trên
cho chỉ số mũ, móc dưới cho chỉ số dưới.

7 8 : 2
\[\underbrace{a+\overbrace{b+\cdots 123
+y}^{123}+z}_{\alpha\beta\gamma}\] z }| {
a + b + · · · + y +z
| {z }
αβγ

Chữ cái Hy Lạp


Trong toán học chữ cái Hy Lạp được sử dụng với tần suất lớn, nên
TEX cung cấp phông này khá đầy đủ và các lệnh tạo ra chữ cái Hy Lạp
(bảng 3.3).

α \alpha β \beta γ \gamma δ \delta


e \epsilon ε \varepsilon ζ \zeta η \eta
θ \theta ϑ \vartheta ι \iota κ \kappa
λ \lambda µ \mu ν \nu ξ \xi
o o π \pi v \varpi ρ \rho
$ \varrho σ \sigma ς \varsigma τ \tau
υ \upsilon φ \phi ϕ \varphi χ \chi
ψ \psi ω \omega
Γ \Gamma ∆ \Delta Θ \Theta Λ \Lambda
Ξ \Xi Π \Pi Σ \Sigma Υ \Upsilon
Φ \Phi Ψ \Psi Ω \Omega

Bảng 3.3: Chữ cái Hy Lạp

LATEX luôn tạo chữ cái Hy Lạp hoa bằng phông bình thường, muốn
làm không nghiêng các ký tự này ta dùng lệnh \mathnormal như
$\mathnormal{\Gamma\Pi\Phi}$ cho kết quả ΓΠΦ.
80 Chương 3. Văn bản toán học

Toán tử nhị phân


Tổ hợp hai đại lượng toán học thành một đại lượng toán học gọi là
phép toán nhị phân của hai đại lượng đó. LATEX có ký hiệu phép toán
nhị phân như bảng 3.4.

± \pm ∩ \cap ◦ \circ \bigcirc


∓ \mp ∪ \cup • \bullet 2 \Boxa
× \times ] \uplus  \diamond 3 \Diamonda
÷ \div u \sqcap  \lhda 4 \bigtriangleup
· \cdot t \sqcup  \rhda 5 \bigtriangledown
∗ \ast ∨ \vee  \unlhda / \triangleleft
? \star ∧ \wedge  \unrhda . \triangleright
† \dagger ⊕ \oplus \oslash \ \setminus
‡ \ddagger \ominus \odot o \wr
q \amalg ⊗ \otimes

Bảng 3.4: Toán tử nhị phân

Những lệnh có đánh dấu a phải có gói lệnh latexsym hoặc amssymb.

Toán tử quan hệ
Hai đại lượng toán học được so sánh với nhau người ta ký hiệu giữa
chúng một ký hiệu quan hệ. Có rất nhiều loại quan hệ trong toán học,
hiện nay có những ký hiệu trong bảng 3.5

≤ \le \leq ≥ \ge \geq 6= \neq ∼ \sim


.
 \ll  \gg = \doteq ' \simeq
⊂ \subset ⊃ \supset ≈ \approx  \asymp
⊆ \subseteq ⊇ \supseteq ∼
= \cong ^ \smile
< \sqsubseta = \sqsupseta ≡ \equiv _ \frown
v \sqsubseteq w \sqsupseteq ∝ \propto ./ \bowtie
∈ \in 3 \ni ≺ \prec  \succ
` \vdash a \dashv  \preceq  \succeq
|= \models ⊥ \perp k \parallel | \mid |

Bảng 3.5: Toán tử quan hệ

Ký hiệu ≤ có thể dùng hai lệnh \le hoặc \leq và một số ký hiệu
khác cũng vậy. Để thể hiện không có mối quan hệ người ta thêm dấu
3.1. Phông và ký hiệu trong công thức 81

gạch / đè lên các ký hiệu bằng như = và 6=. Một cách tổng quát dùng
lệnh \not trước lệnh các ký hiệu trên như $\not\in, \not=, \not>,
\not<,\not\subset$ cho ta 6∈, 6=, 6>, 6<, 6⊂. Nhưng chú ý \not\in và
\notin cho kết quả khác nhau 6∈, ∈
/.
Ký hiệu mũi tên (bảng 3.6)

← \leftarrow \gets ←− \longleftarrow


⇐ \Leftarrow ⇐= \Longleftarrow
→ \rightarrow \to −→ \longrightarrow
⇒ \Rightarrow =⇒ \Longrightarrow
↔ \leftrightarrow ←→ \longleftrightarrow
⇔ \Leftrightarrow ⇐⇒ \Longleftrightarrow
7→ \mapsto 7−→ \longmapsto
←- \hookleftarrow ,→ \hookrightarrow
( \leftharpoonup * \rightharpoonup
) \leftharpoondown + \rightharpoondown

\rightleftharpoons ; \leadsto
↑ \uparrow ↓ \downarrow
⇑ \Uparrow ⇓ \Downarrow
l \updownarrow m \Updownarrow
% \nearrow . \swarrow
& \searrow - \nwarrow

Bảng 3.6: Ký hiệu mũi tên

Ký hiệu ← và → có lệnh thứ hai là \gets và \to. Hơn nữa ta có lệnh


\iff cho ⇐⇒ giống như \Longleftrightarrow nhưng hơi ngắn một
chút ⇐⇒.
Tên hàm số
Kí tự trong môi trường toán đều in nghiêng, còn các hàm số trong
toán học ta muốn giữ ở kí tự bình thường, LATEX cung cấp lệnh để chính
các hàm ấy in ra không nghiêng (bảng 3.7).

\arccos \cos \csc \exp \ker \limsup \min \sinh


\arcsin \cosh \deg \gcd \lg \ln \Pr \sup
\arctan \cot \det \hom \lim \log \sec \tan
\arg \coth \dim \inf \liminf \max \sin \tanh

Bảng 3.7: Toán tử nhị phân với gói lệnh amssymb


82 Chương 3. Văn bản toán học

Những hàm \inf \lim \liminf \limsup \max \min \sup


trong công thức toán dòng riêng chấp nhận chỉ số trên và dưới thực sự
của các hàm.
7 8 : 2
$\sup_{x\in A}f(x) $\\ supx∈ A f ( x )
$ \lim_{x\rightarrow\infty}g(x)$ limx→∞ g( x )
$$\sup_{x\in A}f(x) \quad
\lim_{x\rightarrow\infty}g(x)$$ sup f ( x ) lim g( x )
x∈ A x →∞

Muốn làm văn bản trong môi trường toán trở lại môi trường văn
bản bình thường LATEX cung cấp lệnh \mbox{...}

7 8 : 2
\[\mathbf{y = y’} 0 0
y = y khi và chỉ khi yk = δk yτ (k)
\mbox{ khi và chỉ khi }
y’_k=\delta_ky_{\tau(k)}\]

Trong gói lệnh amsmath có lệnh \text{...} cũng tương tự. Ta có


thể dùng các lệnh này để tên các hàm là các ký tự bình thường. Nhưng
để tạo một lệnh hàm bình thường ta tiến hành một cách chính quy dùng
lệnh
\DeclareMathOperator{<lệnh hàm>}{<tên hàm>}
đặt ở phần mở đầu văn bản. Ví dụ như
\DeclareMathOperator{\tg}{tg} hoặc
\DeclareMathOperator{\cotg}{cotg}. Khi đó $\tg\beta$ là tgβ.
Ta cũng có thể dùng lệnh tại chỗ \operatorname và
\operatornamewithlimits để tạo ra như

7 8
\newcommand{\esssup}{\operatornamewithlimits{ess\, sup}}%
$$||f||_\infty=\esssup_{x\in R^n}|f(x)|$$

: 2
f ∞ = ess sup f(x)
x ∈ Rn

Hàm đồng dư
Hàm mod là hàm đặc biệt cho đồng dư. LATEX cung cấp cho ta hai
3.1. Phông và ký hiệu trong công thức 83

lệnh \bmod và \pmod. Nếu ta dùng gói lệnh amsopn (tự động được gọi
vào khi dùng amsmath hoặc dùng lớp văn bản AMS) ta có thêm hai lệnh
nữa \mod và \pod. Độ tinh tế giữa các lệnh này ta có thể xem ví dụ.

7 8 : 2
$x\equiv y \mod{\theta}$\\ x≡ y mod θ
$x\equiv y \bmod{\theta}$\\ x≡ y mod θ
$x\equiv y \pmod{\theta}$\\ x≡ y (mod θ )
$x\equiv y \pod{\theta}$ x≡ y (θ )

Ký hiệu toán học khác


LATEX còn chứa một số lượng lớn những ký hiệu có một nghĩa nào
đó trong văn bản toán học (xem bảng 3.8).

ℵ \aleph 0 \prime ∀ \forall \ \backslash


h̄ \hbar ∅ \emptyset ∃ exists ∞ \infty
ı \imath ∇ ¬ 4
√ \nabla \neg \triangle
 \jmath \surd [ \flat ♣ \clubsuit
` \ell ∂ \partial \ \natural ♦ \diamondsuit
wp \wp > \top ] \sharp ♥ \heartsuit
< \Re ⊥ \bot k \| ♠ \spadesuit
= \Im ∠ \angle 0 \mhoa

Bảng 3.8: Ký hiệu toán học khác

Ký hiệu toán học hai cỡ (bảng 3.9)

∑ ∑ \sum
T \ J K
\bigcap \bigodot
R Z S [ N O
\int \bigcup \bigotimes
H I F G L M
\oint \bigsqcup \bigoplus
∏ \prod
W _ U ]
∏ \bigvee \biguplus
ä \coprod
V ^
ä \bigwedge

Bảng 3.9: Ký hiệu toán học hai cỡ

Những ký hiệu hai cỡ được thể hiện trong môi trường toán cùng
dòng văn bản thì cỡ nhỏ như $\sum_{i=1}^n$ cho ∑in=1 , tương tự cho
Rb
$\int_a^b$ cho a , khác với
84 Chương 3. Văn bản toán học

$$\sum_{i=1}^n\quad \int_a^b$$ n Z b
cho kết quả ở bên cạnh ∑ a
i =1

Để có chỉ số thực sự ở trên và n Zb


ở dưới dấu tích phân ta phải ∑
cho thêm lệnh \limits trước i =1 a
chỉ số $$\sum_{i=1}^n\quad
\int\limits_a^b$$ cho kết quả ở
bên cạnh

Tương tự cho cỡ ký hiệu nhỏ trên cùng dòng văn bản ta cũng có
n Rb
$\sum\limits_{i=1}^n,\quad \int\limits_a^b$ cho ∑ , .
i =1 a
Các ký hiệu khác cũng hoàn toàn tương tự

7 8 : 2
\[\oint_0^\infty\quad I∞
I ∞ n
n
\oint\limits_0^\infty
\quad\prod_{\nu=0}^n 0
∏ ∏ ν =0
ν =0
0
\quad \prod\nolimits_{\nu=0}^n\]

Ký hiệu biên

[ [ ] ] d \lceil e \rceil
( ( ) ) b \lfloor c \rfloor
{ \{ } \} h \langle i \rangle
| | k \| ↑ \uparrow ⇑ \Uparrow
/ / \ \backslash ↓ \downarrow ⇓ \Downarrow
l \updownarrow m \Updownarrow

Bảng 3.10: Ký hiệu biên

Những ký hiệu biên thường có trong công thức toán học. Công thức
có loại to nhỏ khác nhau, LATEX cung cấp một lệnh kèm với các ký hiệu
biên để điều chỉnh biên cho thích hợp.
\left <biên trái> công thức \right <biên phải>

7 8 : 2
\[\left[\int + Z Z  x =1
\int\right]_{x=0}^{x=1}\] +
x =0
3.1. Phông và ký hiệu trong công thức 85

Có thể chỉ làm một bên ký hiệu biên, còn bên không có ký hiệu biên
cho lệnh có dấu chấm như \left. hoặc \right.

7 8 : 2
\[y=\left\{
x<0

\begin{array}{r@{\quad,\quad}l}  −1 ,
y= 0 , x=0
-1&x<0\\ 0&x=0\\ +1&x>0
+1 , x>0

\end{array}\right.\]

Một lệnh khác theo mức độ khác nhau phóng to biên như

( ) [ ] { } d e b c h i / \ | ↑ ⇑ ↓ ⇓ l m
       
  x ~  w x ~
\big  w y  y 
  h i n o l m j k D E . / x ~  w x ~
\Big
 w  w  w
 w y  y 
        x ~  w x ~
 w  w  w
\bigg  w  w  w
 w y  y 
!" #( )& '$ %* +, - x ~  w x ~
 w  w  w
\Bigg
 w  w  w
 w  w  w
 w y  y 

Bảng 3.11: Ký hiệu biên phóng to

7 8: 2
\[y=\left\{\begin{array}{l l}  
\bigg[\begin{array}{l l}&\\  2x + 3y = 5
y= 5x − 2y = 17
2x+3y&=5\\ 5x-2y&=17
x>9

\end{array}\\ x>9&
\end{array}\right.\]

3.1.3. Ký hiệu của gói lệnh amsmath

Một số ký hiệu biên và chữ cái Hebrew

p \ulcorner q \urcorner x \llcorner y \lrcorner


z \digamma κ \varkappa i \beth k \daleth

Bảng 3.12: Ký hiệu biên và chữ cái Hebrew với gói lệnh amssymb

Gói lệnh amssymb chứa hầu như toàn bộ ký hiệu của AMSTEX và
86 Chương 3. Văn bản toán học

Ký hiệu mũi tên


99K
\dashrightarrow L99 \dashleftarrow
 \leftrightarrows W \Lleftarrow
 \leftarrowtail " \looparrowleft
x \curvearrowleft \circlearrowleft
 \upuparrows  \upharpoonleft
( \multimap ! \leftrightsquigarrow
 \rightleftarrows  \twoheadrightarrow
# \looparrowright
\rightleftharpoons
 \circlearrowright  \Rsh
 \upharpoonright  \downharpoonright
8 \nleftarrow 9 \nrightarrow
; \nRightarrow = \nleftrightarrow
⇔ \leftleftarrows ⇒ \rightrightarrows
 \twoheadleftarrow  \rightarrowtail
\leftrightharpoons  \Lsh
y \curvearrowright  \downdownarrows
\rightsquigarrow : \nLeftarrow
< \nLeftrightarrow  \downharpoonleft

Bảng 3.13: Ký hiệu mũi tên với gói lệnh amssymb

sau này là AMS-LATEX trong các bảng sau đây: bảng 3.15, bảng 3.16,
bảng 3.14, bảng 3.1.3.
Toán tử nhị phân

u \dotplus r \smallsetminus e \Cap


d \Cup Z \barwedge Y \veebar
[ \doublebarwedge \boxminus  \boxtimes
\boxdot  \boxplus > \divideontimes
n \ltimes o \rtimes h \leftthreetimes
i \rightthreetimes f \curlywedge g \curlyvee
 \circleddash ~ \circledast } \circledcirc
 \centerdot | \intercal

Bảng 3.14: Toán tử nhị phân với gói lệnh amssymb

Cũng như các quan hệ trong LATEX ta có thể tạo thành phủ định mối
quan hệ nhờ lệnh \not như $\not\leqq$ cho 65. Nhưng để có các ký
hiệu đẹp hơn ta nên dùng các lệnh ở bảng 3.16.
3.1. Phông và ký hiệu trong công thức 87

Toán tử quan hệ
5 \leqq 6 \leqslant 0 \eqslantless
. \lesssim / \lessapprox u \approxeq
l \lessdot ≪ \lll ≶ \lessgtr
Q \lesseqgtr S \lesseqqgtr + \doteqdot
: \risingdotseq ; \fallingdotseq v \backsim
w \backsimeq j \subseteqq b \Subset
< \sqsubset 4 \preccurlyeq 2 \curlyeqprec
- \precsim w \precapprox  \vDash
E \trianglelefteq C \vartriangleleft  \Vvdash
` \smallsmile a \smallfrown l \bumpeq
m \Bumpeq = \geqq > \geqslant
1 \eqslantgtr & \gtrsim ' \gtrapprox
m \gtrdot ≫ \ggg ≷ \gtrless
R \gtreqless T \gtreqqless P \eqcirc
$ \circeq , \triangleq ∼ \thicksim
≈ \thickapprox k \supseteqq c \Supset
= \sqsupset < \succcurlyeq 3 \curlyeqsucc
% \succsim v \succapprox \Vdash
D \trianglerighteq B \vartriangleright p \shortmid
q \shortparallel G \between t \pitchfork
∝ \varpropto J \blacktriangleleft ∴ \therefore
 \backepsilon I \blacktriangleright ∵ \because

Bảng 3.15: Toán tử quan hệ với gói lệnh amssymb

Một số ký hiệu khác

h̄ \hbar } \hslash M \vartriangle


O \triangledown  \square ♦ \lozenge
s \circledS ∠ \angle ] \measuredangle
@ \nexists 0 \mho ` \Finv
a \Game k \Bbbk 8 \backprime
∅ \varnothing N \blacktriangle H \blacktriangledown
 \blacksquare  \blacklozenge F \bigstar
^ \sphericalangle { \complement ð \eth
 \diagup  \diagdown
Bảng 3.17: Một số ký hiệu khác với gói lệnh amssymb
88 Chương 3. Văn bản toán học

≮ \nless  \nleq
\nleqslant
log
 \nleqq 6= \lneq  \lneqq
\lvertneqq  \lnsim  \precnsim
⊀ \nprec  \npreceq  \precnsim
 \precnapprox  \nsim . \nshortmid
- \nmid 0 \nvdash 2 \nvDash
6 \ntriangleleft 5 \ntrianglelefteq * \nsubseteq
( \subsetneq \varsubsetneq $ \subsetneqq
& \varsubsetneqq ≯ \ngtr  \ngeq
\ngeqslant  \ngeqq \gneq
\gneqq  \gvertneqq  \gnsim
 \gnapprox  \nsucc  \nsucceq
 \succnsim  \succnapprox  \ncong
/ \nshortparallel ∦ \nparallel 2 \nvDash
3 \nVDash 7 \ntriangleright 4 \ntrianglerighteq
+ \nsupseteq # \nsupseteqq ) \supsetneq
! \varsupsetneq % \supsetneqq ' \varsupsetneqq

Bảng 3.16: Toán tử quan hệ phủ định với gói lệnh amssymb

3.1.4. Sự kết hợp giữa các ký hiệu


Những ký hiệu toán học thường không đứng riêng một mình,
chúng được kết hợp với nhau tạo ra các công thức đúng và đẹp. Có
một số lệnh kết nối những ký hiệu cho đẹp hơn, ta lần lượt xét các lệnh
đó ở phần này. Phần này cũng nằm trong gói amsmath.
Tích phân bội

7 8: 2
$\iint\limits_\Omega\mu(u,v)\,
µ(u, v) du dv
RR
du\, dv$\\ ΩRRR
$\iiint\limits_\Omega µ(u, v, w) du dv dw
\mu(u,v,w)\, du\, dv\, dw$\\ Ω
µ(t, u, v, w) dt du dv dw
RRRR
$\iiiint\limits_\Omega
Ω R
\mu(t,u,v,w)\, dt\, du\, dv\, dw$\\
· · · µ ( u1 , . . . , u k )
R
$\idotsint\limits_\Omega Ω
\mu(u_1,\dots,u_k)$
Những lệnh \iint, \iiint và iiiint là các lệnh cho dấu tích phân bội
từ hai dấu trở nên, khoảng cách giữa các dấu được tính toán co lại cho
3.1. Phông và ký hiệu trong công thức 89

đẹp. Những giới hạn của tích phân được dùng với \limits và ngoài ra
giữa các toán tử cần phải cho khoảng cách nhỏ \,. Đặc biệt \idotsint
cho hai dấu tích phân có các dấu ba chấm ở giữa
Dấu ba chấm
Công thức có dấu ba chấm chỉ ra hàng công thức tiếp tục. LATEX
cung cấp những dạng dấu ba chấm sau để kết nối với ký hiệu khác của
toán học được thích hợp
\ldots . . . ba chấm chân dòng, $a_1,a_2,\ldots,a_n$ là
a1 , a2 , . . . , a n .
\cdots · · · ba chấm giữa dòng, $a_1 + a_2+\cdots+ a_n$ là
a1 + a2 + · · · + a n .
. .
\vdots là .. và \ddots là . . dùng để cho cột hoặc đường chéo ma trận.
Chú ý khi dùng dấu ba chấm bình thường thì khoảng cách giữa các
dấu chấm trong môi trường toán không được đẹp.

7 8 : 2
$$\begin{array}{c c c c}
a11 a12 · · · a1n
a_{11}&a_{12}&\cdots&a_{1n}\\ .. .. ..
..
\vdots&\vdots&\ddots&\vdots\\ . . . .
a_{n1}&a_{n2}&\cdots&a_{nn} an1 an2 · · · ann
\end{array}$$

Khoảng trắng ngang trong công thức


Khoảng trắng trong công thức toán người ta hay dùng là \quad (có
tác dụng cả ngoài môi trường toán) bằng một kí tự trắng bình thường,
còn \qquad là khoảng trắng gấp đôi. Ngoài ra người ta cũng dùng
khoảng cách \hspace{...} hoặc \hspace*{...} với đối số là độ dài.
Một số khoảng trắng nhỏ để điều chỉnh các ký hiệu liền nhau như
Lệnh \, khoảng trắng nhỏ bằng 3/18 \quad;
Lệnh \: khoảng trắng trung bình bằng 4/18 \quad;
Lệnh \; khoảng trắng lớn bằng 5/18 \quad;
Lệnh \! khoảng trắng âm bằng −3/18 \quad.
Các lệnh trên có các lệnh tương đương như sau
Một số ví dụ
90 Chương 3. Văn bản toán học

Lệnh tắt Ví dụ Lệnh đủ Lệnh tắt Ví dụ Lệnh đủ


\, HD \thinspace \! HD \negthinspace
\: HD \medspace HD \negmedspace
\; HD \thickspace HD \negthickspace
H D \quad
H D \qquad
√ √
$\sqrt{3}\,x$ p3 x p3x
$\sqrt{\,\log x}$ logx√  logx√ 
$O\left(1/\sqrt{n}\,\right)$ O 1/ n O 1/ n
$[\,0,1)$ [ 0, 1) [0, 1)
$\log n\,(\log\log n)^2$ logn (loglogn)2 logn(loglogn)2
$x^2\!/2$ x2/2 x2 /2
$n/\!\log n$ n/logn n/logn
$\Gamma_{\!2}-\Delta^{\!2}$ Γ
RR2 − ∆
2 Γ
R 2R− ∆
2

$\int\!\!\!\int_D dx\, dy$ D


dx dy D
dxdy

Cỡ phông khác nhau trong công thức toán


Trong môi trường toán những lệnh sau đây điều khiển cỡ phông
cho các kí tự:

\displaystyle R
R Cỡ bình thường cho công thức dòng riêng.
\textstyle
\scriptstyle
\scriptscriptstyle
R
R
Cỡ bình thường cho công thức cùng dòng.
Cỡ bình thường của chỉ số trên và dưới lần đầu.
Cỡ phông trong chỉ số trên và dưới lần thứ hai.

Mối quan hệ giữa các ký hiệu ở công thức chính với chỉ số và tử số,
mẫu số được thể hiện theo phông như sau

Phông công thức chính Phông tử, mẫu phân số Chỉ số trên, chỉ số dưới
\displaystyle \textstyle \scriptstyle
\textstyle \scriptstyle \scriptstyle
\scriptstyle \scriptscriptstyle \scriptscriptstyle
\scriptscriptstyle \scriptscriptstyle \scriptscriptstyle

Bảng 3.18: Bảng cỡ của chỉ số và số hạng của phân số

Chỉ số trên và chỉ số dưới được thể hiện


3.1. Phông và ký hiệu trong công thức 91

7 8 : 2
$a^a+b^b=2_2$
a a + bb = 22
$$2A^2+3B_3=4C_4^4$$
2A2 + 3B3 = 4C44
Phân số trong TEX có lệnh { \atop } và { \choose } cho ký hiệu
số tổ hợp.

7 8: 2
a
b (ba) Cab
${a \atop b}\quad{a \choose b}
\quad\binom{a}{b}$ a a
 
$${a \atop b}\quad{a \choose b} Cab
b b
\quad\binom{a}{b}$$

Lệnh \binom{}{} và \frac{}{} trong gói lệnh amsmath và


các cỡ phông cũng tuân theo quy luật trên. Một phương án
cho cỡ phông \displaystyle \frac{}{} cả tử, mẫu số được viết
gọn thành lệnh \dfrac{}{} dù ở trên cùng dòng với văn bản,
tương tự cho lệnh \tfrac{}{} bằng \textstyle\frac{}{}. Gói lệnh
amsmath cũng cung cấp \dbinom{}{} và \tbinom{}{} tương ứng với
\displaystyle\binom{}{} và \textstyle\binom{}{}. Xét ví dụ

7 8: 2
1
\[a_0+\frac{1}{a_1+\frac{1}{a_2 a0 +
a1 + a2 +
1
1
+\frac{1}{a_3+\frac{1}{a_4}}}}\] a3 + a1
4
Dùng lệnh điều khiển phông ở trên ta có

7 8: 2
1
\[a_0+\frac{1}{\displaystyle a_1 a0 +
1
+\frac{1}{\displaystyle a_2 a1 +
1
+\frac{1}{\displaystyle a_3 a2 +
1
+\frac{1}{a_4}}}}\] a3 +
a4
Một số ví dụ dưới đây cột bên phải không có tác động của lệnh điều
khiển phông
92 Chương 3. Văn bản toán học

7 8 : 2
a b
\[\frac{\displaystyle\frac{a}{x-y} + a
+ b
x−y x+y x −y x +y
+\frac{b}{x+y}}
x−y 1+
x −y
{\displaystyle1+\frac{x-y}{a+b}}\] 1+ a+b
a+b
7 8: 2
x −x x −x
\[e^{\textstyle-\frac{x_i-x_j}{n^2}}\] e
− in2 j e
− i2j
n

Chồng ký hiệu lên nhau


LATEX cung cấp một lệnh chồng ký hiệu lên nhau để tạo ký hiệu mới
\strackrel{<ký hiệu trên>}{<ký hiệu dưới>}
<ký hiệu trên> được đặt phía trên <ký hiệu dưới> và phông ký hiệu
trên được giảm đi một bậc

7 8 : 2
$$\vec{x}\stackrel{\mathrm{def}}{=}

→ def
x = ( x1 , . . . , x n )
(x_1,\ldots, x_n)$$
$$A\stackrel{\alpha’}{\longrightarrow}B α0 β0
\stackrel{\beta’}{\longrightarrow}C$$ A −→ B −→ C

Dùng lệnh này định


nghĩa một số ký hiệu như
<
$\stackrel{\textstyle<}{=}$ cho =, hoặc định nghĩa dấu cung
_
AB bằng $\stackrel{\textstyle\frown}{AB}$ cho AB.

7 8 : 2
\def\cung#1{\stackrel{\textstyle\frown}{#1}}_ _ _
$$\cung{AB}+\cung{BC}=\cung{AC}$$ AB + BC = AC

Lệnh nguyên bản từ TEX chồng ký hiệu lên nhau vẫn còn tác dụng
trong LATEX là
{<ký hiệu trên> \atop <ký hiệu dưới>}
{<ký hiệu trên> \choose <ký hiệu dưới>}
Công thức thứ hai là hệ số Newton.

7 8: 2
\[{n+1 \choose k}={n\choose k}+
n+1 n n
     
{n\choose k-1}\] = +
k k k−1

Công thức thứ nhất thường dùng xếp chồng chỉ số trong các biểu
3.1. Phông và ký hiệu trong công thức 93

thức phức tạp

7 8
\[\prod_{j\ge0}\left(\sum_{k\ge 0}a_{jk}z^n\right)=
\sum_{n\ge 0}z^n\left(\sum_{k_0,k_1,\ldots, k_n\ge0 \atop
k_0+k_1+\cdots+k_n=0}\right)\]

:   2
!
∏ ∑ a jk zn = ∑ zn  ∑
 

j ≥0 k ≥0 n ≥0 k0 ,k1 ,...,k n ≥0
k0 +k1 +···+k n =0

Hai lệnh trên tương đương trong LATEX là


\begin{array}{c} <dòng trên> \\ <dòng dưới>\end{array} ứng
với \atop,
\left(\begin{array}{c}<dòng trên>\\ <dòng
dưới>\end{array}\right) ứng với \choose.
Sự khác nhau giữa công thức có cấu trúc array và \atop là phông
khi tạo ra chỉ số

7 8 : 2
$\prod_{p_1p_2\ldots p_k\atop
∏ pp1 pp2 ...p k ∏
p1 p2 . . . p k
p_1p_2\ldots p_k}$ 1 2 ...pk

$\prod_{\begin{array}{c} p1 p2 . . . p k
p_1p_2\ldots p_k\\
p_1p_2\ldots p_k\end{array}}$

Trong gói amsmath cung cấp một số lệnh chồng ký hiệu như
\underset{<ký hiệu dưới>}{<ký hiệu chính>} và \overset{<ký
hiệu trên>}{<ký hiệu chính>}

7 8: 2
\[\underset{n\ge0}{\sum}\qquad n n
\overset{n}{\prod}\qquad ∑ ∏ ∑ xk
\overset{n}{\underset{k=0}{\sum}}x_k\] n≥0 k =0

Một lệnh đặt ký hiệu bên cạnh một ký hiệu khác như
\sideset{}{’}\sum{...}
94 Chương 3. Văn bản toán học

7 8: 2
\[\sideset{_1^2}{_3^4}\prod_k\qquad 0
∏ ∑
2 4
\sideset{}{’}\sum_{0\le i\le m}E_i\] 1 3
Ei
k 0≤ i ≤ m

Cũng có thể dùng lệnh của biểu đồ giao hoán chồng ký hiệu lên
nhau, như sự kéo dài mũi tên

7 8: 2
\[\begin{CD}F\times\triangle[n-1] ∂0 α ( b )
@>{\partial_0\alpha(b)} F × 4[n − 1] −−−→ E∂0 b
»E^{\partial_0b}\end{CD}\] ∂0 α ( b )
\[\begin{CD}F\times\triangle[n-1] F × 4[n − 1] ←−−− E∂0 b
@<{\partial_0\alpha(b)}
«E^{\partial_0b}
\end{CD}\]

3.2. Môi trường ma trận

3.2.1. Môi trường ma trận cơ bản

Môi trường ma trận matrix giống như môi trường array nhưng
không có đối số cho các cột. Có lệnh mặc định cho các dạng ma trận
như matrix, pmatrix, bmatrix, vmatrix và Vmatrix.

7 8
\[\begin{matrix} 0 & 1 \\ 1 & 0 \end{matrix}\quad
\begin{pmatrix} 0 & 1 \\ 1 & 0 \end{pmatrix}\quad
\begin{bmatrix} 0 & 1 \\ 1 & 0 \end{bmatrix}\quad
\begin{vmatrix} 0 & 1 \\ 1 & 0 \end{vmatrix}\quad
\begin{Vmatrix} 0 & 1 \\ 1 & 0 \end{Vmatrix}\]

: 2
   
0 1 0 1 0 1 0 1

0 1

1 0 1 0 1 0 1 0 1 0

Tất cả các loại ma trận có số cột cho phép tạo ra là 10 được lưu trong
số đếm MaxMatrixCols. Ta có thể đặt lại số đếm này đến 19 hoặc 20 cột
trong ma trận. Nhưng khi sử dụng xong ta phải đặt lại số đếm này trở
về 10, vì để số lớn quá LATEX sẽ khó khăn làm các ma trận khác.
3.2. Môi trường ma trận 95

\begin{equation}
\setcouter{MaxMatrixCols}{10}
A=\begin{pmatrix}
...&...&...&...&...&...&...&...&...&...&...&...&...&...\\
...&...&...&...&...&...&...&...&...&...&...&...&...&...\\
....
\end{pmatrix}
\end{equation}
\setcouter{MaxMatrixCols}{10}
Một loại môi trường ma trận đặc biệt smallmatrix trên
dòng văn bản như $\left(\begin{smallmatrix} a&b \\ c&d
\end{smallmatrix}\right)$ cho ac db .


Khi làm ma trận lớn các hàng hoặc các cột kéo dài được sử dụng
lệnh ba chấm. Có một lệnh làm dấu chấm chạy xuyên qua các cột
\hdotsfor[<khoảng cách chấm điểm>]{<số cột xuyên qua>}
7 8: 2
\[\begin{Vmatrix}
a11 a12 · · · a1n

a_{11}&a_{12}&\cdots&a_{1n}\\
a21 a22 · · · a2n

a_{21}&a_{22}&\cdots&a_{2n}\\
.. .. .. ..

\vdots&\vdots&\vdots&\vdots\\ . . . .
a_{k1}&a_{k2}&\cdots&a_{kn}\\ ak1 ak2 · · · akn

\hdotsfor[1.5]{4}\\
........
a_{n1}&a_{n2}&\cdots&a_{nn}
an1 an2 · · ·

ann
\end{Vmatrix}\]

3.2.2. Môi trường cases

Môi trường matrix có thể kết hợp với ký hiệu biên để xây dựng
những công thức dạng khác nhau như
7 8: 2
\[f(x)=\left\{\begin{matrix}
nếu x > 0,

1& \mbox{ nếu $x>0$,}\\ 1
f (x) =
-1& \mbox{ nếu $x\le 0$.} −1 nếu x ≤ 0.
\end{matrix}\right.\]

Nhưng để có công thức đẹp người ta thường dùng môi trường cases.
96 Chương 3. Văn bản toán học

7 8: 2
\[f(x)=\begin{cases}

+1&\mbox{ nếu } x>0,\\  +1
 nếu x > 0,
0&\mbox{ nếu } x=0,\\ f (x) = 0 nếu x = 0,
-1&\mbox{ nếu } x<0.\\
nếu x < 0.

−1

\end{cases}\]

3.3. Biểu đồ trong toán học

3.3.1. Gói lệnh CD

Gói lệnh amscd cung cấp các lệnh làm biểu đồ hình chữ nhật. Mỗi
đỉnh của biểu đồ thường là những công thức toán, còn các cạnh hình
chữ nhật là các đường nối có các ký hiệu nhỏ giải thích bên cạnh. Ví dụ
môi trường CD.
7 8: 2
\[\begin{CD}
\Omega @»> \Phi \\ Ω −−−→ Φ
 x
@VVV @AAA\\  
y 
\Gamma @= \Delta
\end{CD}\] Γ ∆

Nguyên tắc lập biểu đồ giao hoán

1. CD là môi trường nằm trong môi trường toán.


2. Biểu đồ giao hoán là một ma trận kèm theo hai dạng mũi tên: mũi
tên ngang và mũi tên đứng. Mũi tên bắt đầu bằng ký hiệu @
a) Mũi tên về bên phải @>>>, bên trái @<<<, đường song song @=.
b) Mũi tên xuống @VVV, mũi tên lên @AAA.
3. Mũi tên có thể kèm theo nhãn bên cạnh:
a) Nếu @>{<ký hiệu trên>}>> và @<{<ký hiệu trên>}<< thì
<ký hiệu trên> ở trên mũi tên, còn @>>{<ký hiệu dưới>}> và
@<<{<ký hiệu dưới>}< thì <ký hiệu dưới> ở dưới mũi tên.
b) Nếu @V{<ký hiệu trái>}VV và @A{<ký hiệu trái>}AA thì
<ký hiệu trái> ở bên trái mũi tên, còn @VV{<ký hiệu phải>}V
3.3. Biểu đồ trong toán học 97

và @AA{<ký hiệu phải>}A thì <ký hiệu phải> ở phải mũi tên.
4. Những điểm bỏ trắng không cần thêm ký tự nhưng với @. .

7 8
\[ \begin{CD}
\mathcal{A} @>\alpha_1»\mathcal{B} @»\beta_2> \mathcal{C}\\
@V\rho_1VV @AA\rho_2A @VV\rho_3V\\
\mathcal{D} @<\gamma_3« \mathcal{E} @»\delta_4>\mathcal{F}
\end{CD}\]

: 2


A −−−→ B −−−→ C
β2
 x 

ρ1 y
 ρ2  ρ3
 y
γ3
D ←−−− E −−−→ F
δ4

Ta bỏ đi một nút ở phía trước cần có @. ở vị trí cần có mũi tên

7 8
\[ \begin{CD}
\quad @.\mathcal{B} @»\beta_2> \mathcal{C} \\
@.@AA\rho_2A @VV\rho_3V \\
\mathcal{D} @<\gamma_3« \mathcal{E} @»\delta_4> \mathcal{F}
\end{CD}\]

: 2

B −−−→ C
β2
x 
 ρ2  ρ3
 y
γ3
D ←−−− E −−−→ F
δ4
98 Chương 3. Văn bản toán học

3.3.2. Gói lệnh pb-diagram

Gói lệnh pb-diagram của Paul Burchard gồm môi trường diagram
có thể tạo ra những biểu đồ rất đa dạng nhờ thao tác được trên mỗi
nút của biểu đồ và các mũi tên có thể đi theo nhiều hướng kể cả đường
chéo và nét vẽ mũi tên có thể thay đổi. Các mũi tên còn đi qua được các
hàng hoặc cột. Các nhãn của các mũi tên có thể ở cả hai phía mũi tên.

7 8
\[ \begin{diagram}
\node{A} \arrow{e,t}{a} \arrow{s,l}{c} \arrow{ese}
\node{B^*}\arrow{e,t}{b^*}\node{C}\arrow{s,r}{d}\arrow{wsw}\\
\node{D} \arrow[2]{e,b}{e} \node[2]{E}
\end{diagram}\]

: 2
a b∗
A B∗ C

c d

D e E

R
Môi trường diagram gồm những thành phần sau

\node[<cột số>]{<công thức>} Tùy chọn <cột số> cột số mấy


so với nút trước đó (mặc định là 1). <công thức> có thể là một

R
khối ký hiệu toán lớn.
\\ Chuyển sang dòng sau của sơ đồ. Có thể dùng lệnh \\[<cột

R
thứ>] để chuyển tới dòng thứ <cột thứ>.
\arrow Đây là đường mũi tên có thể là những trường hợp sau đây:

\arrow[<cỡ>]{<hướng>,<tùy chọn>}
\arrow[<cỡ>]{<hướng>,<một nhãn>,<tùy chọn>}{<nhãn>}
\arrow[<cỡ>]{<hướng>,<hai~nhãn>,<tùy~chọn>}
{<nhãn1>}{<nhãn2>}

Trước và sau dấu phẩy không có khoảng trắng.


3.3. Biểu đồ trong toán học 99

<kích cỡ>R Tùy chọn ấn định bao nhiêu hàng mũi tên phải đi qua.
Ví dụ \arrow[2]{e} nghĩa là mũi tên kéo dài qua hai cột, còn

R
\arrow[2]{s} mũi tên kéo dài qua hai hàng.
<hướng> Hướng của mũi tên được chọn trong các chữ cái nghĩa

R
như sau:

R
n mũi tên lên trên,

R
e mũi tên sang phải,

R
s mũi tên xuống dưới,
w mũi tên sang bên trái,
đó là những hướng chính của mũi tên là bắc, đông, nam, tây.
Những mũi tên theo các hướng giữa các hướng trên được
chọn tương ứng ne, nw, se, sw, nne, nnw, sse, ssw, ene, ese,

R
wnw, wsw.

<nhãn> Đã ở trong môi trường toán. <một nhãn> có thể chọn một

R
trong những khả năng sau:

R
t đặt nhãn lên trên;

R
b đặt nhãn xuống dưới;

R
l đặt nhãn bên trái (chỉ cho trường hợp mũi tên đứng thẳng);
r đặt nhãn bên phải (chỉ trường hợp mũi tên đứng thẳng).

R
Trong trường hợp <hai nhãn> có thể chọn:

R
tb đặt nhãn phía trên và phía dưới;

R
lr đặt nhãn bên trái và bên phải (chỉ mũi tên thẳng đứng).

<tùy chọn> Định dạng mũi tên, những ký hiệu được đặt ở đây sẽ
có nghĩa đầu mũi tên, gốc mũi tên, và vị trí của các nhãn, giá trị
mặc định của nó là đường vẽ mũi tên bình thường, đầu mũi tên
một nét, gốc mũi tên không có ký hiệu đặc biệt và vị trí của nhãn
được đặt vào khoảng giữa mũi tên.
Tùy chọn này có khả năng sau:

R
1. Nét vẽ mũi tên:
.. Nét vẽ mũi tên là đường chấm hoặc gạch đứt.
100 Chương 3. Văn bản toán học

! R Không vẽ ra đường mũi tên.

R
2. Đầu mũi tên:

R
- Không có đầu mũi tên.
<> có mũi tên ở hai đầu.

R
3. Vị trí của nhãn cạnh mũi tên:

R
1 Bằng 1/4 mũi tên từ đầu mũi tên.

R
2 Bằng 2/4 mũi tên từ đầu mũi tên.
3 Bằng 3/4 mũi tên từ đầu mũi tên.

7 8
\dgHORIZPAD=0pt \dgVERTPAD=0pt
\[ \begin{diagram}
\node[4]{ K\left({\Bbb Z}/2,8n+1\right) }\\
\node[2]{K\left({\Bbb Z}/4,8n-1\right)}
\arrow{e}\arrow{ene,t}{Sq^2}
\node{E} \arrow{ne,b}{\Theta} \arrow{s,l}{\pi}\\
\node{ \Sigma\Omega X \wedge\Omega X}\arrow{e,t}{H_\mu}
\arrow{ne,t}{\sigma(\alpha\otimes\alpha)}\node{\Sigma \Omega X}
\arrow{e,t}{\sigma}\arrow{ne,t}{\tilde\sigma}
\node{X}\arrow{e,t}{\alpha^2}\node{K\left({\Bbb Z}/4,8n\right).}
\end{diagram}\]
: 2

K (Z/2, 8n + 1)
Sq2

Θ
K (Z/4, 8n − 1) E
σ(α⊗α) σ̃
π
Hµ σ α2
ΣΩX ∧ ΩX ΣΩX X K (Z/4, 8n) .

Những thông số cho môi trường diagram là chiều dài của mũi tên
\dgARROWLENGTH có giá trị tối thiểu là 2.5em. Có thể dùng thông số này
để điều khiển mũi tên các chiều thích hợp theo chiều dài.
3.3. Biểu đồ trong toán học 101

7 8 : 2
\[\divide\dgARROWLENGTH by2
\begin{diagram} A
\node[2]{A}\arrow[2]{s}\\
\node{B}\arrow{e,-} \node{} α
B C
\arrow{e,t}{\alpha}\node{C}\\
\node[2]{D}\arrow{ne,b}{\beta} β
D
\end{diagram}\]

Nhiều khi lệnh \arrow có thể thực hiện ra phía ngoài môi trường
diagram khi đó ta kiểm soát bằng lệnh \dgTEXTARROWLENGTH có giá trị
mặc định là 1.1em.
Thông số vùng đệm giữa biểu đồ theo chiều ngang, dọc được
kiểm soát bằng lệnh với giá trị mặc định là \dgHORIZPAD=1em và
\dgVERTPAD=2ex.
Khoảng cách từ nhãn tới thân mũi tên có lệnh
\dgLABELOFFSET=0.7ex và mũi tên được chia thành bao nhiêu
phần để đặt nhãn là \dgARROWPART=4. Ngoài ra còn khoảng cách giữa
các chấm điểm và độ dài nét gạch khi mũi tên là các đường chấm điểm
\dgDOTSPACING=0.35em và \dgDOTSIZE=1.5\fontdimen8\tenln.
Một ví dụ cho khả năng làm biểu đồ:
7 8
\[\begin{diagram}
\node{H^k(B_G\times N;Q)=H^k_G(N;Q)}
\arrow[2]{e,t}{f^*_j}\arrow[2]{s,l}{p^*}\arrow{se,t}{\tilde f^*}
\node[2]{H^k_G(F_j;Q)} \arrow[2]{s,r}{q^*_j}\\
\node[2]{H^k_G(M;Q)}\arrow{ne,t}{i^*_j}\arrow[2]{s,l,1}{i^*}\\
\node{H^k(N;Q)}\arrow{e,t,-}{\tilde f^*_j=f^*_j}
\arrow{se,b}{\tilde f^*=f^*}\node{} \arrow{e}
\node{H^k(F_j;Q)}\\
\node[2]{H^k(M;Q)} \arrow{ne,b}{i^*_j}
\end{diagram}\]
: 2
102 Chương 3. Văn bản toán học

f j∗
k k k
H ( BG × N; Q) = HG ( N; Q) HG ( Fj ; Q)
f˜∗ i∗j

k q∗j
p∗ HG ( M; Q)

i∗
f˜j∗ = f j∗
H k ( N; Q) H k ( Fj ; Q)

f˜∗ = f ∗ i∗j

H k ( M; Q)

3.4. Mở rộng môi trường theorem

3.4.1. Môi trường định lý cơ bản trong LATEX

LATEX cung cấp một lệnh tạo ra môi trường định dạng các nội dung
định lý trong toán học.
\newtheorem{<Tên môi trường>}{<Nhãn môi trường>}[<Đánh số>]
<Tên môi trường> và <Nhãn môi trường> do người dùng tự đặt.
Còn <Đánh số> là một trong các số đếm chapter theo chương, section
theo đoạn của văn bản, ... Ví dụ
\newtheorem{theorem}{Định lý}
\newtheorem{axiom}{Tiên đề}[chapter]
Trong môi trường định lý các chữ đều nghiêng, muốn không
nghiêng chữ trong nội dung ta có thể dùng lệnh \rm trong nó. Khi đó
ta có thể áp dụng

7 8
\begin{theorem}[Pythagoras]
Trong tam giác vuông bình phương cạnh huyền bằng tổng
bình phương của các cạnh góc vuông.
3.4. Mở rộng môi trường theorem 103

\end{theorem}
\begin{axiom}
Mỗi tập hợp khác rỗng số tự nhiên có một phần tử nhỏ nhất.
\end{axiom}

: 2

Định lý 3.1 (Pythagoras) Trong tam giác vuông bình phương cạnh
huyền bằng tổng bình phương của các cạnh góc vuông.

Tiên đề 3.1 Mỗi tập hợp khác rỗng số tự nhiên có một phần tử nhỏ nhất.

Như vậy việc đánh số trong mỗi môi trường độc lập trong một văn
bản. Nhiều khi ta muốn các môi trường đều đánh số liên tiếp nhau số
định lý, bổ đề, hệ quả đều cùng chung một số đếm.
\newtheorem{<Tên mới>}[<Môi trường trước>]{<Nhãn mới>}
<Môi trường đã có> là tên môi trường đã được định nghĩa bằng
\newtheorem trước đây.
Ví dụ \newtheorem{hq}[theorem]{Hệ quả} khi áp dụng cho kết quả

7 8
\begin{hq}
Tam giác có độ dài các cạnh 3, 4, 5 là một tam giác vuông.
\end{hq}

: 2

Hệ quả 3.2 Tam giác có độ dài các cạnh 3, 4, 5 là một tam giác vuông.

3.4.2. Gói lệnh theorem

Gói lệnh theorem của Frank Mittelback nhằm mở rộng môi trường
theorem và thực hiện định dạng môi trường này nhiều dạng và dễ dàng
hơn. Chú ý khi khai báo \usepackage{threorem} phải bỏ ngay gói
lệnh \usepackage{amsthm} vì hai gói này có một số lệnh trùng nhau,
trong cuốn sách này không mô tả gói lệnh của các tạp chí Mỹ này. Khi
dùng gói này các đặc điểm cơ bản của môi trường như phần trên vẫn
104 Chương 3. Văn bản toán học

giữ nguyên nhưng phải khai báo môi trường ở phần mở đầu văn bản.
Nhưng gói lệnh cho lệnh tác động vào định dạng của môi trường là
\theoremstyle{<Định dạng>}
Lệnh này thường đặt ngay trước khi tạo ra môi trường như

7 8
\begin{cor}
Tam giác độ dài các cạnh là 3, 4, 5 có một góc trong vuông.
\end{cor}

: 2

Hệ quả 1
Tam giác độ dài các cạnh là 3, 4, 5 có một góc trong vuông.

R
Có <Định dạng> sau đây:

plain Định dạng nguyên thủy của LATEX về môi trường này,
nhưng thêm thông số cho khoảng cách trước và sau định lý
\theorempreskipamount và \theorempostskipamount. Ta có thể
dùng lệnh gán lại những khoảng trống này cho thích hợp bằng

R
lệnh \setlength{...}{...}.
break Sau nhãn của môi trường thì xuống dòng vào nội dung môi

R
trường.
marginbreak Số của định lý được đánh ra ngoài lề và sau nhãn

R
môi trường cũng xuống dòng như break.
changebreak Giống như break, nhưng không có nhãn môi trường.

R
R
change Số và văn bản khởi đầu ngay môi trường, không có nhãn
margin Đánh số ra ngoài lề và sau đó nhãn và môi trường bình
thường.

Định dạng môi trường còn thông qua một lệnh định nghĩa lại phông
của nội dung môi trường
\theorembodyfont{<Lệnh phông>}
Lệnh này cũng đặt ngay trước định nghĩa môi trường. Ví dụ
3.4. Mở rộng môi trường theorem 105

{\theorembodyfont{\rmfamily}\newtheorem{Rem}{Chú ý}}

7 8
\begin{Rem}
Phông trong nội dung môi trường \verb!\rmfamily!, không
nghiêng nữa.
\end{Rem}

: 2

Chú ý 1 Phông trong nội dung môi trường \rmfamily, không


nghiêng nữa.

Nhãn của các môi trường được định nghĩa theo \newtheorem cũng
có thể định dạng lại bằng lệnh
\theoremheaderfont{<Lệnh phông>}
Lệnh này có thể khai báo toàn cục hoặc cho riêng một định nghĩa
như
{\theoremheaderfont{\bfseries}\newtheorem{Lem}{Bổ đề}}

7 8
\begin{Lem}
Phông trong nhãn bị thay đổi theo cách đặt.
\end{Lem}

: 2

Bổ đề 1 Phông trong nhãn bị thay đổi theo cách đặt.

Ta lấy thêm một số ví dụ về sử dụng môi trường


\theoremstyle{break} \newtheorem{hequa}{Hệ quả}
\theoremstyle{plain} \newtheorem{thidu}{Ví dụ}[section]
{\theorembodyfont{\rmfamily}\newtheorem{goiy}{Gợi ý}}
{\theoremstyle{marginbreak}\newtheorem{bode}[hequa]{Bổ đề}}
{\theoremstyle{change}
\theorembodyfont{\ss}\newtheorem{dinhnghia}{Định nghĩa}}

7 8
\begin{hequa}
106 Chương 3. Văn bản toán học

Môi trường định lý nhãn riêng một dòng \verb!hequa!.


\end{hequa}

: 2

Hệ quả 1
Môi trường định lý nhãn riêng một dòng hequa.

7 8
\begin{thidu}
Số đếm đến tận phân đoạn, môi trường \verb!thidu!.
\end{thidu}

: 2

Ví dụ 3.4.1 Số đếm đến tận phân đoạn, môi trường thidu.

7 8
\begin{goiy}
Nội dung không in nghiêng, môi trường \verb!goiy!.
\end{goiy}

: 2

Gợi ý 1 Nội dung không in nghiêng, môi trường goiy.

7 8
\begin{bode}
Đánh số ra lề và riêng dòng nhãn, môi trường \verb!bode!.
\end{bode}

: 2

2 Bổ đề
Đánh số ra lề và riêng dòng nhãn, môi trường bode.

7 8
\begin{dinhnghia}
Đánh số về phía trước, môi trường \verb!dinhnghia!
\end{dinhnghia}

: 2
3.5. Dạng thông số toán học 107

1 Định nghĩa Đánh số về phía trước, môi trường dinhnghia

Những số đếm của môi trường này đều sử dụng được lệnh
\label{...} và \ref{...} như phần trước ta đã biết.

3.5. Dạng thông số toán học


Những thông số căn chỉnh công thức toán có độ dài co dãn, nghĩa
là TEX sẽ tính tối ưu nhất cho vị trí công thức tương quan với các khối
văn bản khác (Trừ hai lệnh \jot và \arraycolsep không phải lệnh co
dãn), các lệnh này có thể thay đổi bằng cách dùng \setlength hoặc

R
\addtolength

\arraycolsep Bằng nửa chiều rộng trong cột ở môi trường array,

R
giá trị mặc định là 5pt.
\jot Khoảng trắng dọc thêm ra giữa các hàng trong môi trường

R
eqnarray hoặc eqnarray*, giá trị mặc định 3pt.
\mathindent Xác định thụt đầu dòng từ lề trái trong công thức
dòng riêng với tùy chọn ở đầu fleqn, giá trị mặc định của nó là

R
5em.
\abovedisplayskip Khoảng trắng phía trên công thức dài dòng
riêng, trừ trường hợp tùy chọn fleqn với \topsep đã được dùng.
Công thức dài là công thức xuất phát từ đầu dòng đến cuối dòng

R
lề phải, giá trị mặc định 12pt plus 3pt minus 9pt.
\belowdisplayskip Khoảng trắng phía dưới công thức dài dòng
riêng, trừ trường hợp tùy chọn fleqn với \topsep đã được dùng,

R
giá trị mặc định 12pt plus 3pt minus 9pt.
\abovedisplayshortskip Khoảng trắng phía trên công thức ngắn
dòng riêng, trừ trường hợp tùy chọn fleqn với \topsep đã được
dùng. Công thức nắn là công thức xuất phát từ kết thúc dòng

R
trước đó, giá trị mặc định 0pt plus 3pt.
\belowdisplayshortskip Khoảng trắng phía dưới công thức
ngắn dòng riêng, trừ trường hợp tùy chọn fleqn với \topsep đã
được dùng, giá trị mặc định 0pt plus 3pt.
108 Chương 3. Văn bản toán học

\topsep R Khoảng trắng theo chiều dọc của các công thức toán phía
trên và phía dưới khi chọn fleqn.

3.6. Sắp xếp đẳng thức


Công thức một dòng có đánh số bên cạnh trong LATEX là môi trường
equation và không đánh số là equation*. LATEX cũng cung cấp môi
trường eqnarray và eqnarray* cho công thức có nhiều dòng, dóng
công thức tại nhiều điểm và mỗi dòng một nhãn số.
7 8: 2
\begin{eqnarray}
a_1x+b_1y&=&c_1,\\ a1 x + b1 y = c1 , (3.1)
a_2x+b_2y&=&c_2.
a2 x + b2 y = c2 . (3.2)
\end{eqnarray}
\begin{equation} y = ax2 + b, với a, b > 0. (3.3)
y=ax^2+b,\mbox{ với }a,b>0.
\end{equation}

Trong gói lệnh amsmath cung cấp hàng loạt cách dóng công thức:
align align* Dóng công thức tại một điểm.
alignat alignat* Dóng công thức tại một số điểm.
xalignat xxalignat Dóng ngoài những phương án trên.
gather gather* Tổ hợp công thức nhiều dòng không dóng.
multiline multiline* Dóng nhiều đẳng thức.
split Ngắt những công thức dài.

3.6.1. Công cụ chung cho các loại công thức

1. Những môi trường có dấu * khi dóng không đánh số công thức.
Những môi trường được đánh số tại mỗi dòng có thể dùng lệnh gán
nhãn như \label{eq:ch1} và lấy các số công thức này ra tại vị trí có
gán lệnh \ref{eq:ch1}.
2. Trường hợp nhiều dòng công thức có dòng không đánh số thì
dùng lệnh \notag tại cuối dòng đó trước dấu \\. Ta có thể đánh dấu
công thức bằng ký hiệu riêng bằng cách cuối dòng đó dùng lệnh như
\tag{*} thì công thức đó được đánh dấu bằng (*). Nếu không có dấu
ngoặc tròn quanh nhãn của công thức ta dùng lệnh \tag*{<nhãn>}.
3.6. Sắp xếp đẳng thức 109

Trường hợp số đánh dấu công thức theo chiều dọc không thích hợp
ta phải chỉnh lại bằng lệnh \raisetag{<độ dài>}, <độ dài> là một đại
lượng số đo, nếu là dương thì nhãn được nâng lên, còn âm thì hạ xuống.

3. Lệnh \\ là xuống dòng bình thường, còn lệnh \\[<độ dài>] là


xuống dòng và cách ra một khoảng theo chiều dọc là <độ dài>.
4. Tại điểm dóng là ký hiệu &.
So sánh giữa lệnh align và eqnarray

7 8 : 2
\begin{align}
x^2+y^2&=z^2\notag\\ x 2 + y2 = z2
x^3+y^3&=z^3\tag*{$\dag$}
\end{align} x 3 + y3 = z3 †
\begin{eqnarray}
x^2+y^2&=&z^2\\
x 2 + y2 = z2 (3.4)
x^3+y^3&=&z^3
\end{eqnarray} x +y
3 3
= z 3
(3.5)

5. Trong LATEX muốn đánh số công thức theo đoạn (section) thì ta
phải định nghĩa lại tại đầu mỗi chương lệnh \theequation:
\renewcommand{\theequation}{\thesection.\arabic{equation}}
Như vậy rất bất tiện cho người dùng. Trong gói lệnh amsmath cung
cấp một lệnh khai báo ở phần đầu tệp lệnh \numberwithin.
\numberwithin{equation}{section}.
6. Một khối công thức LATEX không cho phép ngắt sang hai trang
khác nhau. Muốn ngắt trang trong khối công thức phải thực hiện bằng
lệnh \allowdisplaybreaks đặt trước môi trường ta cần ngắt ra, nhưng
với ngoặc nhọn trong khối {\allowdisplaybreaks ...}, trong khối
này ưu tiên ngắt tại vị trí có đánh dấu \\*. Có thể ngắt bằng lệnh
\displaybreak tại vị trí trước dấu \\ dòng phải ngắt trong công thức.
Lệnh này cũng giống lệnh ngắt trang có mức độ mạnh khác nhau như
\displaybreak[0] cho phép ngắt tại vị trí này, còn \displaybreak
trùng với \displaybreak[4] ra lệnh ngắt.
7. Trên mỗi dòng ta có thể đưa vào văn bản trong lệnh \mbox{ ...
}, nhưng cũng có thể đưa văn bản ngang qua các cột dóng trong công
110 Chương 3. Văn bản toán học

thức bằng lệnh \intertext như

7 8 : 2
\begin{align}
a&=x-y,\\ a = x − y, (3.6)
b&=x+y,\\ b = x + y, (3.7)
\intertext{ và ta có }
x&=\frac{a+b}{2}. và ta có
\end{align}
a+b
x= . (3.8)
2

3.6.2. Các môi trường công thức cụ thể


Môi trường align
Ta đã biết nhiều về môi trường này qua các ví dụ trên. Thêm ví dụ

7 8 : 2
\begin{align}
x^2+y^2&=1,\\ x2 + y2 = 1, (3.9)
x&=\sqrt{1-y^2}. q
\end{align} x = 1 − y2 . (3.10)

Môi trường gather


Môi trường này không có dấu dóng công thức & mà chỉ có \\, các
công thức được căn vào giữa dòng

7 8 : 2
\begin{gather}
(a+b)^2=a^2+2ab+b^2\\ ( a + b)2 = a2 + 2ab + b2 (3.11)
(a+b)\cdot(a-b)=a^2-b^2
\end{gather} ( a + b) · ( a − b) = a2 − b2 (3.12)

Môi trường alignat


Môi trường lấy cả bề ngang của trang để dóng công thức. Môi
trường dóng tại nhiều điểm và có đối số là một số nguyên n thì phải
có 2n-1 dấu & trên một dòng dóng công thức.
Môi trường xalignat và xxalignat cũng giống như alignat
nhưng thêm vào khoảng trắng giữa hai thành phần được dóng. Với
xalignat khoảng trắng giữa các cột và cột với các lề bằng nhau, còn
3.6. Sắp xếp đẳng thức 111

xxalignat có khoảng trắng giữa các cột bằng nhau nhưng giữa cột và
lề bằng không.

7 8 : 2
\begin{alignat}{2}
T_1&=P_1&\quad T_2&=P_2\\ T1 = P1 T2 = P2 (3.13)
T_3&=P_3&\quad T_4&=P_4
T3 = P3 T4 = P4 (3.14)
\end{alignat}
7 8 : 2
\begin{xalignat}{2}
T_1&=P_1&\quad T_2&=P_2\\ T1 = P1 T2 = P2 (3.15)
T_3&=P_3&\quad T_4&=P_4
T3 = P3 T4 = P4 (3.16)
\end{xalignat}
\begin{xxalignat}{2}
T_1&=P_1&\quad T_2&=P_2\\ T1 = P1 T2 = P2
T_3&=P_3&\quad T_4&=P_4 T3 = P3 T4 = P4
\end{xxalignat}

Môi trường multiline


Môi trường không có dấu dóng &, thích hợp cho công thức có nhiều
dòng. Dòng thứ nhất được dạt về sát lề bên trái; dòng cuối cùng dạt về
sát lề bên phải; còn các dòng ở giữa được căn vào tâm dòng của trang.
Khoảng cách từ lề đến dòng đầu và dòng cuối được đo bằng lệnh thông
số \multlinegap và có thể đặt lại được.

7 8
\begin{multline*}
\int_a^b \left\{ \int_a^b [f(x)^2 g(y)^2+f(y)^2g(x)^2]
-2f(x)g(x)f(y)g(y)\, dx \right\}\, dy\\
=\int_a^b\left\{ g(y)^2\int_a^b f^2+f(y)^2
\int_a^b g^2-2f(y)g(y)\int_a^b fg \right\}\, dy
\end{multline*}

: 2
Z b Z b 
[ f ( x ) g(y) + f (y) g( x ) ] − 2 f ( x ) g( x ) f (y) g(y) dx dy
2 2 2 2
a a
Z b Z b Z b Z b 
= g(y) 2
f + f (y)
2 2
g − 2 f (y) g(y)
2
f g dy
a a a a
112 Chương 3. Văn bản toán học

Môi trường split


Môi trường dóng công thức được chia ra nhiều dòng, cách hoạt
động cũng giống môi trường align hoặc gather. Nhưng môi trường
này phải nằm trong một môi trường toán

7 8
\begin{equation}
\begin{split}
(a+b)^4&=(a+b)^2(a+b)^2\\
&=(a^2+2ab+b^2)(a^2+2ab+b^2)\\
&=a^4+4a^3b+6a^2b^2+4ab^3+b^4
\end{split}
\end{equation}

: 2

( a + b )4 = ( a + b )2 ( a + b )2
= ( a2 + 2ab + b2 )( a2 + 2ab + b2 ) (3.17)
= a4 + 4a3 b + 6a2 b2 + 4ab3 + b4

Môi trường như một phần của công thức


Môi trường split và một số môi trường khác như aligned,
gathered, alignedat có thể ghép với nhau trong môi trường toán
thành những khối công thức ngang hàng nhau.

7 8 : 2
\begin{equation*}
x +y = 1
2 2
\begin{aligned}[b]
x^2+y^2&=1\\ 2x + y = 2 a2 + b2 = c2
2x+y&=2 abc = 1
\end{aligned}\qquad
Không có tùy chọn [t] và [b]:
\begin{gathered}[t]
a^2+b^2=c^2\\ x 2 + y2 = 1 a2 + b2 = c2
abc=1
2x + y = 2 abc = 1
\end{gathered}
\end{equation*}
Các môi trường này có tùy chọn c t b trong [ ] ở đầu môi trường
cho phép dóng ngang các khối công thức với nhau như [c] ngang giữa
3.7. Tùy chọn của gói lệnh amsmath 113

công thức, [b] căn ngang dòng cuối cùng của các khối, [t] căn theo
dòng đầu tiên của khối công thức.

3.7. Tùy chọn của gói lệnh amsmath


Gói lệnh amsmath cho AMS-LATEX có một số tùy chọn ta phải đặt vào
vị trí <tùy chọn> dưới đây các lệnh mới được gọi vào
\usepackage[<tùy chọn>]{amsmath}
Danh sách <tùy chọn> được liệt kê dưới đây, chú ý dấu mũ d tùy

R
chọn là mặc định trong gói lệnh này:

• centertagsd | tbtags Đánh số công thức cho môi trường


split vào trung tâm theo chiều dọc là mặc định. Còn tùy chọn
tbtags hoặc đặt số công thức trước dòng thứ nhất ở bên trái hoặc
sau dòng cuối cùng của công thức phụ thuộc vào mặt trang sẽ

R
xuất hiện.
• sumlimitsd | nosumlimits Trong công thức dòng riêng chỉ
số trên và chỉ số dưới sẽ ra ở trên và ở dưới dấu ∑ với tùy
chọn sumlimits. còn với nosumlimits thì các chỉ số chỉ đặt bên
cạnh dấu. Những ký hiệu chịu sự tác động của lệnh này là
∑, ∏, , , , , và các dấu tích phân
V W J N L

7 8
\[\sum_{n=0}^\infty \frac{1}{2^n}=2;
\prod_{i=0}^{m-1}(n-i)=\frac{n!}{(n-m)!}\]
\[\sum\nolimits_{n=0}^\infty \frac{1}{2^n}=2;
\prod\nolimits_{i=0}^{m-1}(n-i)=\frac{n!}{(n-m)!} \]

: 2
∞ m −1
1 n!
∑ n
= 2; ∏ (n − i ) = (n − m)!
n =0 2 i =0

∞ 1 m −1 n!
∑ n =0 2n = 2; ∏ i =0 (n − i ) =
(n − m)!

• intlimits | nointlimitsd R
Bình thường dấu tích phân có
giới hạn ở bên cạnh. Tùy chọn này cho phép ta đặt giới hạn lên
114 Chương 3. Văn bản toán học

trên, xuống dưới hẳn dấu tích phân.

7 8

\[\int_0^{\pi/2}\cos^2 t dt
=\frac{\pi}{4}\quad(\verb!nointlimits!)\quad
\int\limits_0^{\pi/2}\cos^2 t dt
=\frac{\pi}{4}\quad(\verb!intlimits!)\]

: 2

Z π/2 π/2
Z
π π
cos tdt =
2
(nointlimits) cos2 tdt = (intlimits)
0 4 4

R
0

• namelimitsd | nonamelimits Những tên hàm \det, \gcd


\inf, \lim, \liminf, \limsup, \max, \min, \Pr và \sup các giới
hạn của chúng được đặt ở dưới, với nonamelimits các chỉ số đặt
ở bên cạnh.

7 8

\[\lim_{x\to\infty}\left(1+\frac{1}{x}\right)^x=e=2.7182...
\quad(\verb!namelimits!)\]
\[\lim_{x\to\infty}\left(1+\frac{1}{x}\right)^x=e=2.7182...
\quad(\verb!nonamelimits!)\]

: 2
 x
1
lim = e = 2.7182... (namelimits)
1+
x →∞ x
1 x
 
lim 1 + = e = 2.7182... (nonamelimits)
x →∞ x

Tất cả những tùy chọn trên đều có tác dụng như khi ta dùng

R
\limits và \nolimits cho các chỉ số riêng biệt.
• leqno| reqnod Mặc định vị trí đánh số công thức ở bên phải
trang giấy, muốn đánh số bên trái hãy dùng tùy chọn leqno cho
gói lệnh này.
3.7. Tùy chọn của gói lệnh amsmath 115

• fneqn R Với tùy chọn này tất cả công thức đều được đẩy về bên
trái sát lề, khoảng cách từ lề đến công thức điều khiển bằng thông
số \mathindent. Không có tùy chọn này công thức luôn luôn căn
vào giữa.
CHƯƠNG 4

THÔNG BÁO LỖI

4.1. Những lỗi khi sử dụng LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117


4.1.1. Thông báo lỗi của TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
4.1.2. Thông báo lỗi của LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . 119
4.2. Các loại lỗi điển hình trong LATEX. . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.2.1. Lỗi lan truyền . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.2.2. Lỗi môi trường toán . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
4.2.3. Lỗi từ nhiều tệp trong một văn bản . . . . . . . . . . . . . . 123
4.3. Danh sách các lỗi của LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.3.1. Thông báo lỗi LATEX tổng quát . . . . . . . . . . . . . . . . . . . . 124
4.3.2. Lỗi từ gói lệnh của LATEX . . . . . . . . . . . . . . . . . . . . . . . . . 130
4.3.3. Lỗi phông LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
4.4. Thông báo lỗi của TEX. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
4.5. Những cảnh báo: Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.5.1. Cảnh báo tổng quát của LATEX . . . . . . . . . . . . . . . . . . . . 138
4.5.2. Cảnh báo gói lệnh của LATEX . . . . . . . . . . . . . . . . . . . . . 140
4.5.3. Cảnh báo phông của LATEX . . . . . . . . . . . . . . . . . . . . . . . 141
4.5.4. Cảnh báo của TEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
4.6. Phương pháp tìm lỗi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

Người học TEX chưa sử dụng tốt nó là do khi biên dịch từ tệp nguồn
sang tệp DVI hay bị lỗi. Nhiều khi lỗi đã làm nhiều người không kiên
trì học TEX được. Biên dịch TEX là một giai đoạn quan trọng tạo nên
văn bản. Trước sau rồi người làm văn bản cũng đối diện với một lỗi nào
đó do chính mình gây ra. Theo kinh nghiệm của chúng tôi văn bản TEX
phải dùng các cấu trúc có sẵn đơn giản càng tốt. Tạo văn bản thành các
khối rõ ràng, lệnh được đưa vào với ý đồ của mình. Bất cứ một lỗi nào
mà TEX hoặc LATEX thông báo đều có lý do và có thể khắc phục được.
Người có nhiều kinh nghiệm thì suy đoán ra ngay, còn không thì ta phải
trở lại tập nguồn để suy xét lại tác dụng của lệnh có lỗi đó. Chương này
chỉ liệt kê các lỗi có thể xảy ra và lý do để ta khắc phục nó.
4.1. Những lỗi khi sử dụng LATEX 117

4.1. Những lỗi khi sử dụng LATEX

4.1.1. Thông báo lỗi của TEX


Một văn bản đơn giản với một lệnh gõ vào sai như
' $
\documentclass[10pt,openany,reqno, twoside]{book}
\usepackage{vnfonts}
\begin{document}
Gõ sai ở lệnh vì nhầm \txetit{ phải nghiêng}.
\end{document}
& %
Ta cố tình đánh sai \txetit, lệnh đúng của nó là \textit. Khi biên
dịch LATEX gọi chương trình TEX và kiểm tra trong nó không thấy có
lệnh nào như vậy TEX thông báo và dừng lại:
 
! Undefined control sequence.
l.4 GG sai d l+nh v+ nhƯm \txetit
{ phƯi nghiơng}.
?_
 
Để bắt đầu thông báo lỗi TEX bắt đầu bằng ! và sau đó là loại lỗi
Undefined control sequence. nghĩa là lệnh không xác định, tiếp đến
cặp số 1.4 là tệp đầu tiên, tại dòng thứ 4, TEX còn trích một đoạn trên
dòng đó cho tới chỗ có lỗi thì xuống dòng. Rất tiếc khi chạy với tiếng
Việt câu TEX đưa ra không còn là mã tiếng Việt nữa. Một dấu ? và con
trỏ nhấp nháy chờ ta quyết định trả lời. Nhập vào dấu ? và nhấn phím
[Enter] thì TEXtrả lời
' $
Type <return> to proceed, S to scroll future
error,
R to run without stopping, Q to run quietly,
I to insert something, E to edit your file,
1 or...or 9 to ignore the next 1 to 9 tokens of
input,
H for help, X to quit.
?_
& %
Đây là thông báo chỉ dẫn của TEX cho khả năng hành động của
118 Chương 4. Thông báo lỗi

R
chúng ta nhấn một trong các phím sau:

Type <return> to proceed Nhấn phím [Enter] quá trình biên


dịch tiếp tục, sau khi tạm thời bỏ qua lỗi này với khả năng chấp
nhận được. Trong trường hợp đánh sai lệnh, lỗi sẽ được bỏ qua
và chạy tiếp. Chú ý nhiều lỗi nghiêm trọng TEX sẽ không cho qua
khi đó ta phải thoát ra khỏi chế độ biên dịch, bằng cách bấm X và

R
[Enter].
S to scroll future error messages TEX tiếp tục và thể hiện tất
cả thông báo cũng như lỗi trong khi biên dịch ra màn hình, nhưng
không dừng lại cho người dùng trả lời. Tùy chọn này tương

R
đương với nhấn phím [Enter] liên tiếp cho tất cả các lỗi xảy ra.
R to run without stopping TEX tiếp tục biên dịch như với bấm
S, nhưng thậm chí không dừng lại cả khi những tệp sau lệnh

R
\input hoặc \include không tìm thấy như trong trường hợp trên.
Q to run quietly Giống như trường hợp bấm R ở trên nhưng các

R
thông báo lỗi không đưa ra màn hình mà chỉ đưa vào tệp *.log.
I to insert something Lỗi có thể sửa bằng cách đưa trực tiếp
vào trên dòng lệnh từ bàn phím. Lỗi sẽ được sửa và quá trình
biên dịch tiếp tục. Cách sửa lỗi này chỉ có tác dụng trong quá
trình biên dịch, còn tệp nguồn không thay đổi gì cả, nên sau đó ta

R
phải mở tệp nguồn ra để sửa lại lỗi trong biên dịch.
1 or ... or 9 to ignore the next 1 to 9 tokens of input
Nhập vào một số từ 1 nhỏ hơn 100 sẽ xóa số lượng chữ cái và
lệnh từ những văn bản tạo ra chúng. Sau đó chương trình dừng

R
lại và chờ quyết định của người biên dịch.
H for help In ra những chỉ dẫn ngắn gọn về lỗi. Có thể có những

R
gợi ý dạng lỗi này hay xảy ra do đâu.
X to quit TEX dùng việc biên dịch và thoát ra ngoài, trong trường

R
hợp này không có tệp DVI kết quả.
E to edit your file Quá trình như X và thông báo dòng nào bị
lỗi, nhiều khi còn chuyển đến ngay dòng trong văn bản nguồn
đang có lỗi để ta sửa.
4.1. Những lỗi khi sử dụng LATEX 119

Khi ta gõ các chữ cái theo tùy chọn trên vào sau dấu hỏi, chỉ khi nào
nhấn phím [Enter] thì quá trình biên dịch mới thực hiện. Với lỗi ở trên
ta nhấn phím H hoặc h rồi [Enter] cho kết quả
' $
The control sequence at the end of the top line
of your error message was never \def’ed. If you
have
misspelled it (e.g.,‘\hobx’),type ‘I’ and the
correct
spelling (e.g., ‘I\hbox’). Otherwise just
continue,
and I’ll forget about whatever was undefined.

?_
& %
Nếu các bạn biết chút tiếng Anh thì đoạn mô tả trên kia sẽ cho ta
định hướng thấy lỗi vừa xảy ra và khắc phục nó. Giả sử ta biết được
lỗi do gõ vào lệnh sai, ta có thể đưa trực tiếp lệnh vào bằng cách nhấn
phím I và [Enter] thì ta gõ vào
insert>\textit
và nhấn [Enter], quá trình biên dịch sẽ tiếp tục.
Chú ý: Tất cả quá trình biên dịch của TEX đều được ghi lại trong tệp
có tên trùng với tên tệp nguồn nhưng phần đuôi là log. Ta có thể mở
tệp này ra xem để sửa các lỗi.
Nhiều khi những lỗi trước ảnh hưởng đến các lỗi sau đó, vậy khi
sửa lỗi phải sửa lần lượt các lỗi theo thứ tự mà TEX đã liệt kê. Nhiều khi
sửa một lỗi trước các lỗi sau đều được sửa do vậy ta nên sửa một số lỗi
và lại biên dịch.

4.1.2. Thông báo lỗi của LATEX

Hiện tại ta đang dùng LATEX 2ε đã được thiết kế khá kỹ về kiểm tra
lỗi. Một thông báo điển hình của nó thông qua ví dụ:
120 Chương 4. Thông báo lỗi
' $
\documentclass[10pt,openany,reqno, twoside]{book}
\usepackage{vnfonts}
\begin{document}
Ta có đẳng thức
\begin{equatoin}\label{eq:ch11}
a^2+b^2=c^2
\end{equation}
\end{document}
& %
Ta cố tình gõ sai tên môi trường \begin{equatoin}. LATEX biên dịch
sẽ cho thông báo:
' $
! LaTeX Error: Environment equatoin undefined.

See the LaTeX manual or LaTeX Companion for expl.


Type H <return> for immediate help.
...

l.5 \begin{equatoin}
\label{eq:ch11}
? _
& %
Dòng đầu tiên nói lên rằng LAT
EX phát hiện ra lỗi với chỉ dẫn ngắn về
lỗi, trong trường hợp cụ thể trên là Environment equatoin undefined
nghĩa là môi trường chưa được định nghĩa hoặc nói cách khác không
có môi trường này. LATEX thường đề nghị xem lại hướng dẫn sử dụng
LATEX cũng như LATEX với công cụ kèm theo. Tiếp theo là gợi ý nếu nhấn
H rồi [Enter] sẽ nhận thêm được trợ giúp tốt hơn. Cuối cùng là 1.5 là
dòng trong văn bản bị lỗi, sau từ lỗi LATEX sẽ ngắt đánh dấu lỗi tại đó.
LATEX chờ ta nhập những lệnh như liệt kê phần trên. Nếu ta gõ vào
H và nhấn [Enter] thì
' $
Your command was ignored.
Type I <command> <return>to replace it with
another
command, or <return> to continue without it.
? _
& %
Nghĩa là lệnh trong báo lỗi ở trên bỏ qua. Như vậy nếu ta nhấn I rồi
4.2. Các loại lỗi điển hình trong LATEX 121

gõ lệnh đúng vào \begin{equation} thì việc xử lý diễn ra đúng đắn.


Còn nhấn [Enter] thôi thì lệnh môi trường trên không có và như vậy
không thiết lập được môi trường toán do đó LATEX lại thông báo lỗi
' $
! Missing $ inserted.
<inserted text>
$
l.6 a^
2+b^2=c^2
? _
& %
Điều này cho ta thấy nếu không sửa lỗi trước thì phát sinh hàng loạt
các lỗi sau đó nếu ta chỉ nhấn [Enter]. Lỗi trên là một lỗi về môi trường
toán ta sẽ đề cập tới ở phần sau.

4.2. Các loại lỗi điển hình trong LATEX

4.2.1. Lỗi lan truyền

Như ví dụ trên cho thấy khi có lỗi không sửa ngay sẽ dẫn đến hàng
loạt các lỗi khác, nhưng thực chất đó không phải là lỗi mà do lỗi phía
trước ta không sửa nên nó lan truyền tiếp theo cho các lệnh sau. Ta lấy
một ví dụ chỉ thông báo lỗi của LATEX cũng phát hiện ra.
' $
\documentclass[10pt,openany,reqno, twoside]{book}
\usepackage{vnfonts}
\begin{document}
\begin{itemiz}
\item Khí kiêng nhất là: hung hăng.
\item Tâm kiêng nhất là: hẹp hòi.
\end{itemize}
\end{document}
& %
Khi biên dịch văn bản này cho ta lỗi
122 Chương 4. Thông báo lỗi
' $
! LaTeX Error: Environment itemiz undefined.

See the LaTeX manual or LaTeX Companion for expl.


Type H <return> for immediate help.
...
l.5 \begin{itemiz}

? _
& %
Nếu ta không sửa mà gõ [Enter] thì nhận được thông báo lỗi:
' $
! LaTeX Error: Lonely \item–perhaps a missing
list environment.
See the LaTeX manual or LaTeX Companion for expl.
Type H <return> for immediate help.
...
l.6 \item K
hí kiêng nhất là: hung hăng.
? _
& %
Lỗi chỉ ra \item không nằm trong môi trường nào cả, đáng lẽ ra phải
nằm trong một môi trường danh sách nào đó. Khi ta gõ H và [Enter] cho
sự trợ giúp không là bao nhiêu:
 
Try typing <return> to proceed.
If that doesn’t work, type X <return> to quit.
? _
 
Chỉ có cách là nhấn [Enter] và sau một số lần nhấn như vậy dẫn đến:
' $
! LaTeX Error:\begin{document} ended
by\end{itemize}.

See the LaTeX manual or LaTeX Companion for expl.


Type H <return> for immediate help.
...

l.9 \end{itemize}

? _
& %
4.2. Các loại lỗi điển hình trong LATEX 123

Nghĩa là môi trường itemize có kết thúc mà không có khởi đầu.


LATEX bao giờ cũng xem xét lệnh \begin và \end trong trường hợp này
thì bắt đầu và kết thúc của hai môi trường khác nhau.
Như vậy khi gặp thông báo lỗi mà ta chưa nắm được lỗi đó là gì thì
hãy cứ gõ [Enter] một số lần để có thể tìm thấy những thông báo liên
quan đến lỗi. Sau đó ta thoát ra khỏi biên dịch để sửa lỗi. Cũng có cách
là khi ta gặp lỗi nhấn kí tự S và sau đó [Enter], LATEX sẽ không dừng
nhưng các thông báo đều được liệt kê trong tệp *.log và từ đó ta tìm ra
lỗi.

4.2.2. Lỗi môi trường toán

Văn bản phần lớn là môi trường văn bản, nhưng có nhiều phần đưa
vào môi trường toán, mỗi lần như vậy phải mở và đóng môi trường
toán. Lỗi này thường hay mắc khi có rất nhiều kí tự toán học liền nhau
trên một dòng, TEX có thông báo là:
' $
! Missing $ inserted.
<inserted text>
$
1.8
?_
& %
Nhiều khi vị trí thông báo đóng mở của môi trường toán không
đúng vị trí, vì trong một dãy đóng mở môi trường toán thì TEX cứ ghép
đôi một đến khi thiếu đôi thì TEX mới thông báo lỗi thì đã ở vị trí khác
rồi. Ngoài ra những kí hiệu bắt buộc phải trong môi trường toán mà
chưa mở môi trường toán thì TEX sẽ thông báo ngay như ^, _, ...
Hoàn toàn tương tự những lỗi cho kí hiệu nhóm { ... }, khi TEX
không tìm thấy sự đóng mở nhóm sẽ có thông báo thiếu ngay dấu {
hoặc }.

4.2.3. Lỗi từ nhiều tệp trong một văn bản

Một văn bản dài người ta thường chia ra thành nhiều tệp và được
đọc vào tệp chính bởi lệnh \input hoặc \include. Số dòng trong thông
báo lỗi được tính trong tệp đang xử lý, khi nhấn E và [Enter] thì chương
124 Chương 4. Thông báo lỗi

trình soạn thảo mở ra tệp có lỗi để sửa. Cũng có thể phải mở tệp *.log
ra để
' xem lỗi như $
..(mila.tex [1] [2] [3] (mila0.tex [4] [5])
(mila1.tex [6] [7]
! Undefined control sequence
1.97 \sect
?_
& %
Ta có thể hiểu dòng thông báo trên là tệp chính là mila.tex có ba
trang, sau đó là gọi tệp mila0.tex vào có hai trang không lỗi, gọi đến
tệp mila1.tex thì có lỗi là lệnh \sect chưa được định nghĩa tại dòng
thứ 97 của tệp mila1.tex. Nếu ta chữa xong lỗi chạy tiếp lại gặp lỗi
#
[7] [8] [9]
! Too many }’s
1. 254 \bf Mùa hoa doi}
?_
" !
Trong tệp này lại có lỗi tại dòng 254, do không mở ngoặc nhọn {, đó
là tại trang thứ 10 của toàn văn bản.

4.3. Danh sách các lỗi của LATEX


Thông báo lỗi của LATEX được liệt kê dưới đây theo vần chữ cái.
Danh sách được chia ra thành từng phần như lỗi chung chung, lỗi từ
gói lệnh, lỗi do phông chữ, ... Trong mỗi thông báo có mô tả khả năng
xảy ra cách giải quyết. Khi tra cứu lỗi trong bảng các danh mục từ khóa
ở cuối sách bạn đọc tra trước tiên chữ LaTeX Error: sau đó là những
cụm từ báo lỗi đầu tiên.

4.3.1. Thông báo lỗi LATEX tổng quát


! LaTeX Error: ... undefined.
Gõ sai lệnh hoặc môi trường, đối số của các lệnh \renewcommand
hoặc \renewenvironment chưa được định nghĩa. Ta dùng
\new... để định nghĩa lại.
! LaTeX Error: \< in mid line.
4.3. Danh sách các lỗi của LATEX 125

Lệnh \< trong môi trường tabbing xuất hiện ở giữa dòng. Lệnh
này có lẽ chỉ có ở đầu dòng.
! LaTeX Error: Bad \line or \vector argument.
Đối số đầu tiên của \line và \vector được cho không đúng.
! LaTeX Error: Bad math environment delimiter.
LATEX đã đếm lệnh đóng mở môi trường toán và phát hiện ra
không đúng, thừa hoặc thiếu hoặc là \[, \( chuyển sang môi
trường toán, hoặc \], \) chuyển sang môi trường văn bản. Hoặc
là trong môi trường toán có {...} hoặc nhiều cặp ngoặc nhọn này
không đúng.
! LaTeX Error: \begin{...} on input line ... ended by
\end{...}.
LATEX đếm lệnh \end không có tương ứng với \begin của cùng
môi trường. Điều này có thể xảy ra khi gõ nhầm tên của môi
trường, hoặc môi trường trước không đóng \end. Để tránh lỗi
này khi bắt đầu gõ \begin thì ngay lập tức ta gõ vào \end sau đó
mới điền nội dung bên trong môi trường. Đặc biệt là nhiều môi
trường lồng nhau thì cách này rất cần thiết.
! LaTeX Error: Can be used only in preable.
Rất nhiều lệnh chỉ được gọi trong phần đầu văn bản
như \documentclass, \usepackage, \nofiles \includeonly,
\makeindex, ... Một số lệnh chỉ có nghĩa và tác dụng trong tệp lớp
văn bản hoặc tệp gói lệnh như \ProvideClass, \ProvidePackage
cũng như các lệnh \Declare... hoặc \Set... chỉ cho phép đặt ở
phần đầu. Nếu các lệnh trên đặt sau \begin{document} thì thông
báo lỗi trên lập tức xuất hiện.
! LaTeX Error: Command ... invalid in math mode.
Lệnh được đặt trong môi trường toán nhưng nó lại chỉ có nghĩa
trong môi trường văn bản như \item hoặc \circle. Những lệnh
về phông trong LATEX 2ε \itshape, \bfseries, ... cũng sinh ra lỗi
này khi đặt chúng vào môi trường toán, khi đó ta phải thay bằng
các lệnh \mathit, \mathbf.
126 Chương 4. Thông báo lỗi

! LaTeX Error: Command ... already defined.


Người dùng đã định nghĩa lại những lệnh đã có trong
LATEX hoặc trước đó đã dùng lệnh \newenvironment,
\newcommand, \newtheorem, \newsavebox, \newfont,
\newlength, \newcounter, \DeclareMathAlphabet. Khi đó
ta chọn một tên khác hoặc dùng lệnh định nghĩa lại đè lên nội
dung lệnh trước đó.
! LaTeX Error: Command ... undefined in encoding ...
Lệnh chỉ ra rằng đã được định nghĩa trong \DeclareTextCommand
cho một bộ mã hóa nào đó của NFSS (ví dụ OT1) nhưng với mã
hóa khác (như T1) chưa được định nghĩa và đưa vào hoạt động.
! LaTeX Error: Counter too large.
Số đếm để in ra các kí tự chứa giá trị lớn hơn 26.
! LaTeX Error: Environment ... undefined.
LATEX đã phát hiện sau lệnh \begin với môi trường không biết tên.
Điều này có thể là gõ nhầm. Trong khi chạy có thể nhấn I để chữa
lại tên môi trường, nhưng sau đó phải vào tệp nguồn để chữa lại.
! LaTeX Error: File ’...’ not found
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: ...)
Enter file name:_
Tệp được gọi vào bằng các lệnh \input hoặc \include hoặc
\usepackage, nhưng LATEX không tìm thấy tệp. Ta có thể gõ vào
một tên tệp khác, hoặc thoát hoặc tiếp tục thiếu tệp này. Nhiều
trường hợp bắt buộc phải gõ tên tệp vào TEX mới chạy tiếp. Trong
những trường hợp như thế này ta gõ vào tệp null.tex để qua
được dòng này.
! LaTeX Error: Float(s) lost.
Môi truờng figure, table hoặc lệnh \marginpar đưa vào trong
hộp dọc (ví dụ như trong môi trường \parbox, minipage) LATEX đã
thấy rằng đã có rất nhiều dòng trong hộp dọc. Kết quả là những
số của hình, bảng hoặc là chỉ số chú thích có thể bị mất không in
4.3. Danh sách các lỗi của LATEX 127

ra được.
! LaTeX Error: Illegal character in array arg.
Môi trường tabular hoặc array có chứa cột có định dạng kí tự
chưa biết hoặc là thực thể định dạng trong đối số thứ hai của
lệnh \multicolumn bị sai.
! LaTeX Error: \include cannot be nested.
Đã dùng lệnh \include nhập một tệp vào, nhưng chính tệp này
trước đó đã là tệp được nhập vào bằng \include. Chú ý tất cả
những tệp được đưa vào chỉ thông qua một tệp chính. Khi nhập
nhiều tầng ta nên dùng lệnh \input.
! LaTeX Error: LaTeX2e command ... in LaTeX 2.09 document.
Lỗi này xảy ra nếu những lệnh trong LATEX 2ε được dùng trong
định dạng của LATEX kiểu cũ có lệnh khởi đầu là \documentstyle
(phiên bản 2.09). Ta nên thay lại bằng kiểu mới \documentclass.
Nhất là các lệnh \LaTeXe, \usepackage, \ensuremath không thể
chạy trong định dạng kiểu cũ. Ngoài ra LATEX 2.09 có nhiều lệnh
không mạnh bằng phương án mới.
! LaTeX Error: Lonely \item --perhaps a missing list
environment.
Lệnh \item nằm ngoài môi trường danh sách. Có thể tên môi
trường bị gõ vào sai hoặc quên không có lệnh \begin.
! LaTeX Error: Missing @-exp in array arg.
Đối số định dạng theo cột của môi trường tabular hoặc array
chứa ký hiệu @ không có đủ hai dấu ngoặc nhọn { } hoặc là
chính điều trên xảy ra với đối số thứ hai của lệnh \multicolumn.
! LaTeX Error: Missing \begin{document}.
Hoặc là lệnh \begin{document} bị quên hoặc có những lệnh chỉ
được ở phần mở đầu mà lại được đưa vào sau lệnh trên. Trường
hợp xấu hơn có những lệnh khai báo không đúng cú pháp như
đối số thiếu một trong các dấu { } hoặc lệnh ở phần đầu mà
thiếu dấu \.
! LaTeX Error: Missing p-arg in array arg.
128 Chương 4. Thông báo lỗi

Đối số định dạng cột của môi trường tabular và array có chứa
kí hiệu p không cho độ rộng như đối số của nó hoặc là chính điều
trên xảy ra với đối số thứ hai của lệnh \multicolumn.
! LaTeX Error: No counter ’...’ defined.
Lệnh \setcounter hoặc \addtocounter được gọi để gán vào tên
số đếm, nhưng tên số đếm đó không có. Thường là gõ vào tên
số đếm sai. Nếu lỗi này xảy ra khi chạy lại để lấy tệp *.aux vào
và tên của số đếm đúng rồi thì định nghĩa số đếm bằng lệnh
\newcounter đã được đặt ở ngoài phần mở đầu văn bản. Ta luôn
luôn định nghĩa số đếm tại phần mở đầu văn bản.
! LaTeX Error: No \title given.
Lệnh \maketitle được đặt trước \title, đáng lẽ phải ngược lại.
! LaTeX Error: Not in outer par mode.
Môi trường figure, table và lệnh \marginpar đặt trong môi
trường toán hoặc bên trong một môi trường hộp dọc khác như
\parbox hoặc minipage. Trước tiên kiểm tra xem lệnh chuyển đổi
môi trường toán có quên không.
! LaTeX Error: Page height already too large.
Lệnh \enlargethispage cố gắng mở rộng trang theo chiều dọc
trang, nhưng LATEX đã xem nó như là dài quá rồi.
! LaTeX Error: \pushtabs and \poptabs don’t match.
Số của lệnh \poptabs trong môi trường \tabbing không thống
nhất với số của lệnh pushtabs trước đó.
! LaTeX Error: Something’s wrong--perhaps a missing \item.
Văn bản trong các môi trường danh sách list, itemize,
enumerate, description không bắt đầu trong các lệnh \item,
mà ở trước cả chúng. Cũng có thể xảy ra với môi trường
thebibliography nhưng với đối số {<nhãn sách>}.
! LaTeX Error: Suggested extra height (...) dangerously
large.
Lệnh \enlargethispage cố gắng mở rộng trang theo chiều dọc
trang hơn là LATEX có thể cho phép.
4.3. Danh sách các lỗi của LATEX 129

! LaTeX Error: Tab overflow.


Lệnh cuối cùng \= trong môi trường tabbing vượt quá số cực đại
dấu bảng dừng mà LATEX cho phép.
! LaTeX Error: There’s no line here to end.
Lệnh \newline, hoặc \\ sau lệnh \par hoặc sau dòng trắng, điều
này không có nghĩa. Muốn cho nhiều khoảng trắng dọc ta phải
cho vào lệnh \vspace.
! LaTeX Error: This may be a LaTeX bug.
LATEX đã bị lẫn lộn, lộn xộn, nguyên nhân là những lỗi trước không
khắc phục. Ta có thể thoát ra và sửa lại các lỗi trước đó. Trường
hợp không thể khắc phục được, có thể là lỗi chính trong phần
mềm LATEX, người ta khuyến cáo là nếu lỗi nghiêm trọng phải ghi
lại và gửi đến các trung tâm nghiên cứu về TEX để họ xem xét.
! LaTeX Error: Too deeply nested.
Rất nhiều môi trường danh sách lồng vào nhau được. Độ lồng sâu
vào nhau không quá 4 lần. Khi lỗi này xảy ra ta xem lại các môi
trường lồng nhau này.
! LaTeX Error: Too many columns in eqnarray environment.
Môi trường eqnarray có thể chỉ có ba cột trên một dòng. Có thể
ta bắt đầu môi trường bằng \\ hoặc là dấu & đặt ra nhiều hơn trên
một dòng.
! LaTeX Error: Too many unprocessed floats.
Có thể đặt kí hiệu ngoài lề \marginpar quá nhiều trên một trang.
Nhưng khả năng nhiều hơn là quá nhiều môi trường figure hoặc
table trên một trang. Khi đó ta phải tách ra một khoảng văn bản
cho mỗi môi trường. Hoặc ta thêm lệnh \clearpage cũng như
\cleardoublepage sau đó là các lệnh môi trường trên.
! LaTeX Error: Undefined tab position.
Lệnh \>, \+, \- hoặc \< trong môi trường tabbing cố gắng chuyển
tới chỗ đánh dấu bảng nhưng không có.
! LaTeX Error: \verb ended by end of line.
Văn bản trong lệnh \verb!...! lớn hơn một dòng khi nhập vào.
130 Chương 4. Thông báo lỗi

Trong lệnh này cố gắng giữ văn bản trên một dòng gõ vào thôi.
! LaTeX Error: \verb illegal in command argument.
Lệnh \verb không được dùng trong đối số của một lệnh khác,
ngoài lệnh \index và \glossary. Ví dụ lệnh này không dùng
trong lệnh tiêu đề chạy hoặc các ghi chú.

4.3.2. Lỗi từ gói lệnh của LATEX


Những lệnh đặc biệt cho tệp lớp hoặc gói lệnh có tập hợp những
thông báo lỗi riêng. Nếu có những lỗi xảy ra với các tệp này ta xem lại
các báo cáo về lớp và gói lệnh này hoặc liên lạc với tác giả các gói lệnh.
Thường mỗi gói lệnh hoặc lớp lệnh có những thông báo riêng,
thường là tên của lớp và gói lệnh đi kèm. Ví dụ gói lệnh mypack có
thể in ra thông báo lỗi:
Package mypack Error: cannot mix options ’good’ (mypack)
and ’bad’.
Có thể có hướng dẫn thêm khi ta nhấn H và [Enter].

! LaTeX Error: \LoadClass in package file.


Trong tệp gói lệnh lại có lệnh gọi lớp \LoadClass, điều này không
được phép, một lớp mới có thể gọi một lớp khác.
! LaTeX Error: Option clash for package ...
Một gói được gọi hai lần tùy chọn. Một tệp gói lệnh chỉ được
gọi vào một lần và lần thứ hai bị bỏ qua. Như vậy nếu lệnh
\usepackage và \RequirePackage gọi vào cùng một tệp và có
cùng tùy chọn thì dẫn đến đối nghịch nhau. Ta có thể tiếp tục
chạy và gõ vào H thì sẽ thấy hai tệp tùy chọn khác nhau.
! LaTeX Error: \RequirePackage or \LoadClass in Option
Section.
Hai lệnh này có thể không xuất hiện trong định nghĩa của tùy
chọn lớp hoặc gói lệnh được làm bởi lệnh \DeclareOption. Thay
vào tùy chọn này phải đặt cờ hoặc biến chỉ dẫn để sau đó kiểm
tra lệnh thực hiện.
! LaTeX Error: This file needs format ’...’ but this is
4.3. Danh sách các lỗi của LATEX 131

’...’
Lệnh \NeedsTexXFormat chỉ ra những định dạng khác nhau về
gói LATEX người ta dùng. Định dạng thường là những tập lệnh xác
định loại lệnh của TEX để chạy. Ví dụ với LATEX 2ε thì định dạng
của nó là LaTeX2e.
! LaTeX Error: Two \documentclass or \documentstyle
commands.
Văn bản có thể chỉ chứa một trong hai lệnh \documentclass hoặc
\documentstyle. Nếu ta lấy một lệnh làm chính thì hãy kiểm tra
xem trong một tệp khác của ta có chứa loại kia không, nếu có là
không được.
! LaTeX Error: Two \LoadClass commands.
Tệp lớp chứa hơn một lệnh \LoadClass, điều này không cho phép.
Ta phải sửa lại lớp tệp lớp.
! LaTeX Error: Unknown option ’...’ for package ’...’
Một tùy chọn tệp được chỉ ra trong lệnh \usepackage nhưng lại
không có gói lệnh này.
! LaTeX Error: \usepackage before \documentclass.
Lệnh \usepackage không được xuất hiện trước lệnh
\documentclass. Lớp văn bản cần được đưa vào trước khi
đưa gói lệnh vào sau.

4.3.3. Lỗi phông LATEX

Những lệnh sau đây xuất hiện liên quan đến việc định nghĩa phông
mới. Một số lỗi chỉ ra những phông định nghĩa không có tính chất đã
đặt, nghĩa là tệp mô tả phông bị hỏng hoặc chứa lỗi.

! LaTeX Error: ... allowed only in math mode.


Lệnh chữ cái trong toán lại dùng trong môi trường văn bản. Có
thể đã quên không đưa dấu $ vào.
! LaTeX Error: Command ... not defined as a math alphabet.
Tên của phông chữ cái toán không tồn tại khi mà chỉ ra bằng
132 Chương 4. Thông báo lỗi

lệnh \Set... hoặc Declare... mà lấy chữ cái toán như là


một đối số. Tên của chữ cái toán phải khai báo bằng lệnh
\DeclareMathVersion trước khi dùng nó.
! LaTeX Error: Command ... not provided in base LaTeX2e.
Số của kí hiệu vốn là một phần của LATEX 2.09, nhưng không có
trong nguyên bản TEX, nhưng cũng không phải tự động được
cập nhật vào LATEX 2ε . Hãy thêm những gói lệnh \latexsym hoặc
amsfonts.
! LaTeX Error: \DeclareTextComposite used on inappropriate
com ... Lệnh \DeclareTextComposite được dùng định nghĩa
lại những chữ cái có dấu cho một mã hóa nào đó. Nếu lệnh làm
dấu trước đó không có, thì thông báo này xuất hiện.
! LaTeX Error: Encoding scheme ’...’ unknown.
Khai báo phông hoặc lệnh chọn phông tham chiếu tới hệ thống
mã hóa không có. Có thể là gõ vào nhầm tên.
! LaTeX Error: Font family ’...’ unknown.
Lệnh \DeclareFontShape được khai báo cho một bộ mã hóa
phông và những họ phông tổ hợp lại không được khai báo bằng
lệnh \DeclareFontFamily.
! LaTeX Error: Font ... not found.
Phông với tính chất đã chỉ ra không tìm thấy, có thể không có
phần thay thế. Phông được định nghĩa bằng \DeclareErrorFont
được thay thế.
! LaTeX Error: Math alphabet identifier ... is undefined
in math version ’...’.
Chữ cái trong toán đã không được định nghĩa cho phiên
bản toán được gọi. Nghĩa là những chữ cái được tạo ra bởi
\DeclareMathAlphabet không có tính chất định dáng, nhưng
không khai báo bằng \setMathAlphabet cho phiên bản phông
toán đã chọn.
! LaTeX Error: Math version ’...’ is not defined.
Tên của phiên bản toán được chỉ ra một trong các lệnh \Set...
4.3. Danh sách các lỗi của LATEX 133

và \Declare... không tồn tại. Tên phiên bản cần được khai báo
bằng lệnh \DeclareMathVersion trước khi dùng.
! LaTeX Error: ***NFSS release 1 command ... found
***Recovery not possible, Use ...
Lệnh từ phiên bản đầu tiên của NFSS đã được dùng nhưng không
còn giá trị nữa. Phải tìm những lệnh đã được thay thế mới.
! LaTeX Error: Not a command name ’...’
Đối số thứ nhất của \DeclareMathAccent phải là tên lệnh, ví dụ
như \acute. Rất hay quên dấu \ trong lệnh.
! LaTeX Error: Symbol font ’...’ not defined.
Tên của phông kí hiệu không tồn tại mà được chỉ ra trong các lệnh
\Set... hoặc \Declare.... Kí hiệu cần được khai báo bằng lệnh
\DeclareSymbolFont trước khi dùng kí hiệu.
! LaTeX Error: The font size command \normalsize is not
defined:
there is probably something wrong with class file.
Điều cần thiết những tệp lớp phải định nghĩa \normalsize, là cỡ
cơ bản cho văn bản tiêu chuẩn trong văn bản. Nếu trong tệp lớp
không làm điều này phải sửa lại. Thông báo này cũng xuất hiện
nếu lệnh \documentclass bị biến mất hoặc không có.
! LaTeX Error: This NFSS system isn’t set up properly.
Có sai sót trong tệp định nghĩa phông *.fd hoặc phông không hợp
lệ trong khai báo \DeclareErrorFont. Đây là lỗi rất nặng phải báo
cáo lại với người quản lý hệ thống.
! LaTeX Error: Too many math alphabets used in version ...
Có giới hạn 16 khả năng chữ cái toán học, số được đặt bởi TEX.
Những định nghĩa chữ cái toán khác thêm vào được bỏ qua.
! LaTeX Error: Unknown symbol font ’...’
Tên của kí hiệu phông không tồn tại nhưng lại được khai báo bởi
lệnh \DeclarSymbolFontAlphabet. Tên phông kí hiệu cần được
khai báo bằng lệnh \DeclareSymbolFont trước khi dùng.
134 Chương 4. Thông báo lỗi

4.4. Thông báo lỗi của TEX


Phần này ta liệt kê các thông báo lỗi do TEX sinh ra, cũng được sắp
xếp theo thứ tự chữ cái. Rất nhiều lỗi cũng gần giống như là LATEX đã
thông báo. Nhưng nó bắt đầu bằng kí hiệu chấm ! sau đó là dòng thông
báo lỗi ngay. Tra cứu trong danh mục từ khóa bắt đầu bằng chữ TeX
Error và sau đó là câu thông báo lỗi.

! Counter too large.


Kí hiệu ghi chú bằng chữ cái hoặc kí hiệu đặc biệt chỉ có nhiều
nhất tương ứng là 26 và 9, trong khi đó lại dùng số lớn hơn những
ghi chú trong văn bản. Lệnh này cũng có thể xảy ra khi ta dùng
quá nhiều lệnh \thanks.
! Double subscript.
Trong môi trường toán không chấp nhận có hai chỉ số dưới liên
tiếp cho cùng một biến. Ví dụ $x_2_5$ hoặc $y_{4}_{7}$ là
không được, mà phải là $x_{2_5}$ hoặc $y_{4_{7}}$.
! Double superscript.
Trong môi trường toán không chấp nhận làm hai chỉ số mũ liên
tiếp cho một biến. Ví dụ $x^5^3$ là không được mà phải là
$x^{5^3}$.
! Extra alignment tab has been changed to \cr.
Trên mỗi dòng của môi trường tabular hoặc array đều chứa kí
hiệu & đánh dấu cột. Lỗi này xảy ra do gõ vào & nhiều quá hoặc
quên đánh dấu hết dòng \\.
! Extra , or forgotten $.
Trong môi trường toán đã mở { nhưng đến hết môi trường toán
dấu ngoặc nhọn đó không có dấu } tương ứng. Cũng có thể
những dấu chuyển môi trường như $, \[ hoặc \( đã bị quên.
! Font ... not loaded: Not enough room left.
Văn bản đang xử lý đòi hỏi nhiều phông kí tự được gọi vào bộ
nhớ, nhưng bộ nhớ lại có hạn. Trong trường hợp này có thể chia
văn bản thành từng phần và xử lý riêng.
4.4. Thông báo lỗi của TEX 135

! I can’t find file ’...’


TEX thông báo là không tìm thấy tệp muốn đưa vào ở thư mục
hiện thời, có thể đã được chuyển đi chỗ khác. Sau đó xuất hiện
dòng lệnh
Please type another input file name:_
chờ ta gõ tên tệp mới vào, nếu muốn thoát ra để tìm tệp rồi tính
sau thì phải gõ vào một tên nào đó ví dụ như null.tex để có thể
thoát được chế độ biên dịch và câu hỏi này.
! Illegal parameter number in definition of ...
Lỗi này do ta dùng các lệnh định nghĩa như \newcommand,
\newenvironment,... trong nó việc thay kí hiệu # đã không áp
dụng đúng. Loại kí hiệu chỉ xuất hiện ở dạng #n với n là 1 và
các số đối số được chỉ trong lệnh. Ngược lại kí hiệu # có thể chỉ
xuất hiện trong định nghĩa như \#. Lỗi cũng có thể xảy ra trong
đối số phần sau của định nghĩa môi trường.
! Illegal unit of measure (pt inserted).
Nếu lỗi này xuất hiện sau lỗi khác như
! Mising number, treated as zero.
thì lỗi nằm ở lỗi trước đó. Ngược lại TEX phát hiện ra đã dùng
lệnh độ dài không ghi rõ đơn vị độ dài bên cạnh. Có trường hợp
sử dụng lệnh quên cho độ dài cụ thể.
! Misplaced alignment tab character &.
Lệnh kí tự & được đặt ra ngoài môi trường bảng tabular và array.
Chú ý khi muốn in ra kí tự này phải gõ vào \&. Lỗi này có thể khắc
phục tạm thời trong khi chạy là nhấn I và gõ lệnh vào.
! Missing control sequence inserted.
Lỗi thường xảy ra với \newcommand, \renewcommand, \newlength
hoặc \newsavebox trong nó đối số thứ nhất thường bị quên dấu \.
Ta có thể nhấn [Enter] tiếp tục, TEX xử lý tiếp và coi như đã thêm
dấu lệnh trên vào rồi.
! Missing number, treated as zero.
Lệnh LATEX có đối số là độ dài hoặc một số bị thiếu. Lỗi cũng xảy
136 Chương 4. Thông báo lỗi

ra với lệnh đối số tùy chọn sau đó văn bản lại bắt đầu bằng [.
Cũng có thể do lệnh \protect đứng trước một độ dài hoặc lệnh
\value.
! Missing inserted; ! Missing inserted
Đây là lỗi gõ vào bị thiếu lệnh đối xứng đóng hoặc mở. Dòng xảy
ra lỗi này trong thông báo có khi không đúng. Nếu không nghiêm
trọng thì ta có thể nhấn [Enter] tiếp tục. Nếu những dấu này nằm
trong môi trường toán thì phải thoát ra để sửa ngay.
! Missing $ inserted.
Rất nhiều kí hiệu phải nằm trong môi trường toán. Nghĩa là phải
mở và đóng môi trường toán cho các kí hiệu này. Nếu trong môi
trường toán đưa vào văn bản phải dùng lệnh \mbox{...}.
! Not a letter.
Danh sách từ trong \hyphenation chứa kí tự không công nhận là
chữ cái ví dụ như lệnh \’{e}. Khi đó những từ này có thể chỉ ngắt
bằng cách đưa vào dấu ngắt tường minh.
! Paragraph ended before ... was complete.
Đối số của một lệnh chứa dòng trắng hoặc lệnh \par, hoặc những
thứ khác không cho phép trong đối số. Cũng có thể dấu } bị thiếu.
! Tex capacity exceeded, sorry [...].
TEX có đặt một số bộ nhớ đệm để khi xử lý thực hiện trên đó. Lỗi
này xảy ra là do một trong bộ nhớ đệm bị đầy và không dùng được
nữa. Tên của bộ nhớ đệm được in ra trong dấu ngoặc vuông trong
thông báo. Với thông báo này TEX dừng lại và thoát ra ngoài. Có
thể máy không đủ bộ nhớ, nhưng nguyên nhân chính nằm trong
tệp nguồn. Ta sẽ dùng phương pháp hạn chế tập nguồn để tìm
ra điểm mắc lỗi. Sau đây là tên những bộ nhớ đệm mà TEX dùng
trong khi hoạt động:

buffer size
exception dictionary
hash size
input stack size
4.5. Những cảnh báo: Warnings 137

main memory size


pool size
save size

! Text line contains an invalid character.


Văn bản tệp nguồn chứa kí hiệu mà TEX không nhận ra. Có thể
chương trình soạn thảo văn bản có đưa một số kí tự đặc biệt vào,
nhiều khi ta không nhìn thấy kí tự này trên màn hình soạn thảo,
bằng mọi cách phải xóa kí hiệu không nhìn thấy này.
! Undefined control sequence.
Đây là do lỗi đánh lệnh vào không đúng. Có thể sửa trong khi
chạy TEX nhưng sau đó phải mở tệp nguồn ra sửa.
! Use of ... doesn’t match its definition.
Nếu ’...’ là tên lệnh của LATEX thì có thể gọi lệnh với những đối
số không đúng. Nếu tên của nó là \@array thì do môi trường
tabular hoặc array sinh ra.
! You can’t use ’macro parameter #’ in ... mode.
Kí tự đặc biệt # đã dùng trong chế độ văn bản bình thường, điều
đó không thể được. Muốn in ra kí tự này phải gõ vào \#. Lỗi này
cũng có thể khắc phục trong khi chạy TEX bằng cách nhấn I rồi
đưa lệnh này vào, nhưng sau đó phải mở tệp nguồn ra sửa.

4.5. Những cảnh báo: Warnings


Trong khi xử lý tệp văn bản nguồn TEX và LATEX phát hiện ra lỗi
không đúng cú pháp và dừng lại để người dùng xử lý và xem xét, khắc
phục. Nhưng có nhiều lỗi TEX và LATEX cố gắng khắc phục lấy và thông
báo cho người dùng cần thiết phải sửa lại sau. TEX và LATEX không dừng
lại ở những lỗi như vậy và tiếp tục quá trình của mình. Nhưng những
thông báo có đưa ra màn hình đều được ghi vào tệp *.log, ta muốn sửa
thì mở tệp đó ra và tra lại tại những dòng cảnh báo cần sửa để khắc
phục.
138 Chương 4. Thông báo lỗi

4.5.1. Cảnh báo tổng quát của LATEX

LATEX cảnh báo bao giờ cũng bắt đầu bằng LaTeX Warning: sau đó
là nội dung của thông báo và trong danh mục từ khóa cũng tra từ LaTeX
Warning: và sau đó là nội dung cảnh báo.

LaTeX Warning: Citation ’...’ on page .. undefined on


input line ...
Từ khóa trong \cite không được định nghĩa tương ứng với lệnh
\bibitem.
LaTeX Warning: Citation ’...’ undefined on input line ...
Từ khóa trong \notice đã không được định nghĩa.
LaTeX Warning: Command ... has changed.
Check if current package is valid.
Mệnh đề \CheckCommand được dùng kiểm tra nếu lệnh đã cho có
định nghĩa nào đó. Thông báo này xảy ra nếu sự kiểm tra là sai.
Điều này dùng khẳng định một gói lệnh đã cho đang làm cái gì
mà người lập trình nghĩ là nó đang làm.
LaTeX Warning: Float too large for page by ...pt on input
line ...
Môi trường di động figure hoặc table là quá lớn đối với một
trang. Nó có thể luôn luôn in ra được nhưng sẽ mở rộng ra ngoài
lề so với trang bình thường.
LaTeX Warning: ’h’ float specifier changed to ’ht’.
Điều chỉ ra đặt chỗ di động ’h’ cho ’here’ không thực tế vị trí của
môi trường di động. LATEX sẽ đặt ’here’ tại vị trí này nếu có đủ chỗ
trống còn không thì đặt vào đầu trang sau. Thông báo này theo
nghĩa như vậy.
LaTeX Warning: inputting ’...’ instead of obsolete ’...’.
Một số gói lệnh được viết từ phiên bản LATEX cũ như article.sty
cho LATEX 2.09, bây giờ đã có tệp tương đương mới với tên khác
như article.cls. Những tệp với tên cũ thường đưa ra cảnh báo
này, nên thay chúng bằng những tệp mới.
4.5. Những cảnh báo: Warnings 139

LaTeX Warning: Label ’...’ multiply defined.


Hai lệnh làm nhãn \label hoặc \bibitem xác định đánh dấu
nhãn có cùng tên. Thậm chí ta đã sửa rồi vẫn còn in ra một lần
nữa cảnh báo này và lần chạy đó nó vẫn lấy dữ liệu từ tệp *.aux.
Nhưng sau một lần nữa thì không còn cảnh báo nữa mới đúng.
LaTeX Warning: Label(s) may have changed.
Return to get cross-references right.
In ra từ \ref, \pageref và \cite có thể không đúng vì trong quá
trình xử lý giá trị nhãn đã bị thay đổi. LATEX phải chạy hơn một
lần thì giá trị mới được dùng đúng.
LaTeX Warning: Marginpar on page ... moved.
Chú thích bên lề trên một trang đã bị thay đổi và chuyển xuống
dưới quá gần chú thích bên lề khác. Nghĩa là chú thích bên lề đó
không phải ở bên cạnh văn bản cần chú thích ở bên lề mà ở đó có
đặt lệnh \marginpar.
LaTeX Warning: No \author given.
Lệnh \maketitle không đưa ra trước lệnh \author. Ngược lại
thiếu lệnh \title, đây không phải là lỗi, nhưng như vậy cũng
không bình thường. Thông báo này cũng sinh ra khi ta không chỉ
ra tác giả.
LaTeX Warning: Optional argument of \twocolumn too tall on
page.
Lệnh \twocolumn bắt đầu một trang mới và chuyển sang định
dạng hai cột. Văn bản trong tùy chọn của lệnh trên được in trải ra
cả hai cột. Nếu văn bản tùy chọn này quá lớn hơn cả một trang thì
thông báo trên được đưa ra.
LaTeX Warning: Oval too small on input line ...
Cỡ được chỉ ra trong lệnh \oval là rất nhỏ cho LATEX tìm một phần
tư đường tròn thích hợp cho nó.
LaTeX Warning: \oval, \circle, or \line size unavailable
on input line ... Cỡ được chỉ ra trong \oval, \circle hoặc
\line trong môi trường picture quá nhỏ cho LATEX in ra.
140 Chương 4. Thông báo lỗi

LaTeX Warning: Reference ’...’ on page ... undefined on


input line ...
Những nhãn trong lệnh \ref hoặc \pageref đã không định nghĩa
bằng \label trong lần biên dịch trước đó. Thông báo này không
biến mất khi \label chưa được đưa vào.
LaTeX Warning: Text page ... contains only floats.
Thông báo chỉ ra rằng đối số cơ động có những văn bản bị loại bỏ
khỏi trang đã chỉ ra. Điều này không phải là tồi, nhưng phải xem
lại thực tế văn bản đó đặt ở đâu.
LaTeX Warning: There were multiply-defined labels.
Thông báo này in ra khi kết thúc biên dịch nếu bất kỳ lệnh \label
và \bibitem dùng cùng một nhãn gán số. Thông báo này cũng
được thể hiện gần những lệnh trên khi nhãn lặp lại.
LaTeX Warning: There were multiply-defined references.
Khi kết thúc biên dịch LATEX sẽ in ra thông báo này nếu trong lệnh
\ref hoặc \pageref nhãn chưa được gán số bằng lệnh \label.
Lệnh này cũng in ra nơi mà LATEX phát hiện thấy nhãn chưa được
gán số.

4.5.2. Cảnh báo gói lệnh của LATEX

Các thông báo của gói lệnh và lớp là kiểm tra các tên và phiên bản
được gọi vào hoặc sử dụng các tùy chọn.

LaTeX Warning: File ’...’ already exists on the system.


Not generating it from this source.
Môi trường filecontents không ghi văn bản ra được từ tệp
nguồn. Vì LATEX đã phát hiện ra tệp cùng tên đã có trong hệ thống.
LaTeX Warning: Unused global option(s):
Tùy chọn trong lệnh \documentclass là toàn cục, nghĩa là nó áp
dụng cho mọi gói lệnh sau đó. Tuy nhiên nếu gói hoặc lớp không
chấp nhận tùy chọn này thì thông báo được in ra và liệt kê danh
sách các tùy chọn không dùng.
4.5. Những cảnh báo: Warnings 141

LaTeX Warning: Writing file ’...’.


Môi trường filecontents đang trích đoạn văn bản ra từ tệp
chính và ghi vào tệp có tên trong ’...’.
LaTeX Warning: You have requested class/package ’...’
but the class/package provides ’...’.
Tên của lớp hoặc gói được cho bởi lệnh \ProvidesClass hoặc
\ProvidesPackage không trùng với tệp đã được đọc vào bằng
lệnh \usepackage hoặc \RequirePackage.
LaTeX Warning: You have requested,
on input line ... version ’...’ of class/package ...,
but only version ’...’ is available.
Ngày của tệp lớp và gói lệnh được đưa vào bên trong xác định
bằng lệnh \ProvidesClass hoặc \ProvidesPackage cũ hơn đòi
hỏi của lệnh \usepackage hoặc \RequirePackage. Lớp hoặc gói
lệnh có thể không có tất cả những công cụ mà tệp đưa vào phải
có, vì cũ quá.
LaTeX Warning: You have requested release ’...’ of LaTeX,
but only release ’...’ is avaible.
Ngày của phiên bản LATEX sớm hơn ngày đã chỉ ra trong dòng lệnh
\NeedsTeXFormat. Phiên bản cũ sẽ không có những chức năng
mới được bổ sung.

4.5.3. Cảnh báo phông của LATEX

Cảnh báo phông bao gồm những lệnh của NFSS. Cảnh báo bao giờ
cũng bắt đầu bằng lệnh LaTeX Font Warning: sau đó là nội dung cảnh
báo.

LaTeX Font Warning: Command ... invalid in math mode.


Một lệnh chỉ được sử dụng trong môi trường văn bản lại đặt
vào trong môi trường toán. Lệnh này sẽ bị bỏ qua. Những lệnh
\mathversion, \boldmath, \unboldmath và \em hay dẫn tới lỗi
này. Có một số lệnh khác sẽ sinh ra thông báo lỗi thực sự với
lời thông báo như trên.
142 Chương 4. Thông báo lỗi

LaTeX Font Warning: Command \tracingfonts not proved.


(Font) Use the ’tracefnt’ package.
(Font) Command found: on input line ...
Công cụ chuẩn đoán dấu vết phông \tracingfonts có thể chỉ
được dùng nếu gói lệnh tracefnt được gọi vào. Ngược lại thì
lệnh này bị bỏ qua.
LaTeX Font Warning: Encoding ’...’ has changed to ’...’
for
(Font) Symbol font ’...’ in the math version ’...’.
Để dùng một kí hiệu phông trong phiên bản toán đã cho, cần thiết
là phải thay đổi tạm thời mã hóa phông.
LaTeX Font Warning: Font shape ’...’ in size <...> not
available
(Font) size <...> substituted.
Không có phông được định nghĩa cho cỡ phông và dạng phông
đòi hỏi, như vậy cỡ phông đang dùng được thay thế vào đó.
LaTeX Font Warning: Font shape ’...’ undefined
(Font) using ’...’ instead.
Định dạng phông đòi hỏi đã không được biết, hoặc không định
nghĩa, như vậy định dạng đang dùng sẽ được thay thế vào đó.
LaTeX Font Warning: ***NFSS release 1 command ... found
(Font) ***Update by using release 2 command ...
(Font) ***Recovery is probably possible.
Một lệnh từ phiên bản đầu tiên của NFSS đã được dùng, nhưng
nó không còn giá trị nữa. Tuy nhiên LATEX cố gắng nạp vào lệnh
tương đương trong phiên bản mới và xử lý với nó.

4.5.4. Cảnh báo của TEX

Cảnh báo của TEX được phân biệt bởi nó không có kí hiệu ! xuất
phát trên dòng cảnh báo và biên dịch không dừng lại. Tra cứu trong
danh mục từ khóa bắt đầu bằng TeX Warning: và sau đó là nội dung
cảnh báo. Những cảnh báo chung nhất của TEX là:
4.5. Những cảnh báo: Warnings 143

Overfull \hbox ...


TEX không ngắt được dòng và đành để một phần từ tràn ra phía
ngoài lề về bên phải văn bản. Phần thông tin còn lại chỉ ra độ dài
của dòng bị thêm ra và từ dòng nào đến dòng nào gây ra chuyện
này, ví dụ như:

Overfull \hbox (46.66313pt too wide) in paragraph at


lines 858–858
[]\OT1/tcrvn/m/n/10 Chỉ có bằng cách này mới đúng là
số
\ref{sec:OK}.[] []

Điều này chỉ ra rằng tại dòng 858 bị dài ra khoảng 46pt (15mm),
được tính theo phông tcrvn/m/n/10. Ta phải xem xét lại tại dòng
này để ngắt dòng thích hợp, TEX sẽ không báo lỗi nữa.
Overfull \vbox ...
Cảnh báo của lỗi này rất hiếm. TEX không ngắt được trang, như
vậy thì văn bản sẽ mở rộng theo chiều dọc của trang. Thông báo
này xảy ra khi có hộp với chiều dọc lớn hơn \textheight như
chiều dài một bảng dài.
Underfull \hbox ...
Cảnh báo này ngược lại với thông báo Overfull \hbox, TEX đã
xếp dòng từ trái qua phải được trải đều nhưng khoảng trắng giữa
các từ lớn quá, ít chữ trên một dòng quá. Thông báo này thường
xảy ra với môi trường sloppypar hoặc lệnh \sloppypar. Cũng có
thể sau lệnh \linebreak hoặc \break ngắt dòng. Nhiều trường
hợp ta phải áp dụng \\ và \newline để ngắt dòng và dồn về phía
trái của dòng. Một thông báo đầy đủ có dạng

Underfull \hbox (badness 1097) in paragraph at lines


778–782
\OT1/ttmvn/m/n/10 lần lượt theo bậc.
Ví dụ nếu gán []\OT1/tcrvn/m/n/10 \setcoun
ter{secnumdepth}{1} \OT1/ttmvn/m/n/10 chỉ còn
[]
144 Chương 4. Thông báo lỗi

Underfull \vbox ...


Cảnh báo trang đã được ngắt nhưng khoảng trắng giữa các khối
quá rộng. Nên dùng các lệnh \newpage hoặc \vfill\eject để
sang trang dồn những dòng lên phía đầu một trang.

4.6. Phương pháp tìm lỗi


Trong khi biên dịch LATEX nếu tìm ra lỗi ngay thì ta sửa. Nhưng
nhiều khi không tìm thấy lỗi ở đâu trong khối văn bản đã soạn, bạn
đọc hãy cố gắng thực hiện những bước sau đây: Giả sử bạn bị một lỗi
không tìm ra trong một khối của văn bản đang soạn.

1. Ta tiến hành đặt lệnh \end{document} vào trước khối văn bản đã
được báo lỗi. Ta tiến hành biên dịch LATEX:
a. Nếu không gặp lỗi nữa thì có nghĩa là văn bản từ đầu đến điểm
này không mắc lỗi này, ta có thể đánh dấu vị trí bằng lệnh %tốt.
Để thu hẹp vùng mắc lỗi ta lại có thể lùi \end{document} xuống
một đoạn nữa, rồi biên dịch cho đến khi LATEX thông báo lỗi ta
mắc phải, nghĩa là từ chỗ đánh dấu biên dịch tốt đến lần biên
dịch mới nhất có đoạn văn bản từ %tốt đến \end{document} sẽ
có lỗi, ta tiến hành tìm lỗi trong đoạn ngắn này.
b. Nếu LATEX vẫn thông báo lỗi thì ta phải chuyển \end{document}
lên phía trước nữa và đánh dấu lại %không tốt. Khi ta dịch
chuyển \end{document} đến vị trí mà biên dịch LATEX không còn
lỗi nữa thì ta tìm lỗi trong đoạn từ \end{document} đến chỗ đánh
dấu %không tốt.
2. Thường những lỗi trong môi trường khó phát hiện ra, nếu trong
vùng giới hạn trên có nhiều môi trường thì ta lần lượt không cho
các môi trường hoạt động nữa để biết được môi trường nào bị lỗi
bằng cách cho các dấu chú thích % trước tất cả các dòng có chứa
môi trường từ \begin{...} đến \end{...}.
CHƯƠNG 5

CÔNG CỤ ĐỊNH DẠNG CƠ BẢN

5.1. Một số định dạng cơ bản trong LATEX . . . . . . . . . . . . . . . . . . . . . 146


5.1.1. Căn lề cho một đoạn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
5.1.2. Định dạng danh sách . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
5.2. Định dạng đoạn và câu văn bản . . . . . . . . . . . . . . . . . . . . . . . . 156
5.2.1. Gói lệnh ulem in nghiêng và gạch dưới . . . . . . . . . . 156
5.2.2. Gói lệnh xspace sinh kí tự trống sau lệnh . . . . . . . . 157
5.2.3. Gói lệnh setspace thay đổi khoảng cách các dòng 157
5.2.4. Gói lệnh picinpar trong đoạn có một lỗ văn bản . . 158
5.2.5. Gói lệnh shapepar định dạng đoạn đặc biệt . . . . . . 159
5.3. Nguyên dạng văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.3.1. Gói lệnh alltt gần như môi trường nguyên dạng . . 160
5.3.2. Gói lệnh verbatim nâng cao nguyên dạng . . . . . . . . 161
5.3.3. Gói lệnh moreverb mở rộng nguyên dạng . . . . . . . . 161
5.4. Chú thích, ghi chú và ghi bên lề . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.4.1. Chú thích trong môi trường minipage . . . . . . . . . . . 165
5.4.2. Gói lệnh endnotes chú thích cho từng đoạn . . . . . . 165
5.5. Định dạng văn bản nhiều cột . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
5.5.1. Gói lệnh multicol tạo nhiều cột trên trang . . . . . . . . 166
5.5.2. Định dạng trong cột trong môi trường multicols . 168

Chương này phần đầu ta thống kê lại những định dạng cơ bản của
LATEX, trong khi nhắc lại trình bày luôn những khả năng của ta có thể
thay đổi được những thông số mà LATEX đã mặc định trước. Phần sau
là những gói lệnh phổ biến để định dạng một câu, một đoạn và cả một
chương.
146 Chương 5. Công cụ định dạng cơ bản

5.1. Một số định dạng cơ bản trong LATEX

5.1.1. Căn lề cho một đoạn

Một đoạn văn bản thường phải căn lề trái, lề phải và quy tâm. LATEX
trong chế độ mặc định căn đều ra hai lề và cung cấp môi trường và lệnh
để căn các chế độ còn lại.
1. \begin{center}<dòng 1>\\ ...<dòng n>\end{center}
hoặc {\centering ...} dùng căn văn bản vào giữa theo hàng.

7 8: 2
\begin{center}
Vị chua là bát canh riêu \\ Vị chua là bát canh riêu
Vị cay là trái hạt tiêu đất mình Vị cay là trái hạt tiêu đất mình
\end{center}
2. \begin{raggedright}<dòng 1>\\...<dòng n>\end{raggedright}
hoặc {\raggedright ...} dùng căn văn bản về bên phải.

7 8 : 2
\begin{raggedright}
Tình ta như hàng cây\\ Tình ta như hàng cây
Đã bao mùa gió bão Đã bao mùa gió bão
\end{raggedright}

3. \begin{flushleft} <dòng 1>\\ ... <dòng n> \end{flushleft}


hoặc {\raggedleft ...} dùng căn văn bản về bên trái.

7 8 : 2
\begin{flushleft}
Chỉ còn anh và em\\ Chỉ còn anh và em
Cùng tình yêu ở lại... Cùng tình yêu ở lại...
\end{flushleft}
4. \begin{quote} ... \end{quote} dùng căn văn bản vào phía trong
từ hai phía phải và trái.

7 8 : 2
\begin{quote}
Tình ta như dòng sông \\ Tình ta như dòng sông
Đã yên ngày thác lũ. Đã yên ngày thác lũ.
\end{quote}
5.1. Một số định dạng cơ bản trong LATEX 147

Môi trường \begin{quotation} ... \end{quotation} như là môi


trường trước, nhưng dòng đầu tiên thụt đầu dòng.

7 8: 2
\begin{quotation}
Tình ta như dòng sông \\ Tình ta như dòng sông
Đã yên ngày thác lũ. Đã yên ngày thác lũ.
\end{quotation}

Ngoài các môi trường trên còn môi trường khác như môi trường
cho thơ ca \begin{verse} ... \end{verse}.

5.1.2. Định dạng danh sách


Trong LATEX có ba dạng danh sách cơ bản mà ta hay dùng như đánh
số thứ tự, chấm đen, căn dòng thứ nhất:

7 8 : 2
\begin{enumerate}
\item Cuộc đời tuy dài thế 1. Cuộc đời tuy dài thế
\item Năm tháng vẫn đi qua 2. Năm tháng vẫn đi qua
\item Như biển kia dẫu rộng 3. Như biển kia dẫu rộng
\item Mây vẫn bay về xa.
4. Mây vẫn bay về xa.
\end{enumerate}

7 8 : 2
\begin{itemize} • Cuộc đời tuy dài thế
\item Cuộc đời tuy dài thế • Năm tháng vẫn đi qua
\item Năm tháng vẫn đi qua • Như biển kia dẫu rộng
\item Như biển kia dẫu rộng • Mây vẫn bay về xa.
\item Mây vẫn bay về xa.
\end{itemize}

7 8 : 2
\begin{description}
\item [Cuộc đời] tuy dài thế Cuộc đời tuy dài thế
\item [Năm tháng] vẫn đi qua Năm tháng vẫn đi qua
\item [Như biển] kia dẫu rộng Như biển kia dẫu rộng
\item [Mây] vẫn bay về xa.
Mây vẫn bay về xa.
\end{description}

Những môi trường này đều có thể lồng vào nhau, mỗi vòng lồng
vào nhau như vậy ta gọi là bậc cho các ký tự đánh dấu, có tất cả bốn
148 Chương 5. Công cụ định dạng cơ bản

bậc. Vòng ngoài cùng ta gọi là bậc nhất. Xét các danh sách cụ thể
Môi trường enumerate đánh số
Số đếm, lệnh và ký hiệu cho môi trường này được liệt kê dưới đây
Bậc 1 Bậc 2 Bậc 3 Bậc 4
1. enumi enumii enumiii enumiv
2. \theenumi \theenumii \theenumiii \theenumiv
3. \arabic{enumi}\alpha{enumii}\roman{enumiii}
\Alph{enumiv}
4. \labelenumi \labelenumii \labelenumiii \labelenumiv
Các
5. \theenumi. (\theenumii) \theenumiii. \theenumiv.
6. 1., 2. (a), (b) i., ii. A., B.
7. \p@enumi \p@enumii \p@enumiii \p@enumiv
8. {} \theenumi \theenumi() \theenumiii
9. 1., 2. 1a, 2b 1(a)i, 2(b)ii 1(a)iA, 2(b)iiB.
hàng có ý nghĩa sau: 1. số đếm, 2. thể hiện số, 3. giá trị mặc định, 4.
trường nhãn, 5. dạng nhãn mặc định, 6. ví dụ số, 7. kết hợp bậc, 8. giá
trị mặc định, 9. ví dụ tra cứu.
Ta có thể định nghĩa lại các lệnh trong các bậc trên như ví dụ sau

7 8: 2
\makeatletter
\renewcommand{\theenumi}{\Roman{enumi}}
\renewcommand{\labelenumi}{\theenumi.} I. Giới thiệu
\renewcommand{\theenumii}{\Alph{enumii}}
A. Mục đích
\renewcommand{\labelenumii}{\theenumii.}
\renewcommand{\p@enumii}{\theenumi–} Dự án nghiên
\makeatother cứu và ứng dụng
\begin{enumerate} LATEX cho tiếng
\item\textbf{Giới thiệu} Việt.
\begin{enumerate} B. Yêu cầu
\item\textbf{Mục đích} \newline
Có phần mềm hỗ
Dự án nghiên cứu và ứng dụng \LaTeX\
cho tiếng Việt.\label{td1} trợ và sách hướng
\item\textbf{Yêu cầu} \newline dẫn.
Có phần mềm và sách hướng dẫn.
II. Nội dung dự án
\label{td2}
\end{enumerate} III. Kinh phí dự án
\item\textbf{Nội~dung~dự~án}\label{td3}
\item\textbf{Kinh~phí~dự~án}\label{td4}
\end{enumerate}

Chú ý là các trích dẫn tham khảo chỉ số danh sách bằng lệnh \ref{td1}
là I–A, \ref{td2} là I–B, \ref{td3} là II và \ref{td4} là III.
5.1. Một số định dạng cơ bản trong LATEX 149

Ta có thể thêm kí tự vào các nhãn của danh sách

7 8 : 2
\renewcommand{\labelenumi}
{{\wingding\symbol{123}} {1. Mai rồi con lớn khôn
\theenumi.} {2. Trên đường xa nắng gắt
\begin{enumerate} {3. Lời ru là bóng mát
\item Mai rồi con lớn khôn
\item Trên đường xa nắng gắt
\item Lời ru là bóng mát
\end{enumerate}
Ta có thể dùng các ký hiệu của các phông khác như ví dụ trên
và dùng gói cacl để đặt được \setcounter cho số thứ tự của phông
\wingding đã định nghĩa ở trên.

7 8 : 2
\newcounter{local}
\renewcommand{\labelenumi}{ * Lúc con lên núi thẳm
\setcounter{local}{\value{enumi}} * Lời ru cũng gập
\addcounter{local}{128} ghềnh
\wingding \symbol{\thelocal}} * Khi con ra biển rộng
\begin{enumerate}
* Lời ru thành mênh
\item Lúc con lên núi thẳm
mông...
\item Lời ru cũng gập ghềnh
\item Khi con ra biển rộng
\item Lời ru thành mênh mông...
\end{enumerate}
Cuối cùng trong môi trường đếm số này có một gói dùng riêng
enumerate của David Carlisle. Định nghĩa lại môi trường enumerate
với những tùy chọn được chủ động do người dùng chỉ ra. Tùy chọn này
chỉ cần chỉ ra A, a, I, i, hoặc 1 cho giá trị đếm tương ứng ở các định
dạng \Alph, \alph, \Roman, \roman hoặc \arabic. Tất cả các chữ trên
phải được đặt trong {}. Còn các lệnh \label và \ref vẫn hoạt động
bình thường với các nhãn ta đã đặt.
150 Chương 5. Công cụ định dạng cơ bản

7 8: 2
\begin{enumerate}[label={A}-\roman*.]
\item Và đời mai sau \label{LA} A-i. Và đời mai sau
\item Trên đường này nhỉ A-ii. Trên đường này nhỉ
\begin{enumerate}[label={C}-\alph*)] C-a) Những đôi tri kỷ
\item Những đôi tri kỷ\label{LC}
C-b) Sóng bước qua
\item Sóng bước qua đây
đây
\end{enumerate}
\end{enumerate}

7 8 : 2

\begin{enumerate}[label={B}-\arabic*.] B-1. Lá vàng vẫn bay


\item Lá vàng vẫn bay B-2. Chồi non lại biếc
\item Chồi non lại biếc\label{LB} Tham chiếu với
\end{enumerate} \ref{LA}=A-i.,
Tham chiếu với\\ \ref{LC}=C-a) và
\verb!\ref{LA}=!\ref{LA}, \ref{LB}=B-2..
\verb!\ref{LC}=!\ref{LC}
và \verb!\ref{LB}=!\ref{LB}.
Môi trường itemize chấm điểm
Mỗi đoạn trong môi trường này xuất phát là một chấm điểm.
Những lệnh bậc của môi trường này lồng vào nhau là
Bậc 1 Bậc 2 Bậc 3 Bậc 4
Lệnh \labelitemi \labelitemii\labelitemiii
\labelitemiv
Định nghĩa \m@th\bullet\bfseries-- \m@th\ast \m@th\cdot
Thể hiện • − ∗ ·
Ta có thể định nghĩa lại \labelitemi bằng phông đặc biệt như ví
dụ trên.

7 8 : 2
\renewcommand{\labelitemi}
{\wingding\symbol{39}} ' Dẫu lòng em không quên
\begin{itemize} ' Con đường ga cát bụi
\item Dẫu lòng em không quên ' Bóng anh đi lầm lụi
\item Con đường ga cát bụi ' Sông đôi bờ cách xa
\item Bóng anh đi lầm lụi
\item Sông đôi bờ cách xa
\end{itemize}
Môi trường description mô tả
5.1. Một số định dạng cơ bản trong LATEX 151

Trong môi trường này ta có thể thay đổi \descriptionlabel để tạo


ra nhãn mô tả mới

7 8 : 2
\renewcommand{\descriptionlabel}[1]
{\hspace{\labelsep}\textsf{#1}} A. Em đâu nhắc chuyện
\begin{description} qua
\item[A.]Em đâu nhắc chuyện qua B. Để cho lòng tủi cực
\item[B.]Để cho lòng tủi cực C. Em nhớ lại ngày xa
\item[C.]Em nhớ lại ngày xa
D. Thấy mình thêm hạnh
\item[D.]Thấy mình thêm hạnh phúc
phúc
\end{description}

Trong LATEX chuẩn khi dùng môi trường này từ dòng thứ hai của
một đoạn thụt vào đúng bằng thụt vào đầu một đoạn. Còn lệnh vừa
thiết kế trên cho ta thụt vào cộng thêm với \labelsep.
Môi trường list cho việc thiết kế danh sách
Môi trường danh sách tổng quát để định nghĩa các môi trường khác
\begin{list}{<nhãn mặc định>}{<khai báo>}<danh sách>\end{list}
Một bức tranh tổng quát và các lệnh thông số cho từng chi tiết của
môi trường list như hình 5.1.

R
Những khoảng thẳng đứng

\topsep Khoảng cách giữa đoạn thứ nhất của danh sách với văn

R
bản trước.
\partopsep Khoảng cách được cộng thêm khi danh sách bắt đầu

R
như một đoạn mới.

R
\itemsep Khoảng cách giữa hai phần tử của danh sách kề nhau.
\parsep Khoảng cách giữa hai đoạn trong cùng một phần tử điểm
của danh sách.

R
Độ dài chiều ngang

\leftmargin Khoảng giữa điểm lề trái trang và lề trái của danh

R
sách này.

R
\rightmargin Khoảng giữa lề phải trang và lề phải danh sách.
\listparindent Khoảng thụt dòng trong mỗi khoản mục của
152 Chương 5. Công cụ định dạng cơ bản

Văn bản trước danh sách

\topsep+\parskip [+\partopsep]
\labelsep
Nhãn \rightmargin
Item1
\labelwidth \itemindent
Đoạn 1
\leftmargin
\listparindent \parsep
Nhãn Item 2
Đoạn 2
\itemsep+\parsep
Nhãn Item 3
Đoạn 3

\topsep+\parskip[+\partopsep]

Văn bản sau danh sách

Hình 5.1: Cấu trúc danh sách tổng quát

R
danh sách.
\itemindent Khoảng thụt đầu dòng của dòng đầu tiên của khoản

R
mục.

R
\labelwidth Chiều rộng của hộp chứa nhãn khoản mục.
\labelsep Khoảng cách từ kết thúc nhãn đến kết thúc thụt đầu
dòng.

Thực chất các môi trường ta đã biết đều định nghĩa từ môi
trường list. Các môi trường quote, quotation, center, flushleft và
flushright đều được xây dựng từ list, nhưng với đặc điểm chỉ có
một \item[] được chỉ ra trong định nghĩa. Ta cũng có thể định nghĩa
một môi trường tương tự, chẳng hạn như môi trường căn lề hai bên
nhưng có dấu ngoặc nháy.

7 8
\newenvironment{Quote}
5.1. Một số định dạng cơ bản trong LATEX 153

{\begin{list}{}{\setlength{\rightmargin}{\leftmargin}}
\item[] "\ignorespaces}{\unskip "\end{list}}
\begin{Quote}
Dẫu lòng em không quên\\ Con đường ga cát bụi
\end{Quote}

: 2

"Dẫu lòng em không quên


Con đường ga cát bụi"

Ta có dùng hai lệnh \ignorespaces và \unskip bỏ qua các khoảng


trống phía trước và phía sau.
Trong môi trường danh sách bình thường thì các nhãn với độ rộng
không bằng nhau, do đó văn bản được căn lề không tính đến yếu tố
này. Ta muốn xây dựng một môi truờng mà các nhãn được dóng thẳng
hàng với nhãn có độ rộng lớn nhất.

7 8
\newcommand{\entrylabel}[1]{\mbox{\textsf{#1:}}\hfil}
\newenvironment{entry}
{\begin{list}{}{\renewcommand{\makelabel}{\entrylabel}
\setlength{\labelwidth}{35pt}
\setlength{\leftmargin}{\labelwidth+\labelsep}}}
{\end{list}}
\begin{entry}
\item[Tin đồn] Gió nam thổi xuống lò vôi \\
Ai đồn với bạn ta có đôi để bạn buồn
\item[Nỗi nhớ] Dừng chân bước xuống ghe buôn\\
Sóng bao nhiêu lượn, dạ anh buồn bấy nhiêu
\item[Không thay đổi] Cánh buồm thổi gió hiu hiu \\
Buồm xiêu cũng mặc, tình yêu ta trọn niềm.
\end{entry}

: 2
154 Chương 5. Công cụ định dạng cơ bản

Tin đồn: Gió nam thổi xuống lò vôi


Ai đồn với bạn ta có đôi để bạn buồn

Nỗi nhớ: Dừng chân bước xuống ghe buôn


Sóng bao nhiêu lượn, dạ anh buồn bấy nhiêu

Không thay đổi: Cánh buồm thổi gió hiu hiu


Buồm xiêu cũng mặc, tình yêu ta trọn niềm.

Ta có thể xây dựng môi trường chỉ có độ rộng bằng độ rộng của
nhãn nhỏ nhất như sau

7 8
\newcommand{\Mentrylabel}[1]
{\makebox[\labelwidth]
{\parbox[t]{\labelwidth}{\hspace{0pt}\textsf{#1:}}}}%\hfill}
\newenvironment{Mentry}
{\begin{list}{}{%
\renewcommand{\makelabel}{\Mentrylabel}
\setlength{\labelwidth}{50pt}
\setlength{\leftmargin}{\labelwidth+\labelsep}}}
{\end{list}}
\begin{Mentry}
\item[Giới thiệu\\ tình yêu]
Chim manh manh bay quanh vòng cỏ\\
Qua với nàng hiểu rõ mấy năm
\item[Chờ đợi]
Tình yêu vẫn giữ âm thầm \\
Đợi quyền cha mẹ sắt cầm định phân.
\end{Mentry}

: 2
5.1. Một số định dạng cơ bản trong LATEX 155

Giới thiệu Chim manh manh bay quanh vòng cỏ


tình yêu:
Qua với nàng hiểu rõ mấy năm

Chờ đợi: Tình yêu vẫn giữ âm thầm


Đợi quyền cha mẹ sắt cầm định phân.

Môi trường với nhãn như là xuất phát của một đoạn được dùng với
lệnh \usecounter như

7 8
\newcounter{notes}
\newenvironment{Notes}
{\begin{list}{\textsc{Chú ý } \arabic{notes}.
}{\usecounter{notes}%
\setlength{\labelsep}{0pt}\setlength{\leftmargin}{0pt}%
\setlength{\labelwidth}{0pt}\setlength{\listparindent}{0pt}}}
{\end{list}}
\begin{Notes}
\item Lửa gần rơm lâu ngày cũng bén
\item Thiếp gần chàng đôi đàng oanh én
\item Anh thương sao cho trọn, cho vẹn anh thương
\end{Notes}

: 2

CHÚ Ý 1. Lửa gần rơm lâu ngày cũng bén

CHÚ Ý 2. Thiếp gần chàng đôi đàng oanh én

CHÚ Ý 3. Anh thương sao cho trọn, cho vẹn anh thương
156 Chương 5. Công cụ định dạng cơ bản

5.2. Định dạng đoạn và câu văn bản

5.2.1. Gói lệnh ulem in nghiêng và gạch dưới

Trong nguyên gốc LATEX có lệnh \emph và \em làm nghiêng các kí
tự, đây là các lệnh thay đổi phông kí tự và ta có thể dùng tương tự
với \bfseries và \itshape. Gói lệnh ulem của Donald Arseneau định
nghĩa lại lệnh \emph dùng gạch dưới. Nếu áp dụng hai lần lệnh này cho
ta cả gạch dưới nữa. Lệnh này cho phép ngắt dòng thích hợp như trong
LATEX bình thường

7 8: 2
\emph{{\it Ôi con sóng} ngày xưa\\ Ôi con sóng ngày xưa
Và ngày sau} vẫn thế \\ Và ngày sau vẫn thế
Nỗi khát vọng\emph{ tình yêu}\\ Nỗi khát vọng tình yêu
Bồi hồi trong \emph{\emph{ngực trẻ}} Bồi hồi trong ngực trẻ

Ta có thể tắt chức năng này bằng lệnh \normalem và mở bằng lệnh
\ULforem

7 8: 2
\normalem
Ôi con sóng ngày xưa
\emph{{\it Ôi con sóng} ngày xưa\\
Và ngày sau vẫn thế
Và ngày sau} vẫn thế \\
Nỗi khát vọng tình yêu
\ULforem
Bồi hồi trong ngực trẻ
Nỗi khát vọng\emph{ tình yêu}\\
Bồi hồi trong \emph{\emph{ngực trẻ}}

Gói lệnh này còn một số lệnh khác như:

7 8 : 2
\uline{Ôi con sóng} ngày xưa\\ Ôi con sóng ngày xưa
Và ngày sau \uwave{vẫn thế} \\ Và ngày sau ::::
vẫn :::
thế
Nỗi \sout{khát vọng} tình yêu\\ Nỗi khát vọng tình yêu
Bồi hồi \xout{trong ngực trẻ} Bồi hồi trong
////////ngực/
//////trẻ
///
5.2. Định dạng đoạn và câu văn bản 157

5.2.2. Gói lệnh xspace sinh kí tự trống sau lệnh


Gói lệnh nhỏ xspace của David Carlisle định nghĩa lệnh \xspace
dùng để kết thúc một định nghĩa lệnh mà khi sử dụng chúng không
phải gõ thêm một ký tự nào nữa. \xspace cho ta tiết kiệm không phải
gõ vào \ hoặc là {} sau mỗi lệnh để cho kết quả chúng tách nhau
ra. Bình thường thì mỗi lệnh của TEX đều dính vào văn bản sau lệnh
nếu để kí tự trắng không thôi. Ví dụ ta có thể dùng lệnh này để định
nghĩa "v.v...", \newcommand{\vv}{v.v...\xspace} và ta có thể sử dụng
tự nhiên.

7 8: 2
\newcommand{\vn}{Việt Nam\xspace} Nước Việt Nam là một,
Nước \vn là một, dân tộc \vn là một. dân tộc Việt Nam là một.

5.2.3. Gói lệnh setspace thay đổi khoảng cách các dòng

Lệnh thông số \baselineskip nguyên bản của TEX để thay đổi


khoảng cách giữa hai dòng cơ sở liền nhau. LATEX có tăng độ khoảng
cách giữa hai dòng lên 20%, nhưng không khuyến khích thay đổi
trực tiếp lệnh \baselineskip mà dùng lệnh \baselinestretch để
thay đổi thông số \baselineskip toàn cục. Một chú ý nữa là khi đặt
lệnh \renewcommand{\baselinestretch}{1.5} thì nhiều khi không
tác dụng ngay trên văn bản, mà khi phông thay đổi mới có tác dụng
(ví dụ như dùng lệnh \small, \Large, ...).
Gói lệnh setspace định nghĩa môi trường spacing mà
đối số <hệ số> của nó chính là giá trị của \baselinestretch
nằm trong môi trường này \begin{spacing}{<hệ số>}...<văn
bản>...\end{spacing}
158 Chương 5. Công cụ định dạng cơ bản

7 8 : 2

\begin{spacing}{1.5} Sóng bắt đầu từ gió


Sóng bắt đầu từ gió\\ Gió bắt đầu từ đâu?
Gió bắt đầu từ đâu?\\
Em cũng không biết nữa\\ Em cũng không biết nữa
Khi nào ta yêu nhau Khi nào ta yêu nhau
\end{spacing}

Giá trị của \baselinestretch thay đổi theo cỡ của văn bản tương ứng
với môi trường spacing

spacing \baselinestretch
10pt 11pt 12pt
1.5 1.25 1.21 1.24
2 1.67 1.62 1.66

5.2.4. Gói lệnh picinpar trong đoạn có một lỗ văn bản

Gói lệnh pincipar của Friedhelm Sowa cho phép một cửa sổ được
đưa vào giữa đoạn văn bản. Môi trường cơ bản của gói lệnh này là
window và có hai môi trường khác là figwindow, tabwindow. Chú ý
môi trường figwindow và môi trường figure với một số môi trường
khác cho ảnh hoặc đồ thị nhiều khi thứ tự lần lượt được xếp không
đúng. Công thức chung là \begin{window}[<số dòng>, <căn lề>,

R
<văn bản>, <chú thích>]

R
<số dòng> Số dòng của đoạn mà cửa sổ bắt đầu xuất hiện.
<căn lề> Căn văn bản trong cửa sổ (l mặc định căn trái, c căn vào

R
giữa và r căn bên phải).

R
<văn bản> Văn bản muốn đưa vào cửa sổ
<chú thích> Giải thích văn bản trong cửa sổ, lựa chọn này là các
tiêu đề cho hai môi trường figwindow và tabwindow

Ví dụ sau mô tả đưa hình vào bên cạch văn bản.


5.2. Định dạng đoạn và câu văn bản 159

7 8: 2
\begin{figwindow}[1,r ,
{\fbox{ Hình này được vẽ bằng chương
\includegraphics[scale =1] trình WinT-
{hinh51}}}, pic, các bạn
{Hình tròn và tam giác}] sẽ được
Hình này được vẽ bằng chương học ở các
trình WinTpic, các bạn sẽ được chương
học ở các chương sau. Hình được sau. Hình
Hình 5.2: Hình tròn được ghi
ghi lại bằng tệp \TeX\ và đưa vào và tam giác
bình thường bằng lệnh lại bằng tệp
\verb!\input!. Nếu đưa tập ảnh TEX và đưa vào bình thường
thì bằng lệnh đưa ảnh trong các bằng lệnh \input. Nếu đưa
chương về hình đã mô tả. tập ảnh thì bằng lệnh đưa ảnh
\end{figwindow} trong các chương về hình đã
mô tả.

Ví dụ sau ta dùng lệnh \shortstack để đặt kí tự trên một ký tự khác.

7 8 : 2

\begin{window}[1,c,{ Con sóng dưới lòng sâu


\fbox{\shortstack{H\\ a\\ y}}},{}]
H
Con sóng dưới lòng sâu \\ a
Con sóng trên mặt nước \\ y
Ôi con sóng nhớ bờ \\
Con sóng trên mặt nước
Ngày đêm không ngủ được\\
Ôi con sóng nhớ bờ
\end{window}
Ngày đêm không ngủ được

5.2.5. Gói lệnh shapepar định dạng đoạn đặc biệt


Gói lệnh shapepar của Donald Arsenaeu định nghĩa một lệnh
\shapepar định dạng một đoạn thành những hình đặc biệt. Kích cỡ của
các hình đặc biệt này được tính tự động và điền đầy đoạn văn bản vào
đó. Đặc biệt trong đoạn không chấp nhận môi trường toán và những
lệnh có khoảng cách dọc như \vadjust hoặc \vspace.
\shapepar{<hình dạng>}{<đoạn văn bản>}
ở đây <hình dạng> là hình dáng muốn định dạng của <đoạn văn bản>
160 Chương 5. Công cụ định dạng cơ bản

<hình dạng> Lệnh trực tiếp Hình định dạng


\squareshape \squarepar{...} Hình vuông.
\diamondshape \diamondpar{...}Hình thoi.
\heartshape \heartpar{...} Hình trái tim.
\starshape \starpar{...} Hình ngôi sao năm cánh.
\nutshape \nutpar{...} Hình ốc thủng 6 cạnh.
\shapepar\diamondshape{Kích cỡ } hoặc \heartpar{Kích cỡ}
Kích
cỡ
của các Kích cỡ
hình đặc biệt của các hình đặc biệt này
này được tính tự được tính tự động và điền
động và điền đầy đoạn đầy đoạn văn bản vào đó.
văn bản vào đó. Đặc biệt Đặc biệt trong đoạn không
trong đoạn không chấp chấp nhận môi trường
nhận môi trường toán toán và những lệnh
và những lệnh có khoảng cách
có khoảng dọc như.
cách dọc ♥
như
.

5.3. Nguyên dạng văn bản


Nhiều văn bản khi mô tả ta muốn giữ nguyên nó như khi ta nhìn lúc
gõ vào, những lệnh hoặc môi trường làm được việc này ta gọi là lệnh
và môi trường nguyên dạng. Ta muốn mô tả các chương trình nguồn,
hoặc các dạng văn bản mà các lệnh của LATEX không có tác dụng. Ta đã
biết LATEX cho ta lệnh \verb+...+ cố định một dòng, một từ trên một
dòng, còn lệnh môi trường verbatim cố định một đoạn nhiều dòng.
Cuốn sách này dùng môi trường verbatim để cố định các lệnh LATEX
như các bạn thấy. Có một số gói lệnh làm việc này rất dễ dàng như sau:

5.3.1. Gói lệnh alltt gần như môi trường nguyên dạng
Gói lệnh alltt của Leslie Lamport định nghĩa một môi trường
alltt giống như môi trường verbatim ngoại trừ lệnh của LATEX vẫn
còn tác dụng và dấu nhóm { }
5.3. Nguyên dạng văn bản 161

7 8 : 2
\begin{alltt}
{\it Anh, con đường xa ngái# Anh, con đường xa ngái#
Anh, bức vẽ không màu@ Anh, bức vẽ không màu@
Anh, nghìn nỗi lo âu% Anh, nghìn nỗi lo âu%
Anh, dòng thơ nổi gió...$} Anh, dòng thơ nổi gió...$
Mà em người đời thường& Mà em người đời thường&
Biết là anh có ở ! Biết là anh có ở !
\end{alltt}

5.3.2. Gói lệnh verbatim nâng cao nguyên dạng


Gói lệnh verbatim của Rainer Schopf định nghĩa lại môi trường
verbatim và verbatim* trong LATEX. Môi trường mới cho phép lượng
văn bản trong đó dài bất kỳ, cung cấp thêm một môi trường comment
khi biên dịch trong LATEX tất cả văn bản trong môi trường này được bỏ
qua. Ngoài ra cũng định nghĩa lại lệnh verb với các ký hiệu biên được
phát hiện ra nếu bỏ sót.

7 8 : 2
\begin{comment}
Thôi đừng buồn nữa anh
Bài thơ "Anh" của Xuân Quỳnh
Tấm rèm cửa màu xanh
\end{comment}
Trang thơ còn viết dở
{\it Thôi đừng buồn nữa anh\\
Tách nước nóng trên bàn
....
Và lòng em thương nhớ...
Và lòng em thương nhớ...}

Gói lệnh này cung cấp cho ta định nghĩa lại những môi trường hoặc
lệnh nguyên dạng, ta xét ở mục sau.

5.3.3. Gói lệnh moreverb mở rộng nguyên dạng


Gói lệnh moreverb của Angus Duggan dựa trên cơ sở của gói lệnh
verbatim đã nói ở phần trên. Trong gói này cung cấp một số môi trường
gần như nguyên dạng rất hay như môi trường đọc và ghi vào tệp nội
dung của môi trường, đó là môi trường verbatimwrite có đối số là tệp
ghi ra:
162 Chương 5. Công cụ định dạng cơ bản

7 8 : 2
\begin{verbatimwrite}{testab.out}
Trong tệp testab.out có:
* * * * * * * *
Bước 1 Bước 1
Bước 2 Bước 2
Bước 3 Bước 3
Bước 4 Bước 5 Bước 4 Bước 5
\end{verbatimwrite}
Văn bản trong môi trường được ghi vào tệp testab.out không hiện
ra màn hình. Trong gói này còn có môi trường giữ nguyên khoảng tab
giữa hai dấu * như \begin{verbatimtab}[tabstop], thông số tabstop
là số khoảng tab trên một hàng, trong ví dụ dưới đây > là khoảng tab.

7 8 : 2
\begin{verbatimtab} 12345678901234567
12345678901234567 | Một Hai Ba
\end{verbatimtab} Bốn
\begin{verbatimtab} | Một Hai Ba Bốn
|>Một>Hai>Ba>Bốn
\end{verbatimtab}
\begin{verbatimtab}[4]
|>Một>Hai>Ba>Bốn
\end{verbatimtab}

7 8
: 2
* * * *
Muốn đưa văn bản từ tệp Bước 1
testab.out vào ta dùng lệnh Bước 2
\verbatimtabinput[4]{testab.out} Bước 3
Bước 4 Bước 5
Môi trường đóng khung văn bản nguyên dạng:

7 8 : 2
\begin{boxedverbatim}
Sóng bắt đầu từ gió Sóng bắt đầu từ gió
Gió bắt đầu từ đâu? Gió bắt đầu từ đâu?
Em cũng không biết nữa Em cũng không biết nữa
Khi nào ta yêu nhau Khi nào ta yêu nhau
\end{boxedverbatim}

Môi trường đánh số dòng của văn bản


5.3. Nguyên dạng văn bản 163

\begin{listing}[step]{firstline} ... \end{listing}\\


\begin{listing*}[step]{firstline} ... \end{listing*}

Môi trường có * là thêm dấu ␣ vào các khoảng trống. Ví dụ


\begin{listing}[2]{3} cách nhau bước hai và bắt đầu đánh số dòng
3 (nghĩa là dòng thứ 2).

7 8 : 2
\begin{listing}[2]{3}
Con sóng dưới lòng sâu
Con sóng dưới lòng sâu
4 Con sóng trên mặt nước
Con sóng trên mặt nước
Ôi con sóng nhớ bờ
Ôi con sóng nhớ bờ
6 Ngày đêm không ngủ được
Ngày đêm không ngủ được
Lòng em nhớ đến anh
Lòng em nhớ đến anh
8 Cả trong mơ còn thức
Cả trong mơ còn thức
\end{listing}

\begin{listingcont} ... \end{listingcont}


\begin{listingcont*} ... \end{listingcont*}

Môi trường trên là tiếp tục đánh số của môi trường listing

7 8 : 2
\begin{listingcont}
Dẫu xuôi về phương Bắc
Dẫu xuôi về phương Bắc
10 Dẫu ngược về phương Nam
Dẫu ngược về phương Nam
Nơi nào em cũng nghĩ
Nơi nào em cũng nghĩ
12 Hướng về anh - một phương
Hướng về anh - một phương
\end{listingcont}

\listinginput[<bước>]{<dòng dầu>}{<tên tệp>}

Khi môi trường verbatimwrite ghi ra tệp testab.out, lệnh này đọc
vào và đánh số dòng:
* * * *
Bước 1
Bước 2
Bước 3
Bước 4 Bước 5
164 Chương 5. Công cụ định dạng cơ bản

5.4. Chú thích, ghi chú và ghi bên lề


Ghi chú hoặc chú thích của LATEX dành một khoảng ở cuối trang như
ví dụ* . Những thông số cho dạng chú thích này được mô ta như hình

Phần thân văn bản


\footnoterule
\footnotesep
1
\@makefntext
\@makefnmark
\footnotesep
2 \@makefntext
do lệnh

\@makefnmark R
Sinh ra ký hiệu chú thích thông qua lệnh
\@thefnmark. Mặc định giá trị này định nghĩa là

R
\renewcommand{\@makefnmark}{\mbox{$^{\@thefnmark}$}
\footnotesize Phông trong chú thích, ta có thể đặt lại cho nhỏ

R
hơn được.
\footnotesep Chiều cao từ dòng cuối ghi chú trước đến dòng thứ
hai của ghi chú mới. LATEX điều chỉnh bằng \baselineskip có

R
dùng \footnotesize cộng thêm một chút nữa.
\skip\footins Khoảng trắng từ văn bản chính tới đường kẻ ghi
chú. Có thể điều chỉnh khoảng này bằng lệnh \setlength hoặc

R
\addtolength, ví dụ \addtolength{\skip\footins}{3mm}
\footnoterule Đây là đường kẻ ngang cho chú thích, ta có thể
thay đổi
\renewcommand{\footnoterule}{\vspace*{-3pt}%

R
\rule{.4\columnwidth}{0.4pt}\vspace*{2.6pt}}
\@makefntext Chứa văn bản cần cho chú thích.

* Đây là ví dụ chú thích bình thường


5.4. Chú thích, ghi chú và ghi bên lề 165

5.4.1. Chú thích trong môi trường minipage

Thường dùng lệnh \footnote{Đây là ví dụ chú thích bình


thường}† . Trong môi trường minipage lệnh \footnote được định nghĩa
số đếm lại qua mpfootnote. Khi đó đánh dấu chú thích bằng lệnh
\thefootnote hoặc \thempfootnote. Ta cũng có thể định nghĩa lại như
sau:

7 8 : 2
\begin{minipage}{\linewidth}
Dẫu xuôi về phương Bắc a
Dẫu xuôi về phương Bắc
Dẫu ngược về phương Nam
\footnote{lần đầu}\\
Nơi nào em cũng nghĩ
Dẫu ngược về phương Nam
Hướng về anh - một phương
% %\footnote{lần hai}\\
Nơi nào em cũng nghĩ \\ a lần đầu

Hướng về anh - một phương


\end{minipage}
Nhiều khi ta phải chú thích trong và ngoài môi trường minipage dùng
kết hợp \footnotemark và \footnotetext như sau

7 8: 2
Dẫu xuôi về phương Bắc
\begin{minipage}{\linewidth}
Dẫu ngược về phương Nam‡
Dẫu xuôi về phương Bắc
Nơi nào em cũng nghĩ
\footnote{Đã đi chưa}\\
Hướng về anh - một phương
Dẫu ngược về phương
Nam\footnotemark\\
Nơi nào em cũng nghĩ \\
Hướng về anh - một phương
\end{minipage}
\footnotetext{Đi về phía dưới}

5.4.2. Gói lệnh endnotes chú thích cho từng đoạn

Khi kết hợp nhiều văn bản với nhau, mỗi văn bản đều có chú thích
riêng hoặc mỗi chương sách đều có chú thích của nó thì ta dựa vào gói
lệnh endnotes của John Lavagnino. Gói lệnh này dùng một tệp có đuôi
*.ent để lưu giữ ghi chú rồi sau đó lấy vào văn bản.
† Đây là ví dụ chú thích bình thường
‡ Đi về phía dưới
166 Chương 5. Công cụ định dạng cơ bản

Khi đưa vào văn bản cần nhóm lệnh sau đây
\newpage\begingroup
\setlength{\parindent}{0pt}\setlength{\parskip}{2ex}
\renewcommand{\enotesize}{\normalsize}
\theendnotes\endgroup

5.5. Định dạng văn bản nhiều cột


LATEX chuẩn chỉ cho ta khả năng văn bản có một cột hoặc hai cột,
nhưng không thể trộn lẫn trong cùng một văn bản.

5.5.1. Gói lệnh multicol tạo nhiều cột trên trang


Gói lệnh multicol của tác giả Frank Mittelback định nghĩa môi
trường multicols cho phép ta trong một văn bản có thể đồng thời sử
dụng nhiều cột khác nhau một lúc. Tính chất của môi trường gồm có

• Có thể tạo được một số cột bất kì (đến 10 cột) và trải ra nhiều trang
một lúc.
• Khi môi trường kết thúc thì những cột ở trang cuối cùng được cân
đối bằng nhau.
• Môi trường này có thể chứa trong nó những môi trường khác như
figure hoặc minipage.
• Giữa hai cột có thể cho vào đường kẻ thẳng đứng với độ dày tùy
ta xác định.
• Định dạng có thể toàn cục hoặc là chỉ một cột riêng biệt nào đó
đều được.

\begin{multicols}{<số cột>}[<đầu đề>][<cách ra>] ...


\end{multicols}
Bình thường môi trường chỉ ra bao nhiêu cột:

7 8
\begin{multicols}{2}
Sóng bắt đầu từ gió \\ Gió bắt đầu từ đâu?\\
Em cũng không biết nữa\\ Khi nào ta yêu nhau
5.5. Định dạng văn bản nhiều cột 167

\end{multicols}

: 2

Sóng bắt đầu từ gió Em cũng không biết nữa


Gió bắt đầu từ đâu? Khi nào ta yêu nhau

Môi trường này có thể làm tiêu đề suốt qua các cột

7 8
\begin{multicols}{2}[{\centerline{\bf Thuyền và biển}}]
\noindent Lòng thuyền nhiều khát vọng \\
Và tình biển bao la \\ Thuyền đi hoài không mỏi \\
Biển vẫn xa... vẫn xa \\ Những đêm trăng hiền từ \\
Biển như cô gái nhỏ \\ Thầm thì gửi tâm tư \\
Quanh mạn thuyền sóng vỗ
\end{multicols}

: 2
Thuyền và biển

Lòng thuyền nhiều khát vọng Những đêm trăng hiền từ


Và tình biển bao la Biển như cô gái nhỏ
Thuyền đi hoài không mỏi Thầm thì gửi tâm tư
Biển vẫn xa... vẫn xa Quanh mạn thuyền sóng vỗ

Thông số trong môi trường multicol


Thông số trong môi trường ta có thể thay đổi
được bằng lệnh \setlength{...}{...} ví dụ như

R
\setlength{\permulticols}{60pt}.

\permulticols Mặc định 50pt, tính khoảng trống bên trái của
trang ít nhất bằng số này. Nếu yêu cầu này không đòi hỏi được

R
thì tạo ra lệnh làm trang mới \newpage.
\posmulticols Mặc định 20pt, như thông số trên đòi hỏi cho kết

R
thúc môi trường phải có khoảng trống là số này.
\multicolsep Mặc định 12.0pt plus 4.0pt minus 3.0pt, khoảng
trống trước và sau môi trường cần vào khoảng thông số này.
168 Chương 5. Công cụ định dạng cơ bản

\columnsep RMặc định 10pt, môi trường multicols tự động tính


toán số cột trên tổng chiều rộng của trang \linewidth, còn

R
khoảng cách giữa hai cột được tính là \columnsep.
\columnseprule 0pt, độ dày của nét kẻ đứng giữa các cột.

7 8
{\setlength{\columnseprule}{1pt}
\setlength{\columnsep}{15pt}
\begin{multicols}{3}[{\centerline{\bf Thuyền và biển}}]
\noindent Cũng có khi vô cớ \\ Biển ào ạt xô thuyền\\
(Vì tình yêu muôn thuở\\ Có bao giờ đứng yên?)\\
Chỉ có thuyền mới hiểu\\ Biển mênh mông nhường nào\\
Chỉ có biển mới biết \\ Thuyền đi đâu, về đâu.
\end{multicols}}

: 2
Thuyền và biển

Cũng có khi vô cớ yên?) Chỉ có biển mới biết


Biển ào ạt xô thuyền Chỉ có thuyền mới Thuyền đi đâu, về
(Vì tình yêu muôn hiểu đâu.
thuở Biển mênh mông
Có bao giờ đứng nhường nào

5.5.2. Định dạng trong cột trong môi trường multicols

Có những số đếm sau liên quan đến cột và dòng theo số đếm của

R
môi trường này, thay đổi bằng lệnh \setcounter{...}{...} như

collecmore Mặc định 0, nhóm các dòng khi có lệnh \newpage nửa

R
chừng trong văn bản.
unbalance Mặc định 0, lệnh liên quan là khi căn định dạng
\flushcolumns, môi trường cố gắng giữ cho các cột bằng nhau
theo chiều cao. Nếu có lệnh \raggedcolumns thì đáy mỗi cột có
thêm khoảng trống. Còn thông số này chỉ ra cột cuối cùng có bao

R
nhiêu dòng như ví dụ ở dưới đây.
columnbadness Mặc định 10001, thông báo lỗi cột bị chật.
5.5. Định dạng văn bản nhiều cột 169

finalcolumnbadness R Mặc định 9999, giá trị xấu của cột để thông

R
báo lỗi cho LATEX.
tracingmulticols Mặc định 0, thông số theo dõi thuật toán sắp
chữ của LATEX.

7 8
\begin{multicols}{2}[{\centerline{\bf Thuyền và biển}}]
\raggedright
Cũng có khi vô cớ \\ Biển ào ạt xô thuyền\\
(Vì tình yêu muôn thuở\\ Có bao giờ đứng yên?)\\
Chỉ có thuyền mới hiểu\\ Biển mênh mông nhường nào\\
Chỉ có biển mới biết \\ Thuyền đi đâu, về đâu.
\setcounter{unbalance}{2}
\end{multicols}

: 2
Thuyền và biển

Cũng có khi vô cớ Chỉ có biển mới biết


Biển ào ạt xô thuyền Thuyền đi đâu, về đâu.
(Vì tình yêu muôn thuở
Có bao giờ đứng yên?)
Chỉ có thuyền mới hiểu
Biển mênh mông nhường nào
CHƯƠNG 6

CÁC DẠNG BIỂU BẢNG

6.1. Cấu trúc bảng cơ bản trong LATEX . . . . . . . . . . . . . . . . . . . . . . . . 171


6.2. Gói lệnh array mở rộng môi trường tabular . . . . . . . . . . . . . 175
6.3. Gói lệnh tabularx tự động tính độ rộng cột. . . . . . . . . . . . . . 180
6.4. Gói lệnh delarray với ký hiệu biên mảng. . . . . . . . . . . . . . . . 183
6.5. Môi trường bảng tabbing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
6.6. Gói lệnh supertabular bảng dài nhiều trang . . . . . . . . . . . . 187
6.7. Gói lệnh longtable bảng nhiều trang tinh vi . . . . . . . . . . . . . 189
6.8. Một số gói lệnh sắp cột và hàng một bảng . . . . . . . . . . . . . 193
6.8.1. Gói lệnh dcolumn định nghĩa dóng cột . . . . . . . . . . 193
6.8.2. Gói lệnh hhline kết hợp đường kẻ ngang và kẻ dọc . . . .
195
6.9. Gói lệnh multirow sắp xếp dọc cột bảng . . . . . . . . . . . . . . . . 196
6.10. Điều chỉnh bảng với ô ngang toàn bộ cột . . . . . . . . . . . . . 198
6.11. Chú thích dưới bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
6.12. Bảng lồng trong bảng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

Dữ liệu cho một văn bản thường trình bầy một cách có hiệu quả
thông qua dạng bảng. Nhất là trong toán học thì dùng biểu bảng là
điều không thể tránh khỏi. LATEX có cung cấp hai môi trường cơ bản
tabular và array để xây dựng bảng. Ngoài ra còn môi trường tabbing
mở rộng của hai môi trường trên trong gói lệnh array cũng được mô
tả. Để thuận tiện hơn nữa cho việc dùng biểu bảng ta còn xét gói lệnh
tabularx ứng với tình thế phức tạp về bảng. Ta còn xét hai môi trường
supertabular và longtable cho phép tự động ngắt bảng theo các trang
văn bản. Ngoài ra một số gói nhỏ khác cũng được xem xét như gói
lệnh delarray tự tính toán được chiều cao biên bao quanh một bảng,
gói lệnh dcolumn cho phép ta gán dấu thập phân vào các số, gói lệnh
hhline cho ta làm các đường thước theo chiều ngang hoặc chiều dọc.
Trước khi xem xét khả năng mở rộng bảng ta điểm lại những cấu trúc
6.1. Cấu trúc bảng cơ bản trong LATEX 171

bảng mà LATEX đã có.

6.1. Cấu trúc bảng cơ bản trong LATEX


Môi trường tabular, tabular* và array là những công cụ cơ bản
tạo ra biểu bảng và ma trận. Cú pháp viết môi trường này là
\begin{array}[<vị trí>]{<loại cột>} <các hàng> \end{array}
\begin{tabular}[<vị trí>]{<loại cột>} <các hàng> \end{tabular}
\begin{tabular*}{<chiều rộng>}[<vị trí>]{<loại cột>}<các
hàng>\end{tabular*}
Môi trường array chỉ có tác dụng trong môi trường toán. Nhưng
ta gộp môi trường array ở đây vì các tác dụng của thông số của nó
giống hệt môi trường tabular. Phần trước rows gọi là phần khai báo
của bảng. Nghĩa của các thông số trên như sau:

<vị trí> Đối số vị trí bảng theo chiều dọc đối với dòng mà bảng được
đưa vào, đối số này có hai giá trị:
t Dòng đầu tiên của bảng gán ngang hàng với dòng ở phía ngoài
bảng.
b Dòng cuối cùng của bảng ngang hàng với dòng ở phía ngoài
bảng.
Không gán thông số gì, dòng giữa theo chiều cao của bảng gán

R
ngang hàng với dòng ngoài bảng.
<độ rộng> Đối số này chỉ có ở môi trường tabular* và xác định
toàn bộ chiều rộng của bảng. Những môi trường khác tabular và
array xác định chiều rộng theo nội dung văn bản chứa trong các

R
cột.
<loại cột> Đối số định dạng cột. Đối số này bắt buộc phải có cho

R
mỗi cột và các kí hiệu định dạng của cột là

R
l Nội dung cột được căn lề trái.

R
r Nội dung cột được căn lề phải.

R
c Nội dung cột được căn vào giữa.
p{<rộng cột>} Cột có chiều rộng <rộng cột>, dòng đầu
tiên của văn bản ngang hàng với dòng đầu tiên của các cột
172 Chương 6. Các dạng biểu bảng

khác, tương đương với lệnh \parbox[t]{<chiều rộng>}{

R
cột văn bản}.
*{<số>}{<loại cột>} Định dạng cột lặp lại <số> lần, ví dụ
*{5}{|c}| nghĩa là |c|c|c|c|c|.

Định dạng cho đường kẻ bảng bên trái hoặc bên phải và cả

R
khoảng trống bên trong cột là

R
| Kẻ đường thẳng đứng của cột.

R
|| Kẻ hai đường thẳng đứng cho cột.
@{<văn bản>} Chèn thêm <văn bản> vào mỗi ô trong cột.
Đối số này có ích khi ta thêm khoảng trắng vào mỗi ô
theo chiều ngang bằng lệnh @{\hspace{<chiều rộng>}} với
<chiều rộng> là đại lượng độ dài. Ta cũng có thể thêm
chiều rộng giữa các cột bằng cách @{\extracolsep{<chiều
rộng>}} lệnh này thêm vào cột một đại lượng <chiều rộng>,
những cột sau đó cũng được thêm vào như vậy cho đến khi
cột có lệnh mới khác. Riêng môi trường tabular* phải có
lệnh @{\extracolsep{\fill}} ở một cột nào đó trong phần
khai báo.

7 8 : 2
\begin{tabular}{|c|l@{ tuổi }| An 10 tuổi lớp 4
@{lớp }c|} Bẩy 12 tuổi lớp 5
An & 10 & 4 \\ Tùng 14 tuổi lớp 7
Bẩy & 12 & 5 \\
Tùng & 14 & 7 \\

R
\end{tabular}
<các hàng> Phần chứa nội dung chính của bảng. Mỗi cột được
đánh dấu bởi kí hiệu & và kết thúc dòng bằng \\, số cột được tạo
ra bằng với kí hiệu khai báo phần trên. Mỗi ô có thể bỏ trống và
các lệnh LATEX chỉ có tác dụng trong một ô này vì ngầm định là

R
mỗi ô nằm trong {...}. Các lệnh tác động lên dòng của bảng là

\hline Làm đường kẻ ngang trong môi trường bảng, được


đặt sau khai báo bảng và sau các lệnh kết thúc \\. Ta có thể
thực hiện kẻ hai đường ngang một lúc bằng chính lệnh này.
6.1. Cấu trúc bảng cơ bản trong LATEX 173

\cline{n - m} RKẻ đường ngang từ cột thứ n tới cột thứ m.

R
Lệnh cũng được đặt tại vị trí sau \\
\multicolumn{<một số>}{<loại cột>}{<văn bản>} Lệnh
chỉ có thể bắt đầu sau kí hiệu & và làm lại một hàng trong
bảng bằng cách lấy độ rộng của <một số> cột để điền <văn
bản> vào đó mà không làm các đường kẻ đứng, còn <loại
cột> là các giá trị l, c, r căn lề <văn bản>. Các bạn có thể
tìm thấy các ví dụ trong cuốn sách [1].
\vline Lệnh vẽ đường thẳng đứng trên một hàng của cột.

Ví dụ của những phần này các bạn có thể tìm trong [1]. Ta làm ví dụ
ứng dụng các lệnh trên (đây chỉ là một phần của thời khóa biểu).

7 8
\begin{tabular}{|c||c|c|c|c|}\hline
&\multicolumn{2} {c|}{6.45-9.15 pm}
&\multicolumn{2} {c|}{10.15-11.50 pm} \\ \cline{2-5}
&& Thầy giáo&&Thầy giáo \\ \cline{3-3}
Thứ & Môn& Phòng &Môn& Phòng\\ \hline \hline
&&Dr. Điển &&Dr. Dũng\\ \cline{3-3} \cline{5-5}
Hai & Lập trình Java & C14&Mạng máy tính&Lab1\\ \hline
&&Dr. Tâm &&Dr. Hương\\ \cline{3-3} \cline{5-5}
Ba & Toán rời rạc & C16&Tiếng Anh&C16\\ \hline
\end{tabular}

: 2
6.45-9.15 pm 10.15-11.50 pm
Thầy giáo Thầy giáo
Thứ Môn Phòng Môn Phòng
Dr. Điển Dr. Dũng
Hai Lập trình Java C14 Mạng máy tính Lab1
Dr. Tâm Dr. Hương
Ba Toán rời rạc C16 Tiếng Anh C16
Thông số bảng LATEX đã đặt
Một số thông số ngoài bảng được LATEX đặt mặc định
được liệt kê dưới đây. Ta có thể dùng một trong các lệnh
174 Chương 6. Các dạng biểu bảng

sau để thay đổi chúng, ví dụ \setlength{\tabcolsep}{4pt},


\addtolength{\arraycolsep}{2pt} hoặc là định nghĩa lại lệnh này

R
\renewcommand{\arraystretch}{factor}

\tabcolsep Một nửa độ rộng của mỗi cột trong môi trường
tabular, có giá trị mặc định là 6pt.

7 8 : 2
\begin{tabular}{|c|c|}
A B
A & B \\ C & D \\
C D
\end{tabular}\\
\setlength{\tabcolsep}{0.8cm} A B
\begin{tabular}{|c|c|} C D
A & B \\ C & D \\

R
\end{tabular}
\arraycolsep Một nửa độ rộng của mỗi cột trong môi trường

R
array, có giá trị mặc định là 5pt.
\arrayrulewidth Nét kẻ đậm hoặc mỏng cho đường ngang hoặc
đứng trong bảng, giá trị mặc định là 0.4pt. Lệnh có tác động lên
các lệnh khác như \vline, \hline, \cline

7 8 : 2
\setlength{\tabcolsep}{0.8cm}
\setlength{\arrayrulewidth}{1pt} A B
\begin{tabular}{|c|c|}\hline C D
A & B \\ \hline C & D \\ \hline

R
\end{tabular}
\doublerulesep Khoảng cách giữa hai đường kẻ liền nhau trong
bảng như trong phần khai báo có || và đường kẻ ngang liền nhau
\hline \hline, giá trị mặc định là 2pt.

7 8 : 2
\setlength{\tabcolsep}{0.8cm}
A B
\setlength{\doublerulesep}{6pt}
\begin{tabular}{|c||c|}\hline C D
A & B \\ \hline \hline
C & D \\ \hline

R
\end{tabular}
\arraystretch Lệnh co dãn khoảng cách giữa các hàng trong
6.2. Gói lệnh array mở rộng môi trường tabular 175

bảng theo tỷ lệ phóng, giá trị mặc định là 1. Nếu ta đặt giá trị

R
này là 1.5 thì khoảng rộng các hàng tăng lên 50%.
\extrarowheight Lệnh chỉ dùng cho môi trường array. Mỗi hàng
trong bảng được cộng thêm chiều cao của lệnh này.

6.2. Gói lệnh array mở rộng môi trường tabular


Khi ta đặt lệnh usepackage{array} ở đầu tệp văn bản thì môi
trường tabular và array vẫn có dạng như cũ
\begin{array}[<vị trí>]{<loại cột>} <các hàng> \end{array}
\begin{tabular}[<vị trí>]{<loại cột>} <các hàng>
\end{tabular}
\begin{tabular*}{<chiều rộng>}[<vị trí>]{<loại cột>} <các
hàng>
\end{tabular*}
Các đối số như phần trước vẫn còn giá trị, nhưng được gán thêm
những chức năng mới cho tùy chọn <loại cột>.

R
Thông số tác động lên cột của bảng

| Kẻ đường thẳng đứng giữa các cột. Khoảng cách giữa nội dung
hai cột rộng theo độ lớn của độ rộng của dòng văn bản, chứ không

R
cố định như nguyên bản của LATEX
m{<độ rộng>} Đặt độ rộng cột là <độ rộng>. Mỗi ô trong cột
được căn vào giữa theo chiều dọc của cột. Điều này gần như là
\parbox{<độ rộng>}.

7 8 : 2
\begin{tabular}
x x x
{|m{1cm} |m{1cm}|m{1cm}|}\hline y y y
x x x zzz
x x x x x x x x x & yyy
xxx
y y y y y y& z z z\\ \hline

R
\end{tabular}
b{<độ rộng>} Đặt độ rộng cột là <độ rộng>. Mỗi ô trong cột được
căn xuống dưới theo chiều dọc của cột. Điều này gần như là
\parbox[b]{<độ rộng>}.
176 Chương 6. Các dạng biểu bảng

7 8 : 2
\begin{tabular}
xxx
{|b{1cm} |b{1cm}|b{1cm}|}\hline
xxx yyy
x x x x x x x x x &
xxx yyy zzz
y y y y y y& z z z \\ \hline
\end{tabular}
Như phần trước đã biết tùy chọn p{<độ rộng>} cột được căn lên
trên.

7 8 : 2
\begin{tabular}
xxx yyy zzz
{|p{1cm} |p{1cm}|p{1cm}|}\hline
xxx yyy
x x x x x x x x x &
xxx
y y y y y y& z z z \\ \hline

R
\end{tabular}
>{<lệnh>} Có thể dùng trước l, r, c, p{...}, m{...},
b{...}. Đưa đại lượng <lệnh> vào trước mỗi phần tử trong các ô
của cột. Ví dụ phóng đại lượng trong cột bằng >{\large}

7 8 : 2
\begin{tabular}{|>{\large\bf}l
|>{\large}c|>{\it}c|}\hline
An 10 4
An & 10 & 4 \\ \hline Bẩy 12 5
Bẩy & 12 & 5 \\ \hline Tùng 14 7
Tùng & 14 & 7 \\ \hline
\end{tabular}
Để cho các đường kẻ bảng không sát vào chữ
người ta đặt lệnh thêm chiều cao trước mỗi bảng
\setlength{\extrarowheight}{4pt}.

7 8 : 2
\setlength{\extrarowheight}{4pt}
\begin{tabular}{|>{\large\bf}l An 10 4
|>{\large}c|>{\it}c|} Bẩy 12 5
\hline An & 10 & 4\\ \hline
Tùng 14 7
Bẩy & 12 & 5\\ \hline
Tùng & 14 & 7\\ \hline
\end{tabular}
Trong mỗi ô của các cột với các thông số p, m, b có giá trị mặc
6.2. Gói lệnh array mở rộng môi trường tabular 177

định của thụt đầu dòng \parindent 0pt. Ta có thể đặt lại cột.

7 8: 2
\begin{tabular}{|>p{2cm}
abcef a b c e f g
|p{2cm}|}\hline
ghiklm hiklmn
a b c e f g h i k l m n o p q&
nopq opq
a b c e f g h i k l m n o p q\\
\hline

R
\end{tabular}
<{<lệnh>} Có thể dùng sau l, r, c, p{...}, m{...}, b{...}.
Đưa đại lượng <lệnh> vào bên phải mỗi phần tử trong các ô của
cột.

7 8 : 2
\begin{tabular}{|>{\bfseries}l
An 10 tuổi *
|l@{ tuổi }|c<{*}|}
Bẩy 12 tuổi *
An&10 &\\ Bẩy&12 &\\
Tùng 14 tuổi *
Tùng&14 &\\
\end{tabular}
!{<lệnh>} Có thể đặt bất cứ đâu tương ứng với vị trí của |. Khi đó đại
lượng <lệnh> sẽ được đưa vào thay cho đường thẳng đứng.

Những ví dụ cho các thông số trên:


Các tùy chọn > và < ban đầu với mục đích là các cột có cần môi
trường toán thì chỉ khai báo ở phần đầu như sau >{$}c<{$}

7 8 : 2
\setlength{\extrarowheight}{4pt}
64 chu vi trái đất
\begin{tabular}{|>{$}l<{$}|l|}\hline 10
10^{64}&chu vi trái đất\\ \hline 1037 chu vi mặt trăng
10^{37}&chu vi mặt trăng\\\hline
\end{tabular}
Sự khác nhau giữa các thông số r@{\hspace{5mm}}l và
r!{\hspace{5mm}} là cho khoảng cách các cột đúng bằng 5mm, một
đằng là cộng vào mỗi ô của cột là 5mm.
178 Chương 6. Các dạng biểu bảng

7 8 : 2
\begin{tabular}{r@{\hspace{5mm}}l}
\fbox{Ô phải}&\fbox{Ô trái}\\ Ô phải Ô trái
\end{tabular}\\
\begin{tabular}{r!{\hspace{5mm}}l}
\fbox{Ô phải}&\fbox{Ô trái}\\ Ô phải Ô trái
\end{tabular}
Thay đổi độ dày đường kẻ đứng ta cũng dùng thông số @{<lệnh>}
thay <lệnh> bằng lệnh của TEX là \vrule width 3pt vẽ đường thẳng
đứng tự động cho các ô.

7 8 : 2
\begin{tabular}
An Bẩy Tùng
{|c!{\vrule width 3pt}c|c|}\hline
An & Bẩy &Tùng \\ \hline 10 12 14
10&12&14\\ \hline
\end{tabular}
Những cột cho độ rộng cố định bằng thông số p{...} đều căn lề
bên trái. Ta muốn các cột có độ rộng cho trước và căn vào giữa hoặc
sang phải thì làm như thế nào. Cách làm sau đây cũng phù hợp cho
ngắt các từ trong các cột có độ rộng hẹp. Vì môi trường tabular đều
định nghĩa lại lệnh \\. Bằng cách sau lưu giữ lệnh \\ cho môi trường
này và sau đó đặt lại \\ với mặc định:
\newcommand{\PreBackslash}[1]{\let\temp=\\#1\let\\=\temp}
Như vậy trong môi trường tabular vẫn còn kiểm soát được ngắt từ,
căn lề phải, trái và quy tâm.

7 8
\let\PBS=\PreBackslash
\begin{tabular}{|>{\PBS\raggedleft\hspace{0pt}}p{2cm}
|>{\PBS\centering\hspace{0pt}}p{2cm}
|>{\PBS\raggedright\hspace{0pt}}p{2cm}|}\hline
Giải đất này hẹp&mầu mỡ tốt tươi&cho nhiều hoa trái\\\hline
Bên trái là đây rồi&Căn giữa làm gì?&Bên phải thì
hơn\\\hline
\end{tabular}
6.2. Gói lệnh array mở rộng môi trường tabular 179

: 2
Giải đất mầu mỡ tốt cho nhiều
này hẹp tươi hoa trái
Bên trái là Căn giữa Bên phải
đây rồi làm gì? thì hơn

Điều khiển khoảng cách ngang giữa các cột


Môi trường tabular kiểm soát độ rộng của cột bằng các vạch ngăn
cách và nội dung của cột đó. Ta có một số khả năng điều khiển được
khoảng cách vạch của từng cột. Bằng thông số @{} trên đầu bảng ta bỏ
đi khoảng vạch để trống theo chiều ngang giữa các cột.

7 8 : 2
\begin{tabular}{l l}
Cột 1 Cột 2
Cột 1&Cột 2\\ Cột 1&Cột 2\\
Cột 1 Cột 2
\end{tabular}\\
\begin{tabular}{@{}l l@{}} Cột 1 Cột 2
Cột 1&Cột 2\\ Cột 1&Cột 2\\ Cột 1 Cột 2
\end{tabular}\\

7 8 : 2
\begin{tabular}{@{}l @{}l@{}}
Cột 1Cột 2
Cột 1&Cột 2\\ Cột 1&Cột 2\\
Cột 1Cột 2
\end{tabular}
Khi có đường kẻ bảng việc kiểm soát khoảng trắng phía trước
đường kẻ và phía sau đường kẻ cũng tương tự

7 8 : 2
\begin{tabular}{|l |l|}\hline
Cột 1 Cột 2
Cột 1&Cột 2\\\hline Cột 1&Cột 2\\ \hline
\end{tabular} Cột 1 Cột 2
\begin{tabular}{|@{}l |@{}l|}\hline Cột 1 Cột 2
Cột 1&Cột 2\\\hline Cột 1&Cột 2\\ \hline Cột 1 Cột 2
\end{tabular} Cột 1Cột 2
\begin{tabular}{|@{}l@{}|@{}l|}\hline Cột 1Cột 2
Cột 1&Cột 2\\\hline Cột 1&Cột 2\\ \hline Cột 1Cột 2
\end{tabular} Cột 1Cột 2
\begin{tabular}{|@{}l@{}|@{}l@{}|}\hline
Cột 1&Cột 2\\\hline Cột 1&Cột 2\\ \hline
\end{tabular}
180 Chương 6. Các dạng biểu bảng

Định nghĩa một loại cột mới


Ta biết một cột toàn nằm trong môi trường toán thì ta đưa vào đầu
cột đó đại lượng >{$}c<{$}. Một cách tổng quát có một loại cột mỗi ô
đều được đưa vào một đại lượng cố định nào đó (ví dụ như ký hiệu $).
Khi đó người ta có thể xây dựng một loại cột mới như các tùy chọn l,
c, r bằng lệnh:
\newcolumntype{<loại cột>}[<số đối số>]{<chức năng>}
ở đây <loại cột> là một chữ cái, chỉ ra loại cột. <số đối số> đối số
tùy chọn chỉ ra số đối số cần có và <chức năng> là chức năng của loại
cột này. Ta lấy một ví dụ làm thêm một loại cột môi trường toán căn vào
giữa.

7 8 : 2
\newcolumntype{t}{>{$}c<{$}}
a11 và a12
\begin{tabular}{|t |c |t|}\hline
a_{11}&và & a_{12}\\ \hline a21 và a22
a_{21}&và & a_{22}\\ \hline
\end{tabular}
Dùng cách định nghĩa cột loại mới thuận tiện cho ta sử dụng vì
thường gặp rất nhiều cột cùng loại. Tương tự như trên các bạn có
thể tạo ra cột trong môi trường toán căn về bên trái hoặc bên phải:
\newcolumntype{L}{>{$}l<{$}} và \newcolumntype{R}{>{$}r<{$}}.
Cách áp dụng những loại cột đồng thời với các loại cột đã có sẵn.

6.3. Gói lệnh tabularx tự động tính độ rộng cột


Gói lệnh tabularx (đưa gói lệnh vào đầu văn bản
\usepackage{tabularx}) của David Carlisle thực hiện môi trường
tabular* tự động tính mọi độ rộng của các cột bằng nhau phụ
thuộc vào chiều rộng của bảng đã cho. Mỗi cột được đánh dấu
bằng ký tự X đối số đầu bảng. Với bảng bốn cột có phần đầu
\begin{tabularx}{100mm}{|X|X|X|} phần còn lại của bảng không có
gì thay đổi cho ta kết quả
6.3. Gói lệnh tabularx tự động tính độ rộng cột 181

Nếu Anh không Nếu Anh không Nếu Anh không


gặp Em gặp Em gặp em
Làm sao Anh biết Làm sao Anh Làm sao Anh với
được thấy được tới
Có một vầng Hai ngôi sao có một vầng mây
trăng khác nước đen mềm
Lại sáng giữa ban ở gần kề ngay bên Tỏa hương thơm
ngày đêm ngày

Khi thay đổi bằng chiều rộng của trang


\begin{tabularx}{\linewidth}{|X|X|X|}

Nếu Anh không gặp Nếu Anh không gặp Nếu Anh không gặp
Em Em em
Làm sao Anh biết Làm sao Anh thấy Làm sao Anh với tới
được được
Có một vầng trăng Hai ngôi sao có nước một vầng mây đen
khác mềm
Lại sáng giữa ban ở gần kề ngay bên Tỏa hương thơm đêm
ngày ngày

Những chú ý trong môi trường tabularx


Trong một bảng có các cột hẹp muốn dóng phải, dóng trái bằng các
lệnh \raggedright hoặc \raggedleft, môi trường tabularx cung cấp
một lệnh \arraybackslash để có thể sử dụng các lệnh trên vào các cột.
Vì các lệnh trên không tương thích với lệnh \\ trong bảng, do đó ta
dùng lệnh sau để định nghĩa lại loại cột mới như:
\newcolumntype{Y}{>{\small\raggedright\arraybackslash}X}
khi đó ta dùng loại cột này trong môi trường tabularx.
Tuy loại cột X được gán cho tất cả trong bảng có độ rộng bằng nhau
nhưng ta có thể thay chúng với độ rộng khác nhau khi ta khai báo phần
đầu như ví dụ có hai cột, tổng độ dài bằng 2 với một cột bằng 0.8 độ dài
chiều rộng và cột kia còn lại 1.2 độ dài chiều rộng.

7 8
\tracingtabularx
\noindent\begin{tabularx}{\linewidth}
{|>{\setlength{\hsize}{0.8\hsize}}X|
182 Chương 6. Các dạng biểu bảng

>{\setlength{\hsize}{1.2\hsize}}X|}
Những từ dài được ngắt &
có phải những từ dài quá không?\\
Cột thứ nhất ở đây&
Cột thứ hai ở đây nhỉ\\
\end{tabularx}

: 2
Những từ dài được ngắt có phải những từ dài quá không?
Cột thứ nhất ở đây Cột thứ hai ở đây nhỉ
Sự khác nhau giữa môi trường tabularx và tabular*
Hai môi trường tabularx và tabular* cùng cho bảng các cột có độ
rộng bằng nhau. Nhưng có những điểm giống và khác nhau sau đây:

• tabularx thay đổi chiều rộng của cột, còn tabular* tính khoảng
rộng phía trong cột.

7 8 : 2
\begin{tabular*}{30mm}{|l|l|l|}
A B C
A&B&C\\ \end{tabular*}
\begin{tabularx}{30mm}{|X|X|X|} A B C
A&B&C\\ \end{tabularx}
• Cả hai môi trường đều tự lồng nhau được không có giới hạn.
Nhưng môi trường tabularx trong nó lại lồng môi trường nữa
thì phải cho môi trường sau vào trong {...}.

7 8 : 2
\begin{tabularx}{30mm}{|X|X|X|}
A B C
A&B&C\\
A B C
D&E&{ D E
F G H
\begin{tabularx}{30mm}{X X |X|}
A&B&C\\ F&G&H\\
\end{tabularx}}\\
\end{tabularx}
• Thân của môi trường tabularx có thể dùng lệnh \verb và \verb*
nhưng sẽ tạo ra khoảng trắng giữa các từ trong chúng không
chính xác.
• tabular* là môi trường nguyên thủy của TEX , còn tabularx cố
6.4. Gói lệnh delarray với ký hiệu biên mảng 183

gắng tính toán chia cột cho đều nhất, nên dùng nhiều môi trường
sau máy sẽ chạy rất chậm.

6.4. Gói lệnh delarray với ký hiệu biên mảng


Khi ta dùng gói lệnh array còn thiếu sự thay đổi ký hiệu biên, ta
phải xem đến gói lệnh delarray của David Carlisle. Trong gói này ẩn
hai lệnh \left và \right để xây dựng ký hiệu biên cho mảng:

7 8: 2
$$\left(\begin{array}{c c} A B
 
A&B\\ C&D\\ C D
\end{array}\right)$$

Mọi ký hiệu biên có thể khai báo ở phần đầu. Ta có thể định nghĩa
môi trường tương tự như trong AMSTEX:
\newcolumntype{L}{>{$}l<{$}}
\newenvironment{Case}{\begin{array}\{{lL}.}{\end{array}}
\newenvironment{Matrix}{\begin{array}\vert{*{20}{c}}\vert}
{\end{array}}
\newenvironment{Pmatrix}{\begin{array}({*{20}{c}})}{\end{array}}

7 8: 2
$$|x|=\begin{Case}
x, nếu x ≥ 0;
(
x, & nếu $x\ge 0$;\\[2mm]
-x,& ngược lại.\\ x=
− x, ngược lại.
\end{Case}$$

7 8: 2
$$A=\begin{Matrix} 1 − a2

0
A =

1 − b2

1-a^2&0\\ 0
0&1-b^2\\
\end{Matrix}$$
7 8: 2
$$ B=\begin{Pmatrix}
1 − a2
 
1-a^2&0\\ 0
B=
0&1-b^2\\ 0 1 − b2
\end{Pmatrix}$$

Ngoài ra các thông số cho vị trí của mảng có thể chỉ ra


184 Chương 6. Các dạng biểu bảng

7 8 : 2
$$\left(\begin{array}[t]{c}
   
1\\ 2\\ 3\end{array}\right)   7
\left(\begin{array}[c]{c}  
  4 
 8 

4\\ 5\\ 6\end{array}\right)  1  5  9 
   
\left(\begin{array}[b]{c}  2  6  
7\\ 8\\ 9\end{array}\right)$$ 3

6.5. Môi trường bảng tabbing


Môi trường bảng tabbing có cấu trúc
\begin{tabbing}
<các hàng trong bảng>
\end{tabbing}
Môi trường dùng lệnh \= để đặt mốc cho khoảng tab, nếu ta đặt
\=Họ và tên thì độ rộng của tab này bằng chiều rộng của toàn bộ cụm
từ Họ và Tên; kết thúc một dòng trong bảng là \\; đó là các lệnh đầu
tiên định khoảng tab, còn từ dòng sau trở đi nhảy qua các khoảng tab
bằng lệnh \>.

7 8
\begin{tabbing}
STT\qquad\=Họ và Tên\hspace{1cm}\qquad\=Ngày sinh
\qquad\=Quê quán\\ [0.8ex]
1\>Nguyễn Hữu Hiếu\>26-11-1981\>Hải Phòng\\
2\>Mai Khánh Linh\>30-2-1983\>Hà Nội\\
\end{tabbing}

: 2

STT Họ và Tên Ngày sinh Quê quán


1 Nguyễn Hữu Hiếu 26-11-1981 Hải Phòng
2 Mai Khánh Linh 30-2-1983 Hà Nội

Khi làm bảng tab ta không muốn in ra hàng đầu tiên dùng cho định
khoảng bảng thì ta đặt lệnh \=\kill vào ô cuối cùng.
6.5. Môi trường bảng tabbing 185

7 8
\begin{tabbing}
STT\qquad\=Họ và Tên\hspace{1cm}\qquad\=Ngày sinh\qquad
\=Quê quán\=\kill\\ [0.8ex]
1\>Nguyễn Hữu Hiếu\>26-11-1981\>Hải Phòng\\
2\>Mai Khánh Linh\>30-2-1983\>Hà Nội\\
\end{tabbing}

: 2

1 Nguyễn Hữu Hiếu 26-11-1981 Hải Phòng Khi đến


2 Mai Khánh Linh 30-2-1983 Hà Nội

một hàng muốn thêm một khoảng tab nữa trong bảng, hay định nghĩa
lại khoảng tab của cột đó, thì ta tiến hành định nghĩa lại.

7 8
\begin{tabbing}
Cột cũ 1 \=Cột cũ 2\\
Cột trái \> Cột giữa đây rồi \= Cột thêm\\
Cột mới 1 \=Cột mới 2 \> Cột cũ 3\\
Cột 1 \> Cột 2 \> Cột 3\\
\end{tabbing}

: 2

Cột cũ 1 Cột cũ 2
Cột trái Cột giữa đây rồi Cột thêm
Cột mới 1 Cột mới 2 Cột cũ 3
Cột 1 Cột 2 Cột 3

Chú ý: Trong môi trường tabbing còn một số lệnh khác, nhưng sử
dụng nó rất phức tạp và không hiệu quả nên chúng tôi không đề cập ở
đây như lệnh \+ hoặc \- hay cặp lệnh \+\+ ở cuối dòng hoặc đầu dòng
bỏ qua hai khoảng tab.
Trong môi trường tabbing những lệnh \hfill, \hrulefill và
\dotfill không có tác dụng.
186 Chương 6. Các dạng biểu bảng

Môi trường program


Một ứng dụng của môi trường tabbing là gói lệnh program của
tác giả Martin Ward. Gói lệnh này dùng liệt kê chương trình nguồn
bằng Pascal được đẹp và rõ ràng. Trong gói lệnh này có hai môi trường
program và programbox, các lệnh từ khóa trong Pascal được in đậm.
Trong môi trường program mỗi dòng không cần chỉ ra, mà lệnh \\ là
cách dòng.

7 8: 2
\begin{program}\label{one}%
\mbox{Hàm exponent nhanh:} \\
\BEGIN % Hàm exponent nhanh:
\FOR i:=1 \TO 10 \STEP 1 \DO begin for i := 1 to 10 step 1 do
|print|(|expt|(2,i)); \\ print(expt(2, i ));
|newline|() \OD newline() od
\WHERE where
\FUNCT |expt|(x,n) \BODY funct expt( x, n) ≡
\EXP z:=1; z := 1;
\WHILE n \ne 0 \DO while n 6= 0 do
\WHILE |even|(n) \DO while even(n) do
n:=n/2; x:=x*x \OD; n := n/2; x := x ∗ x od;
\label{foo} n := n − 1; z := z ∗ x od;
n:=n-1; z:=z*x \OD; z .
z \ENDEXP \ENDFUNCT end
\END\label{last}
\end{program}

Môi trường này có lệnh \NumberProgramstrue ở đầu chương trình


thì chương trình được đánh số các dòng. Lệnh \mbox{...} là giới thiệu
đầu vào, lệnh \rcomment{...} những lời chú thích được in ra bên cạnh.
Môi trường programbox tương tự như môi trường trên, nhưng
chương trình chỉ được nằm trong một trang giấy.
So sánh môi trường tabbing và môi trường tabular
Hai môi trường này cùng thể hiện bảng dữ liệu với mục đích khác
nhau, chúng có những khác biệt cơ bản sau đây:
• Môi trường tabbing không tổng quát bằng môi trường tabular,
nó chỉ được thực hiện như một đoạn riêng, trong khi đó tabular
đặt được ở bất cứ đâu trong văn bản kể cả trong môi trường toán.
• tabbing có thể ngắt trang trong môi trường của mình, còn
6.6. Gói lệnh supertabular bảng dài nhiều trang 187

tabular cơ bản thì không được và chỉ trên một trang.


• Người dùng tabbing phải chỉ ra khoảng cách các cột cụ thể, còn
tabular tính toán một cách tự động độ rộng các cột.
• Với tabbing người dùng có thể dễ dàng thay đổi độ rộng cột, rất
thích hợp với người in các chương trình nguồn.
• tabbing không cho lồng vào nhau, trong khi đó tabular thì lồng
bao nhiêu cũng được và ở bất cứ vị trí nào.

6.6. Gói lệnh supertabular bảng dài nhiều trang


Gói lệnh supertabular được khởi đầu bởi Theo Jurriens, được
chỉnh lý bởi Johannes Braams. Gói lệnh này đưa ra môi trường
supertabular. Thực chất bên trong môi trường này là môi trường
tabular, nhưng nó luôn luôn tính toán lại chiều cao sau mỗi lệnh \\.
Nếu bảng đã đạt đến giá trị \textheight thì môi trường cho thêm lệnh
\end{tabular} và bắt đầu trang mới, đưa tiêu đề đầu bảng vào đó và
tiếp tục môi trường tabular. Nghĩa là cùng với độ rộng của cột đi tiếp
đến hết bảng gồm nhiều trang liên tiếp.

R
Những lệnh mới trong môi trường supertabular gồm:

\tablehead{...} Định nghĩa tiêu đề bảng, ngoại trừ định nghĩa


trong dòng lệnh \tablefirsthead. Thông số được nằm trên các
cột thành dòng và chấp nhận xuống dòng bằng \\, kể cả những

R
lệnh kẻ như \hline.
\tablefirsthead{...} Định nghĩa dòng đầu tiên của tiêu đề.
Lệnh này là tùy chọn, văn bản trong lệnh này khác hoàn toàn với

R
lệnh trước.
\tabletail{...} Định nghĩa văn bản hay đường kẻ được chèn
vào cuối mỗi trang, nó được chèn vào trước nội dung của lệnh

R
\tablelasttail nếu có.
\tablelasttail{...} Định nghĩa văn bản hoặc đường vẽ vào
cuối cùng của môi trường supertabular. Lệnh này là tùy chọn,

R
nếu nội dung cần chèn cuối cùng bảng có khác \tabletail.
\topcaption{...} Cung cấp tiêu đề và số thứ tự bảng được cài
188 Chương 6. Các dạng biểu bảng

R
vào đầu bảng.
\bottomcaption{...} Cung cấp tiêu đề và số thứ tự bảng được

R
cài vào cuối bảng.
\tablecaption{...} Cung cấp tiêu đề và số thứ tự bảng được cài
vào mặc định đầu bảng.

Ta xét ví dụ, lệnh được thể \tablecaption{Danh sách VĐV}


hiện ở cột bên cạnh. Khi \tablehead{\hline}
các bạn biên dịch sẽ kéo dài \tabletail{\hline}
thành hai trang được mô \begin{supertabular}{|l|p{3cm}|}
phỏng như hình 6.1. 001&Nguyễn Văn Bảy\\
002&Nguyễn Hữu Hiếu\\
.......
019&Nguyễn Huy Trung\\
\end{supertabular}

Bảng 5.2. Danh sách VĐV


001 Nguyễn Văn Bảy 013 Nguyễn Hà Ly
002 Nguyễn Hữu Hiếu 014 Nguyễn Thu Hồng
003 Trần Văn An 015 Trạch Văn Đoành
004 Lê Thị Thu 016 Lê Trung Dũng
005 Lê Văn Đang 017 Hoàng Văn Nghiên
006 Vũ Văn Hoàng 018 Nguyễn Hữu Trợ
007 Hoàng Thị Nghê 019 Nguyễn Huy Trung
008 Cao Thị Lớn
009 Nguyễn Thị Hạnh
010 Nguyễn Văn Đoan
011 Lê Văn Hướng
012 Nguyễn Hữu Long
1 2

Hình 6.1: Mô phỏng môi trường bảng supertabular

Ví dụ cho môi trường supertabular*


Độ rộng của môi trường này cần được cố định bằng \linewidth.
Tương tự như ví dụ trên ta có hình 6.2.
\tablecaption{Danh sách VĐV}
6.7. Gói lệnh longtable bảng nhiều trang tinh vi 189

\tablefirsthead{\hline STT & Họ và Tên\\ \hline}


\tablehead{\hline\multicolumn{2}{|l|}{%
\small\slshape tiếp tục từ trang trước}\\ \hline
STT&Họ và Tên\\ \hline }
\tabletail{\hline\multicolumn{2}{|r|}{%
\small\slshape tiếp tục ở trang sau}\\ \hline }
\tablelasttail{\hline}
\begin{supertabular*}{\linewidth}{
|l|@{\hspace*{2mm}\extracolsep{\fill}}l|}
001&Nguyễn Văn Bảy\\
002&Nguyễn Hữu Hiếu\\ .......\\ 019&Nguyễn Huy Trung\\
\end{supertabular*}

Bảng 5.2. Danh sách VĐV


STT Họ và Tên tiếp tục từ trang trước
001 Nguyễn Văn Bảy STT Họ và Tên
002 Nguyễn Hữu Hiếu 013 Nguyễn Hà Ly
003 Trần Văn An 014 Nguyễn Thu Hồng
004 Lê Thị Thu 015 Trạch Văn Đoành
005 Lê Văn Đang 016 Lê Trung Dũng
006 Vũ Văn Hoàng 017 Hoàng Văn Nghiên
007 Hoàng Thị Nghê 018 Nguyễn Hữu Trợ
008 Cao Thị Lớn 019 Nguyễn Huy Trung
009 Nguyễn Thị Hạnh
010 Nguyễn Văn Đoan
011 Lê Văn Hướng
012 Nguyễn Hữu Long
tiếp tục ở trang sau
1 2

Hình 6.2: Mô phỏng môi trường supertabular*

6.7. Gói lệnh longtable bảng nhiều trang tinh vi


Gói lệnh longtable của David Carlisle. Giống như môi trường
tabular và supertabular truyền thống. Gói lệnh này có môi trường
190 Chương 6. Các dạng biểu bảng

cùng tên với gói lệnh longtable, số đếm trong lệnh \caption được
hòa nhập với môi trường bảng table và được liệt kê trong lệnh
\listoftables.
Sự khác nhau giữa môi trường longtable và supertabular là ở bên
trong khi biên dịch, môi trường longtable đã dùng tệp có đuôi *.aux
để ghi những thông số của mình về độ dài rộng của bảng ra đó. Nếu
ta dùng lệnh \setlongtables thì nhiều khi lấy thông số từ tệp *.aux
không được đúng đắn khi chạy lần thứ nhất, nên chú ý phải chạy hai
lần LATEX thì lần sau thông số mới lấy vào đúng. Điều này nhắc ta trước
khi in phải chạy ít nhất hai lần biên dịch.
Để dễ so sánh ta lấy lại danh sách ở các môi trường ví dụ trên áp
đặt cho môi trường longtable

\setlongtables 001&Nguyễn Văn Bảy\\


\begin{longtable}{|l |l |} 002&Nguyễn Hữu Hiếu\\
\caption*{Danh sách VĐV}\\ \hline ....
\endhead \hline 019&Nguyễn Huy Trung\\
\endfoot \end{longtable}

Danh sách VĐV Danh sách VĐV


001 Nguyễn Văn Bảy 013 Nguyễn Hà Ly
002 Nguyễn Hữu Hiếu 014 Nguyễn Thu Hồng
003 Trần Văn An 015 Trạch Văn Đoành
004 Lê Thị Thu 016 Lê Trung Dũng
005 Lê Văn Đang 017 Hoàng Văn Nghiên
006 Vũ Văn Hoàng 018 Nguyễn Hữu Trợ
007 Hoàng Thị Nghê 019 Nguyễn Huy Trung
008 Cao Thị Lớn
009 Nguyễn Thị Hạnh
010 Nguyễn Văn Đoan
011 Lê Văn Hướng
012 Nguyễn Hữu Long
1 2

Hình 6.3: Mô phỏng môi trường longtable

Những thông số điều khiển toàn cục trong bảng được đặt sau lệnh
6.7. Gói lệnh longtable bảng nhiều trang tinh vi 191

\begin{longtable}

R
Những thông số

R
\LTleft Cách lề bên trái, giá trị mặc định là \fill.

R
\LTright Cách lề bên phải, giá trị mặc định là \fill.

R
\LTpre Cách trước bảng, giá trị mặc định là \bigskipamount.

R
\LTpost Cách sau bảng, giá trị mặc định \bigskipamount.
\LTchuksize Số hàng được hạn chế trên 1 trang, giá trị mặc định

R
20.
\LTcapwidth Độ rộng của dòng chứa tiêu đề bảng, giá trị mặc định
4in.

R
Đối số tùy chọn của \begin{longtable}

Không có tùy chọn thì thực hiện như \LTleft và \LTright, bình

R
thường bảng căn vào giữa.

R
[c] Bảng căn vào trung tâm.

R
[l] Bảng đẩy về phía trái.
[r] Bảng đẩy về phía phải.

R
Lệnh phía trong môi trường longtable

R
\endhead Dòng văn bản xuất hiện trên đỉnh mỗi trang.

R
\endfirsthead Dòng văn bản xuất hiện ở trang đầu tiên.

R
\endfoot Dòng văn bản xuất hiện ở đáy mỗi trang.
\endlastfoot Dòng văn bản xuất hiện ở đáy bảng trang cuối cùng.

R
R
\kill Dòng không xuất hiện in ra nhưng để tính độ rộng cột.
\caption{foo} Tiêu đề bảng dạng "Bảng xx:foo" trong tệp danh

R
sách bảng.
\caption[bar]{foo} Tiêu đề bảng dạng "Bảng xx:foo" với bar

R
trong danh sách bảng.
\caption[]{foo} Tiêu đề bảng dạng "Bảng xx:foo" không đưa vào
tệp danh sách các bảng.
192 Chương 6. Các dạng biểu bảng

\caption*{foo} R Tiêu đề bảng dạng "foo" không đưa vào danh

R
sách bảng.
\newpage cho phép ngắt trang và bảng tại đây.

Ta thảo luận một số lệnh lạ tại đây:


\setcouter{LTchunksize}{<số hàng>}: Theo mặc định TEX tính 20
dòng cho một bảng trên một trang. Ta có thể đặt lại ngắt dòng cho
mỗi trang ví dụ như \setcouter{LTchunksize}{10}, nếu làm như vậy
nhiều khi ngắt trang không được thực hiện. Khi TEX còn nhiều bộ nhớ
thì \LTchunksize đặt số lớn hơn và TEX chạy nhanh hơn.
\setlongtables: Khi ta đặt lệnh này trước bảng, LATEX sử dụng thông
tin chạy lần trước về độ rộng bảng của lần chạy trước. Lệnh này nên sử
dụng khi văn bản phiên bản cuối cùng rồi hoặc ta cố tình thay đổi độ
rộng.
\caption[<tiêu đề ngắn>]{<tiêu đề đầy đủ>} Lệnh \caption hoặc
\caption* thực chất được định nghĩa ngầm bằng thực thể đặc biệt
\multicolumn.
\multicolumn{n}{c}{\parbox{\LTcapwidth}{...}}
ở đây n là số cột của bảng. Độ rộng của tiêu đề bảng có thể kiểm
soát bằng định nghĩa lại lệnh \LTwidth. Ta có thể đặt ở đầu tệp văn
bản \setlength{\LTcapwidth}{width}, mặc định của thông số này là
4in. Giống như môi trường figure hoặc table thông số tùy chọn trong
ngoặc vuông có thể khác với tiêu đề của bảng, ngắn gọn hơn.
Mặc định bảng môi trường longtable được căn vào giữa, còn giá
trị mặc định của các lệnh \LTleft và \LTright là \fill. Ta có thể
đặt lại các thông số này ví dụ như \setlength{\LTleft}{0pt} và
\setlength{\LTright}{\fill}.
So sánh giữa môi trường supertabular và longtable khi ta lập hai
môi trường ra bảng giống hệt nhau, nhưng việc sắp sếp độ dài của các
bảng này trên ba trang sẽ khác nhau, môi trường supertabular cố gắng
sắp xếp các trang có độ dài bằng nhau, nên nhiều khi độ dài mỗi trang
sẽ ngắn hơn bình thường, còn môi trường longtable cứ lần lượt căn
hết độ dài trang mới cắt sang trang mới. Các bạn thử hai bảng sau với
dữ liệu khoảng hai trang rưỡi sẽ thấy sự khác nhau.
6.8. Một số gói lệnh sắp cột và hàng một bảng 193

\tablecaption{Danh sách VĐV}


\tablefirsthead{\hline STT & Họ và Tên\\ \hline}
\tablehead{\hline\multicolumn{2}{|l|}
{\small\slshape tiếp tục từ trang trước}\\
\hline STT&Họ và Tên\\ \hline }
\tabletail{\hline\multicolumn{2}{|r|}
{\small\slshape tiếp tục ở trang sau}\\ \hline }
\tablelasttail{\hline}
\begin{supertabular}{|l|@{\hspace*{2mm}\extracolsep{\fill}}l|}
001&Nguyễn Văn Bảy\\ 002&Nguyễn Hữu Hiếu\\ .......\\
100&Nguyễn Huy Trung\\ \end{supertabular}
\setlongtables
\begin{longtable}[c]{|l|@{\hspace*{2mm}\extracolsep{\fill}}l|}
\caption{Danh sách VĐV}\\ \hline
STT&Họ và Tên\\ \hline \endfirsthead \hline
\multicolumn{2}{|l|}{\small\slshape tiếp tục từ trang
trước}\\\hline
\endhead \hline
\multicolumn{2}{|r|}{\small\slshape tiếp tục ở trang sau}\\
\hline
\endfoot \hline
\endlastfoot
001&Nguyễn Văn Bảy\\
....
100&Nguyễn Huy Trung\\
\end{longtable}

6.8. Một số gói lệnh sắp cột và hàng một bảng


Những gói nhỏ sau đây rất thuận tiện cho việc sắp xếp những cột có
dấu thập phân, kẻ những đường theo các hàng một cách nhanh nhất.
6.8.1. Gói lệnh dcolumn định nghĩa dóng cột

Gói lệnh dcolumn đưa ra hệ thống định nghĩa các cột trong môi
trường array và tabular, mục đích là dóng dấu thập phân trong cột.
194 Chương 6. Các dạng biểu bảng

Trong cột có thể có các số phần nguyên không có hoặc phần thập phân
không có hoặc dòng bỏ trắng đều được dóng thẳng hàng. Gói lệnh
dùng từ khóa D với ba đối số:

R
D{<dấu tách vào>}{<dấu tách ra>}{<số chữ số thập phân>}

R
<dấu tách vào> Một ký tự đơn dùng để tách hai thành phần.
<dấu tách ra> Ký hiệu tách khi in ra. Có thể đối số này như đối
số thứ nhất, nhưng ở đây có thể dùng được các lệnh trong môi

R
trường toán như \cdot.
<số chữ số thập phân> Số chữ số thập phân lớn nhất trong cột.
Nếu là một số âm thì bao nhiêu chữ số thập phân trong cột cũng
được, tất cả các ô theo hàng đều được sắp xếp.

Nếu ta không sử dụng cố định ba đối số ngay từ định nghĩa ở đầu văn
bản, thì ta có thể định nghĩa một dạng cột như sau
\newcolumntype{d}[1]{D{.}{\cdot}{#1}}
Loại cột mới d này nghĩa là khi tập nguồn dấu thập phân gõ vào là
. nhưng khi ra lại là ·, còn đối số thứ ba cụ thể là bao nhiêu chữ số thập
phân. Ta cũng có thể định nghĩa dạng cột sau đây hay được ứng dụng:
\newcolumntype{.}{D{.}{.}{-1}}
Bất cứ phần tử nào trong cột cũng được gõ vào dấu thập phân . thì
đầu ra cũng dấu chấm đó nhưng được căn giữa cột. Hoàn toàn tương
tự ta có thể định nghĩa \newcolumntype{,}{D{,}{,}{2}} loại cột định
dạng bởi dấu , và có hai chữ số thập phân.
Những định nghĩa trên có thể áp dụng cho ví dụ sau đây:

7 8 : 2
\begin{tabular}
1·3 1·3 1.3 1,3
{|d{-1}|d{-2}|.|,|}
1·23 1·23 12.3 345,2
1.3 &1.3 &1.3 &1,3\\
132·1 134·2 345.20 321,27
1.23&1.23&12.3&345,2\\
198 184 10 66
132.1&134.2&345.20&321,27\\
0·4 0·5 0,6
198&184&10&66\\
0.5
0.4&0.5& &0,6\\ &&0.5&\\
\end{tabular}
6.8. Một số gói lệnh sắp cột và hàng một bảng 195

6.8.2. Gói lệnh hhline kết hợp đường kẻ ngang và kẻ dọc


Gói lệnh hhline của tác giả David Carlisle đưa ra lệnh \hhline một
mặt giống như lệnh \hline, nhưng có ngoại lệ tương tác với đường kẻ
đứng
\hhline{<dấu nét kẻ>}: khai báo <dấu nét kẻ> bao hàm danh sách

R
các kí tự và có nghĩa sau đây:

R
= Đường kẻ đôi của \hline có độ rộng của cột.

R
- Đường kẻ một như \hline có độ rộng của cột.

R
~ Cột không có đường kẻ \hline.

R
| Đường kẻ đứng \vline cắt qua đường đôi hoặc một của \hline.

R
: Đường kẻ đứng \vline bị ngắt ra bởi đường đôi \hline

R
# Đoạn kẻ đôi \hline nằm giữa hai đường \vline.

R
t Đoạn kẻ đôi phía trên bằng hai đường \hline.

R
b Đường kẻ dưới bằng hai đoạn \hline.
* *{3}{==#} nghĩa là ==#==#==#.

Đường đôi \vline được mô tả bằng || hoặc :: thì đường ngang


\hline với lệnh \hhline sẽ ngắt ra. Để nhận được đường \hline cắt
hai đường đôi \vline phải dùng #.
Hai thông số có thể dùng giữa hai đường kẻ đứng. Ví dụ |tb| cho
kết quả như là #, nhưng hiệu quả không cao. Người ta chủ yếu dùng
|t: cho góc trái và :b| cho góc phải.
Nếu \hhline chỉ kẻ một đường như \hline, thì đối số phải chứa
những kí tự sau -, ~ và | và các biểu thức *.

7 8 : 2
\setlength{arrayrulewidth}{0.8pt}
\begin{tabular}{||cc||c|c||} a b c d
\hhline{|t:==:t:==:t|} 1 2 3 4
a&b&c&d\\ \hhline{|:==:|~|~||} i j k l
1&2&3&4\\ \hhline{#==#~|=#} w x y z
i&j&k&l\\ \hhline{||–||–||}
w&x&y&z\\ \hhline{|b:==:b:==:b|}
\end{tabular}
196 Chương 6. Các dạng biểu bảng

Lệnh \hline có dùng nét vẽ \hrule. Nhiều khi lệnh \hhline có làm
cho nét vẽ mờ đi, để chủ động người ta đặt lại độ dày của nét vẽ qua
thông số \arrayrulewidth như ví dụ trên.

6.9. Gói lệnh multirow sắp xếp dọc cột bảng


Thường trong một bảng có những ô kết hợp nhiều dòng lại làm một.
Ta có thể làm bằng cách dùng lệnh \multicolumn như sau

7 8 : 2
\begin{tabular}{|c|c|c|}\hline
ooooo
&\multicolumn{2}{c|}{ooooo}\\ 2000
A B
\cline{2-3}
\raisebox{1.5ex}[0cm][0cm]{2000} 200000 10 10
&A &B\\ \hline
200000&10&10\\ \hline
\end{tabular}
Gói lệnh multirow với lệnh \multirow có thể thu xếp một số dòng
lại với nhau.
\multirow{<số hàng>}[<gom chiều dọc>]{<chiều rộng>}
[<dịch chuyển dọc>]{<nội dung văn bản>}
Trong lệnh trên ta chú ý tới hai tùy chọn, thứ nhất là <dịch chuyển
dọc>: khi trong bảng dùng lệnh \struct để căn các dòng lớn văn bản
vào giữa nhiều khi không được kết quả như mong muốn, khi đó ta
dùng <dịch chuyển dọc> để dịch chuyển theo chiều dọc bằng tay. Tùy
chọn thứ hai là <gom chiều dọc>: Khi dùng môi trường array mỗi
dòng được tính thêm một khoảng trắng \jot (độ dài thông số này có
giá trị mặc định 3pt để khởi đầu bảng), nhưng \multirow không tính
thông số này. Cố định thông số trên không có khả năng nào, chỉ có khả
năng nửa tự động đặt thông số \bigstructjot bằng \jot và phần còn
lại là dùng tùy chọn <gom chiều dọc> bằng nửa số hàng ta muốn gom
lại.
6.9. Gói lệnh multirow sắp xếp dọc cột bảng 197

7 8 : 2
\begin{tabular}{|l|l|l|l|}\hline
A21 B41
\multirow{4}{10mm} Văn Văn
A22 B42
{Văn bản cột 1} bản bản
A23 B43
&A21&\multirow{4}{10mm} cột 1 cột 3
A24 B44
{Văn bản cột 3} & B41\\
&A22&&B42\\ &A23&&B43\\
&A24&&B44\\ \hline
\end{tabular}
Ta có thể dùng lệnh \multirowsetup đặt trước bảng để điều khiển
định dạng các ô căn trái hoặc căn vào giữa, vì mặc định \multirow
chứa lệnh \raggeright, nhưng ta có thể đặt lại, còn mặc nhiên văn bản
trong lệnh \multirow căn vào giữa theo chiều dọc. Ví dụ không cần
lệnh \raisebox.

7 8: 2
\newcommand{\multirowsetup}{\centering}
ooooo
\newlength{\LL}\settowidth{\LL}{100} 2000
A B
\begin{tabular}{|c|c|c|}\hline
\multirow{2}{\LL}{100}& 200000 10 10
\multicolumn{2}{c|}{ooo}\\ \cline{2-3}
&A &B\\ \hline 200000&10&10\\ \hline
\end{tabular}
Tùy chọn <dịch chuyển dọc> ảnh hưởng như thế nào thông qua ví
dụ sau khi chưa có tùy chọn này, ví dụ đến hàng lớn thứ ba thì bị lệch
đến 3mm.

7 8: 2
\begin{tabular}{|l|l|} \hline
Hàng 1
\multirow{4}{20cm}{Hàng một, cột một} Hàng
Hàng 2
&Hàng 1\\\cline{2-2}&Hàng một, cột
Hàng 3
2\\\cline{2-2} một
Hàng 4
&Hàng 3\\\cline{2-2} &Hàng 4\\ \hline
Hàng 5
\multirow{4}{20cm}{Hàng hai, cột một} Hàng
Hàng 6
&Hàng 5\\ \cline{2-2} hai, cột
Hàng 7
&Hàng 6\\ \cline{2-2} một
&Hàng 7\\ \cline{2-2}&Hàng 8\\\hline Hàng 8
\multirow{4}{20cm}{Hàng ba, cột một} Hàng 9
&Hàng 9\\ \cline{2-2} Hàng ba, Hàng 10
&Hàng 10\\\cline{2-2}&Hàng 11\\\hline cột một Hàng 11
\end{tabular}
198 Chương 6. Các dạng biểu bảng

6.10. Điều chỉnh bảng với ô ngang toàn bộ cột


Nhiều khi ta cần văn bản chạy suốt các cột, nhưng lại muốn điều
chỉnh văn bản đó có các cột đều nhau. Ví dụ như bảng sau hàng đầu
tiên chiếm tất cả các cột sau đó là các hàng:

7 8 : 2
\begin{tabular}{c c c}
Tài liệu được xếp thành ba hàng
\multicolumn{3}{c}{Tài liệu
A1 A2 A3
được xếp thành ba hàng}\\
B1 B2 B3
A1&A2&A3\\ B1&B2&B3\\
C1 C2 C3
C1&C2&C3\\ \end{tabular}
Ta có thể điều chỉnh độ lệch trên bằng lệnh \extracolsep nhưng
với môi trường chỉ ra độ rộng của bảng như

7 8 : 2
\begin{tabular*}{\linewidth}
Tài liệu sắp thành ba
{!{\extracolsep{4in minus
A1 A2 A3
4in}}c c c}
B1 B2 B3
\multicolumn{3}{c}
C1 C2 C3
{Tài liệu sắp thành ba}\\
A1&A2&A3\\ B1&B2&B3\\
C1&C2&C3\\ \end{tabular*}
Như vậy vẫn không được như ý muốn của ta. Ta phải xác định độ
dài của chính dòng ở trên đầu bảng, cũng chưa hoàn toàn được mà phải
cộng thêm thông số \tabcolsep như ví dụ sau:

7 8 : 2
\newlength{\dodai}
Tài liệu xắp ba
\settowidth{\dodai}{Tài liệu xắp ba}
A1 A2 A3
\addtolength{\dodai}{2\tabcolsep}
B1 B2 B3
\begin{tabular*}{\dodai}
C1 C2 C3
{!{\extracolsep{4in minus 4in}}c c c}
\multicolumn{3}{c}{Tài liệu xắp ba}\\
A1&A2&A3\\ B1&B2&B3\\ C1&C2&C3\\
\end{tabular*}
Kết quả hoàn toàn tương tự khi thêm vào bảng khoảng trống do @{}
6.11. Chú thích dưới bảng 199

tạo ra

7 8 : 2
%\newlength{\dodai}
Tài liệu xắp ba
\settowidth{\dodai}{Tài liệu xắp ba}
A1 A2 A3
\begin{tabular*}{\dodai}
B1 B2 B3
{@{\extracolsep{4in minus 4in}}c c c@{}}
C1 C2 C3
\multicolumn{3}{c}{Tài liệu xắp ba}\\
A1&A2&A3\\ B1&B2&B3\\ C1&C2&C3\\
\end{tabular*}

6.11. Chú thích dưới bảng


Khi một bảng ở môi trường tabularx và longtable thì khi đặt lệnh
làm chú thích mới đúng đắn. Còn những bảng bình thường thì ta phải
đặt vào môi trường minipage và ta muốn nội dung các lệnh chú thích
liệt kê ở dưới bảng. Nhưng ta phải chú ý định nghĩa lại \thefootnote
để sử dụng được \footnotemark
Một cách làm khác dùng gói lệnh threeparttable của Donald Ar-
seneau cho ta cách làm chú thích một cách rõ ràng, mỗi chú thích do ta
tự sắp xếp và liệt kê ở phía dưới. Như ví dụ trên ta có thể viết:

7 8 : 2
\begin{threeparttable}
\caption{\bfseries Quần nam cỡ} Bảng 6.1: Quần nam cỡ
\begin{tabular}{@{}l l@{}} Quần nhunga 41, 43, 50, 51
Quần nhung\tnote{a}&41,43,50,51\\ Quần ngắnb 35, 37, 41, 43
Quần ngắn\tnote{b}&35,37,41,43\\
Quần Kakib 35, 37, 41, 43
Quần Kaki\tnote{b}&35,37,41,43\\
Quần lụab 35, 37, 41, 43
Quần lụa\tnote{b}&35,37,41,43\\
Quần bò c 35, 37, 41, 43
Quần bò \tnote{c}&35,37,41,43\\
a Nhãn hiệu Mỹ.
\end{tabular}
b Nhãn hiệu Việt Nam.
\begin{tablenotes}
c Nhãn hiệu Trung Quốc.
\item[a] Nhãn hiệu Mỹ.
\item[b] Nhãn hiệu Việt Nam.
\item[c] Nhãn hiệu Trung Quốc.
\end{tablenotes}
\end{threeparttable}
200 Chương 6. Các dạng biểu bảng

6.12. Bảng lồng trong bảng


Như ta đã biết môi trường tabular hoặc array đều có thể tự lồng
vào nhau được. Nhưng khi đó các đường kẻ ngang \hline sẽ thấp do
nó lấy đường cơ bản làm chuẩn để kẻ như

7 8 : 2
\begin{tabular}[t]{l}
Bảng 1 rồi đến
Bảng 1\\ Bảng 1\\ lại \\ Bảng 1
Bảng 1 Bảng 2
\end{tabular} rồi đến
lại lại
\begin{tabular}[t]{|l|} \hline
Bảng 1 Bảng 2
Bảng 2\\ lại \\ Bảng 2\\ \hline
\end{tabular}
Để nâng dòng trong Bảng 2 lên như Bảng 1, ta xây dựng thêm hai
lệnh đặc biệt của \hline và có dùng biến \@arstrutbox để dựng lại
những khoảng cách trong một ô bảng. Nếu các bạn đã định nghĩa
\newlength{\extratabsurround} trước đây thì mã nguồn sau đây
không có lệnh ấy nữa (chú ý khi chạy LATEX sẽ biết là lệnh này đã có
hay chưa).
\makeatletter
\newlength{\backup} \newlength{\extratabsurround}
\newcommand\firstline{\multicolumn{1}{c}{%
\global\backup\ht\@arstrutbox
\global\advance\backup\dp\@arstrutbox %Ghi lại để lưu trữ
\advance\backup\extratabsurround %Thêm khoảng trống phía
trên
\rule{0pt}{\backup}}\\[-\backup]\hline} %Cho khoảng trống
dòng dưới
\newcommand\lastline{\hline\multicolumn{1}{c}{}
\global\backup-\ht\@arstrutbox
\global\advance\backup\extratabsurround\\[\backup]}\makeatother
Bảng trên có thể sửa lại để đường kẻ và dòng thứ nhất trong Bảng
2 cân đối với Bảng 1.
6.12. Bảng lồng trong bảng 201

7 8 : 2
\begin{tabular}[t]{l}
Bảng 1\\ Bảng 1\\ lại \\ Bảng 1 Bảng 1 rồi đến Bảng 2
\end{tabular} rồi đến Bảng 1 lại
\begin{tabular}[t]{|l|}\firstline lại Bảng 2
Bảng 2\\ lại\\ Bảng 2\\ \lastline Bảng 1
\end{tabular}
Nhờ vào cách xây dựng hai lệnh trên đặt giá trị cho
\extratabsurround để được các bảng lồng nhau đẹp hơn.
\setlength{\extratabsurround}{2pt}

7 8: 2
\begin{tabular}{|cc|}\hline
Tháng Kết quả thu hoạch
Tháng & Kết quả thu hoạch\\
\hline \hline năm Tên tấn/ha
năm &\begin{tabular}[t]{|cr|}
Cà phê 18
\firstline Sản phẩm&tấn/ha\\
\hline\hline Cà phê&18\\\hline tẻ 15
Gạo
Gạo &\begin{tabular}{|cr|} nếp 8
\firstline
tẻ & 15\\ \hline nếp&8\\
chín Cà phê 18
\lastline
\end{tabular}\\ \lastline tẻ 15
Gạo
\end{tabular}\\ \hline nếp 8
chín &\begin{tabular}[t]{|cr|}
\firstline Cà phê&18\\\hline
Gạo &\begin{tabular}{|cr|}
\firstline
tẻ & 15\\ \hline
nếp&8\\\lastline
\end{tabular}\\ \lastline
\end{tabular}\\ \lastline
\end{tabular}
CHƯƠNG 7

VẼ HÌNH VÀ QUẢN LÝ HÌNH VẼ

7.1. Những gói lệnh làm khung văn bản . . . . . . . . . . . . . . . . . . . . . 203


7.2. Môi trường picture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.2.1. Hệ tọa độ và độ dài đơn vị . . . . . . . . . . . . . . . . . . . . . . . 209
7.2.2. Một số lệnh vẽ hình cơ bản . . . . . . . . . . . . . . . . . . . . . . 211
7.3. Gói lệnh đưa hình vào . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
7.3.1. Những lệnh trong graphics . . . . . . . . . . . . . . . . . . . . . . 219
7.3.2. Những lệnh trong graphicx . . . . . . . . . . . . . . . . . . . . . . 220
7.3.3. Một số gói lệnh khác . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
7.3.4. Cấu hình điều khiển để đưa ảnh vào văn bản . . . . 223
7.4. Tô mầu nền và chữ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
7.5. Các loại môi trường di động . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
7.5.1. Vị trí của môi trường di động . . . . . . . . . . . . . . . . . . . . 225
7.5.2. Thông số cho môi trường di động . . . . . . . . . . . . . . . . 227

TEX là một chương trình có thuật toán định dạng các đoạn và trang
rất tốt, ngoài ra nó cho phép xây dựng những ký hiệu tuyệt đẹp. Nhưng
sách báo ngày nay không chỉ có văn bản mà có rất nhiều hình ảnh. TEX
đã không được chú ý về mặt này, tuy nhiên D. N. Knuth cũng dành
một lệnh \special để lấy các ảnh từ các chương trình khác vào. Để
khắc phục thiếu sót vẽ hình trong TEX hàng loạt gói lệnh đã được xây
dựng. Chính trong LATEX cũng có môi trường dành riêng cho hình vẽ
là môi trường picture. Theo tổng quan của Sebastian Rahtz có 6 cách
thức tạo hình vẽ hoặc liên quan tới hình trong TEX như sau:

1. Vẽ bằng mã ASCII như gói lệnh PiCTEX của Michael J. Wichura,


vẽ hình bằng cách chấm thật nhiều điểm sít nhau thành đường
cong. Như vậy sẽ tốn rất nhiều bộ nhớ và chương trình chạy rất
lâu khi hình vẽ lớn.
2. Hình vẽ lấy từ phông chữ như môi trường picture trong LATEX
7.1. Những gói lệnh làm khung văn bản 203

hoặc như hệ XY-pic của Kristoffer Rose.


3. Dùng các gói lệnh macro dựa trên cơ sở môi trường picture hoặc
những lệnh vẽ đường thẳng của LATEX. Trong các gói lệnh đáng kể
là gói lệnh vẽ về sơ đồ Feynman, gói lệnh về công thức hóa học,
và sơ đồ hình cây.
4. Dùng phông để vẽ hình, nghĩa là dùng chương trình làm phông
MetaFont để sinh ra hình vẽ. Có nhiều chương trình chuyển đổi
các tệp ảnh thành các phông của TEX như chương trình pbmtopk
của Angus Duggan chuyển các tệp ở dạng BMP thành tệp phông
với định dạng *.pk.
5. Dùng các phông trung gian gồm những khối có bậc nét khác nhau
kết hợp với TEX bình thường để sinh ra hình vẽ.
6. Những hình trong các tệp có sẵn được nhúng vào trong văn bản
TEX. Những hình này được gọi vào nhờ lệnh \special. Nhưng
phụ thuộc rất nhiều vào khả năng của bộ điều khiển dvi. Tiếp
cận bằng cách này càng trở nên thông dụng nhất hiện nay, nhất
là dùng máy in PostScript. Hai gói lệnh psfrag và pstricks dùng
hệ thống PostScript với LATEX.

Mỗi phương pháp trên đều có điểm mạnh và điểm yếu. Các phương
pháp từ 1 đến 5 có thuận tiện, nhưng chúng thiếu mềm dẻo nhất là
quay hình và phóng to, thu nhỏ. Còn phương pháp dùng \special có
hạn chế phụ thuộc vào ngôn ngữ vẽ hình và phụ thuộc vào phần cứng.
Trong cuốn sách này có trình bày một phần mềm để vẽ hình và đưa
thẳng hình vẽ vào văn bản.
Trong chương này ta chỉ quan tâm tới môi trường picture và những
mở rộng của nó để vẽ được những loại hình vẽ thích hợp, không phụ
thuộc vào phần cứng. Thực chất đây là những gói lệnh trong LATEX.

7.1. Những gói lệnh làm khung văn bản


Gói lệnh boxedminipage
Gói lệnh boxedminipage của Mario Wolczko có môi trường
boxedminipage dựa trên môi trường minipage chỉ có khác là đóng
204 Chương 7. Vẽ hình và quản lý hình vẽ

khung văn bản. Nét vẽ của khung kiểm soát bằng lệnh \fboxrule và
khoảng cách viền văn bản tới khung được thực hiện bằng \fboxsep.

7 8 : 2
\begin{boxedminipage}[t]{4cm}
Thiếu phương pháp thì người tài
cũng lỗi. Có phương pháp thì Thiếu phương pháp thì
người tầm thường cũng làm được người tài cũng lỗi. Có
việc phi phương pháp thì người tầm
thường.\footnote{Descartes} thường cũng làm được việc
\end{boxedminipage} phi thường.

Gói lệnh shadow


Gói lệnh shadow của Mauro Orlandini định nghĩa lệnh \shavox gần
giống với lệnh \fbox của LATEX nhưng có thêm vệt đen ở dưới và bên
phải khung. Gói lệnh này có ba lệnh thông số:

\sboxrule Kiểm soát độ dày của đường kẻ khung (mặc định là 0.4pt).
\sboxsep Khoảng cách từ văn bản đến khung (mặc định là 10pt).
\sdim Chiều rộng của bóng khung (mặc định là 4pt).

7 8: 2
\fbox{Học cho rộng.}\\
Hỏi cho thật kỹ.\\ Học cho rộng.
\setlength{\sboxsep}{4pt}
\shabox{Suy nghĩ cho thật cẩn Hỏi cho thật kỹ.
thận.}\\
Phân biệt cho thật rõ ràng.\\ Suy nghĩ cho thật cẩn thận.
{\renewcommand{\sdim}{ Phân biệt cho thật rõ ràng.
1.2\fboxsep}\shabox{\parbox{5cm}
{Làm việc cho hết sức.\\ Làm việc cho hết sức.
Như thế mới thành người.\\ Như thế mới thành người.
(Trung - Dung)}}} (Trung - Dung)

Gói lệnh fancybox


Gói lệnh fancybox nằm trong gói lệnh seminar của Timothy Van
Zandt. Gói lệnh đã đưa ra phương án khác nhau của lệnh \fbox, lệnh
khoảng cách giữa văn bản và khung vẫn bằng \fboxsep (mặc định là
7.1. Những gói lệnh làm khung văn bản 205

3pt), còn các thông số khác được mô tả dưới đây:

Khung có bóng
\shadowbox
Đường kẻ được xác định bởi \fboxrule (như là của lệnh \fbox).
Độ rộng của bóng là \shadowsize (mặc định là 4pt).

\doublebox Khung kẻ đôi

Độ dày của đường kẻ khung trong và khung ngoài tương ứng là


0.75\fboxrule, 1.5\fboxrule. Khoảng cách giữa hai khung là
1.5\fboxrule plus 0.5pt.

\ovalbox Khung hình ô van

Độ dày của nét vẽ là \thinlines, còn đường kính của đường tròn
tạo ra cung ở góc là \cornersize có một đối số. Đây là một số num
theo độ phóng theo chiều dài rộng của khung , mặc định num=0.5.

\Ovalbox Khung hình ô van

Tương tự như \ovalbox nhưng nét vẽ được kiểm soát bởi
\thicklines.

Định nghĩa những môi trường kẻ khung


Nhờ vào những gói kẻ khung trên ta có thể thiết lập các môi trường
kẻ khung với môi trường minipage.

7 8: 2
\newenvironment{Oboxedminipage}  
{\begin{Sbox}\begin{minipage}} Làm việc gì bao giờ cũng
{\end{minipage}\end{Sbox} đi từ dễ đến khó. Từ đơn
\Ovalbox{\TheSbox}} giản đến phức tạp.
\begin{Oboxedminipage}{4.5cm}  
Làm việc gì bao giờ cũng đi từ dễ
đến khó. Từ đơn giản đến phức tạp.
\footnote{DESCARTES}
\end{Oboxedminipage}

Trong gói lệnh cũng có những môi trường hộp sau đây:
206 Chương 7. Vẽ hình và quản lý hình vẽ

• Bcenter, Bflushleft và Bflushright sinh ra môi trường hộp quy


tâm, căn trái, căn phải.
• Bitemize, Benumerate và Bdescription sinh ra môi trường hộp
cho các môi trường itemize, enumerate, description.
• Beqnarray cho ra môi trường hộp của eqnarray. Tương tự cho
môi trường hộp Beqnarray*.

Tất cả các môi trường trên đều kẻ khung được nhờ các lệnh ở trên.

7 8 : 2
\doublebox{\begin{Bitemize}
\item Người "Trí" hay lo. • Người "Trí" hay lo.
\item Người "Nghĩa" hay làm.
\item Người "Nhân" hay trì • Người "Nghĩa" hay làm.
hoãn.\\ • Người "Nhân" hay trì hoãn.
(Cốc Lương) (Cốc Lương)
\end{Bitemize}}
Các công thức toán

7 8 : 2
\shadowbox{\begin{Beqnarray}
a^2&=&b^2+c^2-2bc\cos a2 = b2 + c2 − 2bc cos α (7.1)
\alpha\\
b 2
= c + a − 2ca cos β (7.2)
2 2
b^2&=&c^2+a^2-2ca\cos
\beta\\ c 2
= a2 + b2 − 2ab cos γ (7.3)
c^2&=&a^2+b^2-2ab\cos \gamma
\end{Beqnarray}}

Nhiều khi ta chỉ đóng khung một số kí tự trong công thức toán ta
phải dùng lệnh \fbox.

7 8 : 2
$$\alpha+\beta+\gamma=\fbox{$\pi$}$$
α+β+γ = π

Có khả năng ta đánh số ngoài công thức đóng khung thì


7.1. Những gói lệnh làm khung văn bản 207

7 8 : 2
\begin{equation}
\fbox{$\displaystyle a b
\frac{a}{\sin\alpha}= = (7.4)
sin α sin β
\frac{b}{\sin\beta}}
\end{equation}

Ta có thể định nghĩa một môi trường mà trong đó công thức được
đóng khung theo suốt chiều rộng của trang.

7 8
\newlength{\mylength}
\newenvironment{FramedEqn}%
{\setlength{\fboxsep}{5pt}
\setlength{\mylength}{\linewidth}%
\addtolength{\mylength}{-2\fboxsep}
\addtolength{\mylength}{-2\fboxrule}%
\begin{Sbox}\begin{minipage}{\mylength}%
\setlength{\abovedisplayskip}{0pt}
\setlength{\belowdisplayskip}{0pt}\begin{equation}}%
{\end{equation}\end{minipage}\end{Sbox}
\[\fbox{\TheSbox}\]}
\begin{FramedEqn}
\frac{a_1+a_2+\cdots+a_n}{n}\ge \sqrt[n]{a_1a_2\ldots a_n}
\end{FramedEqn}

: 2

a1 + a2 + · · · + a n √
≥ n a1 a2 . . . a n (7.5)
n

Cũng bằng cách như vậy ta làm khung cho mỗi phát biểu định lý
của ta

7 8
\newlength{\dllength}
\newenvironment{Frameddl}%
{\setlength{\fboxsep}{10pt}
208 Chương 7. Vẽ hình và quản lý hình vẽ

\setlength{\dllength}{\linewidth}%
\addtolength{\dllength}{-2\fboxsep}
\addtolength{\dllength}{-2\fboxrule}%
\begin{Sbox}\begin{minipage}{\dllength}\begin{theorem}}%
{\end{theorem}\end{minipage}\end{Sbox}
\noindent\shadowbox{\TheSbox}}
\begin{Frameddl}
Ba đường trung tuyến trong một tam giác bất kỳ cắt nhau tại
một điểm.
\end{Frameddl}

: 2

Định lý 7.1 Ba đường trung tuyến trong một tam giác bất kỳ cắt
nhau tại một điểm.

Gói lệnh này làm được cả khung cho một trang bằng cụm lệnh sau:

\thisfancypage{ Lệnh \shadowbox ở cấu trúc bên


\setlength{\fboxsep}{1pt}% có thể thay bằng \doublebox,
\setlength{\shadowsize}{4pt}% \ovalbox hoặc \Ovalbox.
\shadowbox}{}
Nhân đây ta cũng nhắc lại dùng gói lệnh mầu color để bôi đen phát
biểu định lý

7 8
\definecolor{mygrey}{gray}{0.55}
\colorbox{mygrey}{ \begin{minipage}{10cm}
\begin{theorem}
Ba đường trung tuyến trong một tam giác bất kỳ cắt nhau tại
một điểm.
\end{theorem}\end{minipage}}

: 2

Định lý 7.2 Ba đường trung tuyến trong một tam giác bất kỳ
cắt nhau tại một điểm.
7.2. Môi trường picture 209

Mầu đậm nhạt được thay trong định nghĩa \definecolor số càng
lớn thì càng nhạt mầu.

7.2. Môi trường picture


LATEX cung cấp một môi trường để vẽ hình picture, sau này các gói
lệnh hoặc các chương trình vẽ cho LATEX đều cơ bản dùng môi trường
này để tính toán và đặt hình như phần mềm TextCad và WinTpic. Ta
phải nắm rõ nội dung của môi trường để sau này có vẽ hình hoặc đặt
hình không bỡ ngỡ.

7.2.1. Hệ tọa độ và độ dài đơn vị

Các hình thường quan niệm là một khối và được đặt vào hệ tọa độ
có trục tung và trục hoành tại một điểm bất kì trong hệ này. Hệ tọa độ
trong môi trường picture có trục tung ở phía bên trái và trục hoành ở
phía dưới và có cả đơn vị âm như hình vẽ sau:

y
y
(1.0, 2.0)
(1.8, 1.4)
1.4 (−1.0, 1.0)

Gốc
x
đơn vị 1.8 x (−1.5, −1.2)

Hình 7.1: Hình 7.2:

Mỗi hệ tọa độ như vậy phải đặt độ dài đơn vị bằng lệnh
\setlength{\unitlength}{<độ dài>}
Đối số <độ dài> phải có đơn vị tính, ví dụ đặt độ dài đơn vị là
1.5cm bằng \setlength{\unitlength}{1.5cm}. Với độ dài đơn vị này
thì điểm (1.8, 1.4) có độ dài trong hệ tọa độ đó là độ dài trên trục hoành
của điểm đó là 1.8 × 1.5cm = 2.7cm từ điểm gốc về phía bên phải. Độ
210 Chương 7. Vẽ hình và quản lý hình vẽ

dài từ gốc lên phía trên của điểm đó là 1.4 × 1.5cm = 2.1cm như trong
hình 7.1. Thường ta lấy độ dài đơn vị là 1cm để dễ tính như hình 7.2.
Môi trường picture tổng quát là
\setlength{\unitlength}{1cm}
\begin{picture}(<độ dài x>,<độ dài y>)
<lệnh vẽ hình>

R
\end{picture}

<độ dài x> Chiều ngang của một hình, và <độ dài y> chiều cao
của hình, đây là hai số được tính nhân với đơn vị độ dài theo quy
tắc trên, ví dụ

\setlength{\unitlength}{1.5cm}
\begin{picture}(4,5) ... ... ... \end{picture}

là khu vực vẽ hình có chiều rộng 4 đơn vị, chiều cao 5 đơn vị, thực

R
tế độ dài của chiều rộng là 6cm và chiều cao là 7.5cm.
<lệnh vẽ hình> Những lệnh vẽ hình sẽ được mô tả phần dưới
đây. Nhưng quan trọng là có hai lệnh nét vẽ \thicklines nét đậm
và nét mỏng \thinlines.

Một điều cần chú ý là muốn đưa hình vào giữa trang theo chiều
ngang hãy dùng môi trường center bao cả lệnh đặt độ dài đơn vị và
muốn đánh số cho hình vẽ và tra cứu chéo được thì dùng môi trường
figure trong đó có lệnh \caption.
Để vẽ hình dễ dàng ta sử dụng gói lệnh graphpap để kẻ ô vuông
trên vùng ta làm tọa độ và thấy được các điểm với lệnh
\graphpaper[<số>](x,y)(lx,ly)
nghĩa là đặt lưới ô vuông ở phía dưới góc trái tại tọa độ (x,y) và có lx
đơn vị chiều rộng và ly đơn vị chiều cao. Đường lưới cách nhau <số>
đơn vị. Dựa vào ô lưới trên ta có thể vẽ các hình tại các tọa độ đó.

7 8
\setlength{\unitlength}{1mm}
\begin{picture}(100,40)
\graphpaper[2](0,0)(100,40)
\end{picture}
7.2. Môi trường picture 211

: 2
40

30

20

10

0
0 10 20 30 40 50 60 70 80 90 100
7.2.2. Một số lệnh vẽ hình cơ bản

Đặt chi tiết vẽ thông qua hai lệnh \put và \multiput có cú pháp
như sau:
\put(<tọa độ x>, <tọa độ y>){<chi tiết hình>}

R
\multiput(<x>, <y>)(<số gia x>,<số gia y>){<số m>}{<hình>}

<chi tiết hình> Là một trong những lệnh vẽ hình sẽ nói phần

R
sau.

R
(<tọa độ x>, <tọa độ y>) Tọa độ khởi đầu để đặt hình..
(<số gia x>,<số gia y>) Lệnh \multiput vẽ <hình> tại vị trí:

(<tọa độ x>, <tọa độ y>); (<tọa độ x>+<số gia x>, <tọa độ


y>+<số gia y>);
(<tọa độ x>+2<số gia x>, <tọa độ y>+2<số gia y>);...
(<tọa độ x>+[m-1]<số gia x>, <tọa độ y>+[m-1]<số gia y>);
Văn bản trong môi trường vẽ hình: Những lệnh trên đặt trực tiếp dòng
văn bản với kí tự đầu tiên là tọa độ của khối này, tôi cố tình để lại lưới
xác định các tọa độ để bạn đọc dễ tưởng tượng:

7 8 : 2
\setlength{\unitlength}{1mm}
\begin{picture}(40,16)
Hàng chữ
\graphpaper[4](0,0)(40,16)
0 (12,8)
\put(12, 8){Hàng chữ}
\put(4,4){\vector(2,1){8}}
\put(0,0){(12,8)} 0 20 40
\end{picture}
212 Chương 7. Vẽ hình và quản lý hình vẽ

Còn những khối văn bản có các thông số sắp xếp văn bản trong
khối như \parbox thì điểm đặt tọa độ đầu tiên của nó phụ thuộc vào
các thông số này. Bạn đọc có thể thử lại các ví dụ sau đây:

7 8 : 2
\setlength{\unitlength}{1mm}20 Làm sao Anh biết được
\begin{picture}(52,20) có một vầng trăng khác
\graphpaper[4](0,0)(52,20) lại sáng giữa ban ngày
\put(12, 8){\parbox[b]{4cm}{
Làm sao Anh biết được\\ 0 (12,8)
có một vầng trăng khác\\
0 20 40
lại sáng giữa ban ngày}}
\put(4,4){\vector(2,1){8}}
\put(0,0){(12,8)}
\end{picture}
Không có tùy chọn [b] thì điểm căn được chỉ vào giữa:

7 8 : 2
\setlength{\unitlength}{1mm}20
\begin{picture}(52,20)
\graphpaper[4](0,0)(52,20) Làm sao Anh biết được
\put(12, 8){\parbox[t]{4cm}{ có một vầng trăng khác
Làm sao Anh biết được\\ 0 (12,8) lại sáng giữa ban ngày
có một vầng trăng khác\\
0 20 40
lại sáng giữa ban ngày}}
\put(4,4){\vector(2,1){8}}
\put(0,0){(12,8)}
\end{picture}

7 8 : 2
\setlength{\unitlength}{1mm}20
\begin{picture}(52,20) Làm sao Anh biết được
\graphpaper[4](0,0)(52,20) có một vầng trăng khác
\put(12, 8){\parbox{4cm}{ lại sáng giữa ban ngày
Làm sao Anh biết được\\ 0 (12,8)
có một vầng trăng khác\\
0 20 40
lại sáng giữa ban ngày}}
\put(4,4){\vector(2,1){8}}
\put(0,0){(12,8)}
\end{picture}

Hình chữ nhật: Tương tự như phần trên nhưng với hộp có văn bản
7.2. Môi trường picture 213

hoặc không có văn bản trong môi trường này như sau:
\makebox(<chiều rộng x>,<chiều cao y>)[<vị trí>]{<nội dung>}
\framebox(<chiều rộng x>,<chiều cao y>)[<vị trí>]{<nội dung>}
\dashbox{<độ dài ngắt>}(<chiều rộng x>,<chiều cao y>)[<vị trí>]

{<nội dung>}
Đối số <chiều rộng x> là chiều rộng của hộp, <chiều cao y> là
chiều cao của hộp chứa <nội dung> và phụ thuộc vào độ dài đơn vị
như cách tính độ dài theo đơn vị với phép nhân tỷ lệ ta đã biết ở phần
trước. Còn [<vị trí>] là các tùy chọn
[t] văn bản căn lên phía trên hộp;
[b] văn bản căn xuống phía dưới hộp;
[l] văn bản căn vào giữa theo chiều dọc và bên trái chiều ngang;
[r] văn bản căn vào giữa theo chiều dọc và bên phải chiều ngang;
[s] văn bản căn vào giữa chiều dọc và dàn đều chữ chiều ngang;
Còn không có tùy chọn thì văn bản được căn vào giữa cả hai chiều.

7 8: 2
\setlength{\unitlength}{1mm}
\begin{picture}(52,56)
\put(12,44){\dashbox(40,8)[r]{ (12,44) Căn phải
Căn~phải}}\put(4,48){\vector(2,-1){8}}
\put(0,48){(12,44)}
\put(12,32){\framebox(40,8)[l]{
(12,32) Bên trái
Bên~trái}}\put(4,36){\vector(2,-1){8}}
\put(0,36){(12,32)}
(12,20)
\put(12,20){\framebox(40,8)[b]{ Dưới đáy
Dưới~đáy}}\put(4,24){\vector(2,-1){8}}
\put(0,24){(12,20)} (12,8) Trên đỉnh
\put(12,8){\framebox(40,8)[t]{
Trên~đỉnh}}\put(4,12){\vector(2,-1){8}}
\put(0,12){(12,8)}

Ta cũng có thể kết hợp những tùy chọn trên lại với nhau như
[tl] Căn văn bản lên trên về bên trái,
[tr] Căn văn bản lên trên về bên phải,
[bl] Căn văn bản xuống dưới về bên trái,
[br] Căn văn bản xuống dưới về bên phải.
214 Chương 7. Vẽ hình và quản lý hình vẽ

Bạn đọc có thể để lưới \graphpaper[4](0,0)(52,56) để biết được


chính xác tọa độ cho các ví dụ trên.
Đường thẳng: Trong môi trường picture thì lệnh vẽ đường thẳng là
\line(<số gia x>, <số gia y>){<độ dài>}

Đối số <độ dài> là muốn vẽ


đường có độ dài bao nhiêu so với y
đơn vị độ đo, thường lấy đơn vị B
độ đo chẵn thì độ dài như là độ
dài của trục hoành hoặc trục tung. <số gia x>
Lệnh này thường đặt tại điểm A
theo lệnh \put và \multiput và <số gia y> x
từ đó đường thẳng được vẽ kéo
dài. Còn hai số gia x và y được xác
định theo nghĩa sau:

Từ điểm A ta lấy một khoảng cách bằng <số gia x> theo trục hoành
và từ điểm đó lấy khoảng <số gia y> theo trục tung được điểm B,
đường nối từ điểm A và B là đường thẳng phải vẽ.
Như vậy trong trường hợp cặp số này là (0, 1) cho ta đường thẳng
ngang song song với trục hoành. Cặp số (1, 0) lại cho ta đường thẳng
song song với trục tung.
Với lệnh \put thì đặt tại điểm nào đó trong hệ tọa độ cũng vẽ những
đường thẳng song song với nhau nếu nó có cùng cặp số trong lệnh
\line. Thực chất hai số gia trên để xác định hệ số góc cho việc vẽ đường
thẳng, do vậy lấy hai số đó phải theo quy tắc sau đây:
1. Số gia x hoặc y phải là một số nguyên (có thể dương hoặc âm);
2. Chỉ những giá trị sau đây được phép 0, 1, 2, ...,6.
3. Hai số gia không có ước số chung.

Những ví dụ các cặp số sau đây không hợp lệ: (3.2, 1.5) sai do quy tắc
1. (7,0) sai do quy tắc 2. (2,2) hoặc (3,6) sai do quy tắc 3. Ta lấy một ví
dụ có các số gia trên là âm
7.2. Môi trường picture 215

7 8 : 2
\setlength{\unitlength}{1mm}
\begin{picture}(52,30) y
\put(47, 0){$x$} 2=<số gia x>
\put(0, 0){\vector(1,0){45}} -1=<số gia y>
\put(0, 27){$y$}
\put(0, 0){\vector(0,1){25}}
\put(5,20.5){\line(2,-1){25}}
\end{picture} 25
<độ dài>
x

Mũi tên: Mũi tên cũng giống hệt như vẽ đường thẳng chỉ có khác dùng
lệnh
\vector(<số gia x>, <số gia y>){<độ dài>}
Ví dụ ta vẽ ba mũi tên liên tiếp nhau

7 8: 2
\setlength{\unitlength}{1cm}
\begin{picture}(5,2)\thicklines
\put(5, 0){\vector(-1,0){5}}
\put(0, 0){\vector(1,1){2}}
\put(2, 2){\vector(3,-2){3}}
\end{picture}

Đường tròn: Lệnh vẽ đường tròn


\circle{<đường kính>} hoặc \circle*{<đường kính>}

7 8: 2
\setlength{\unitlength}{1cm}
\begin{picture}(5,2)\thicklines
\put(2,1){\circle{2}}
\put(2, 1){\circle*{0.2}}
\put(2,1){\vector(1,0){0.7}}
\put(4,1){\circle*{1}}\end{picture}

Dạng * là đường tròn được tô đen. <đường kính> quá nhỏ thì LATEX
sẽ không vẽ ra được hình.
Hình ô val: Đường oval theo nghĩa là hình chữ nhật bốn góc được gọt
tròn đi, nghĩa là vẽ hình ô van theo bốn góc của hình chữ nhật
\oval(<chiều rộng>, <chiều cao>)[<phần góc>]
216 Chương 7. Vẽ hình và quản lý hình vẽ

Đối số <phần góc> được gán những kí tự sau đây t, b, l, r tương


ứng các nửa đường trên, dưới, bên trái, bên phải. Nếu không có đối số
tùy chọn thì hình được vẽ toàn bộ theo <chiều rộng> và <chiều cao>.

7 8: 2
\setlength{\unitlength}{1cm}
\begin{picture}(5,2)\thicklines 4cm
\put(2.5, 1.5){\circle*{0.1}}
\put(2.5, 1.5){\oval(4,2)} 2cm
\end{picture}

Có thêm các tùy chọn

7 8: 2
\setlength{\unitlength}{1cm}
\begin{picture}(5,2)\thicklines 4cm
\put(2.5, 2.5){\circle*{0.1}}
\put(2.5, 2.5){\oval(4,2)[b]} 2cm
\put(2.5, 0.5){\circle*{0.1}}
\put(2.5, 0.5){\oval(4,2)[t]}
\end{picture}
Những tùy chọn trên có thể kết hợp để vẽ một phần tư đường ô van
như sau: tl, tr, bl, br các góc từ trái trên qua phải theo chiều kim
đồng hồ, tổ hợp sau cũng tương đương lt, rt, lb, rb.

7 8: 2
\setlength{\unitlength}{1cm}
\begin{picture}(5,2)\thicklines 4cm
\put(2.5, 2.5){\circle*{0.1}}
\put(2.5, 2.5){\oval(4,2)[b]} 2cm
\put(2.5, 0.5){\circle*{0.1}}
\put(2.5, 0.5){\oval(4,2)[t]}
\end{picture}

Đường cong: Để vẽ đường cong trong môi trường picture có lệnh sau:
\qbezier[<số nguyên>(x1,y1)(x2,y2)(x3,y3)
Nghĩa là vẽ đường cong từ điểm (x1,y1) đến điểm (x2,y2), lấy điểm
(x2,y2) làm điểm Bezier ở phía ngoài có thể vẽ tiếp tuyến với đường
cong. Ví dụ:
7.2. Môi trường picture 217

7 8: 2
\setlength{\unitlength}{1cm}
\begin{picture}(5,3)\thicklines
\qbezier(0,0)(2,2)(4,1) (2,2)
\put(0.3, 0){(0,0)}
\put(0, 0){\circle*{0.1}} (4,1)
\put(2.3, 2){(2,2)}
\put(2, 2){\circle*{0.1}} (0,0)
\put(4.3, 1){(4,1)}
\put(4, 1){\circle*{0.1}}
\put(0, 0){\line(1,1){2}}
\put(2, 2){\line(2,-1){2}}
\end{picture}

Trên đây là những thao tác vẽ hình bằng nguyên bản LATEX. Bạn đọc
có thể thấy tập nguồn của chương trình WinTpic sử dụng triệt để công
cụ trong môi trường này. Bạn đọc dùng trực tiếp phần mềm công cụ
có thể dễ dàng vẽ được hình chất lượng cao và không cần biết nhiều
những lệnh trên đây.
Thực tế tồn tại rất nhiều gói lệnh để vẽ các loại hình khác nhau, như
gói lệnh multibox của Brian Hamilton vẽ các lưới trên một trang. Gói
lệnh trees của Peter Vanroose mục đích vẽ các loại hình cây dễ dàng.
Rất nhiều gói lệnh để vẽ ra những hình chuyên dụng như gói lệnh
bar vẽ ra những biểu đồ thanh, gói lệnh curves cho ta vẽ những đường
cong thuận lợi hơn lệnh ở trên ta đã học. Rồi gói lệnh epic, eepic,
ecltree,... nhằm mở rộng những lệnh trong môi trường picture.
Những gói lệnh này chiếm bộ nhớ rất nhiều, bạn đọc tự tìm hiểu theo
những tệp trong địa chỉ cài đặt của chúng tôi, nếu không có thì theo địa
chỉ ở phần phụ lục các bạn lấy gói lệnh về và thử nghiệm.
Theo kinh nghiệm của chúng tôi tuy chương trình WinTpic được
giới thiệu ở chương sau chưa được như ý, nhưng chúng ta có thể sử
dụng dễ dàng mà các gói lệnh trên gom lại cũng không bằng. Các bạn
hãy thực hành tốt chương trình WinTpic với các môi trường cụ thể của
LATEX thì nhiều hình được vẽ rất dễ và có chất lượng cao.
218 Chương 7. Vẽ hình và quản lý hình vẽ

7.3. Gói lệnh đưa hình vào


Dù chúng ta có vẽ tốt đến đâu trong một chương trình vẽ hình dùng
cho LATEX cũng không bằng các chương trình chuyên nghiệp vẽ ra hình
và lưu vào các tệp. Mặt khác nhiều khi ta phải đưa một ảnh chụp vào
tài liệu, do đó LATEX cung cấp gói lệnh graphics để điều khiển việc lấy
tệp ảnh từ ngoài vào. Từ khi thiết lập LATEX người ta đã cung cấp những
phương pháp đưa hình Postscript và cung cấp những phương tiện trên
hình Postcript là phóng to thu nhỏ, quay hình và tô mầu. Tuy nhiên
những gói lệnh lại thiết kế cho một bộ điều khiển DVI cụ thể, gây rất
nhiều khó khăn cho người dùng.
Phiên bản mới nhất của LATEX đã chuẩn hóa tất cả các bộ điều khiển
trong gói lệnh graphics và color. Người ta đã dùng một tệp .def để
mô tả tất cả các điều khiển cho tệp DVI và khi dùng gói lệnh với tùy
chọn thì bộ điều khiển sẽ lấy đúng những công cụ mà người dùng cần.
Có rất nhiều bộ điều khiển nhưng ta chỉ chú ý tới dvips cho yap.exe
của MiKTEX, còn pctex32, pctexps, ... cho PcTEX. Ta có thể liệt kê ra
đây để các bạn có thể gặp những chương trình DVI khác
dvipdf dviwindo pctexhp* tcidvi
dvips emtex* pctexps textures
dvipsone oztex pctexwin* truetex*
dviwin* pctex32 pdftex xdvi
Những * chỉ ra rằng những điều khiển này không cung cấp phương
thức làm mầu, phóng to thu nhỏ và quay hình. Mỗi bộ điều khiển đều
được cập nhật bổ sung, bạn đọc có thể tìm trực tiếp trên Internet.
Mỗi điều khiển khi sử dụng phải khai báo khi gọi gói lệnh graphics
và color như:
\usepackage[dvips]{graphics, color}
Hiện nay còn một gói lệnh tương tự như gói lệnh graphics là
graphicx. Hai gói lệnh này giống nhau hoàn toàn về chức năng đưa
hình vào, chỉ có khác là cú pháp lệnh đưa các hình vào. Chúng ta chỉ
cần gọi một trong hai gói lệnh trên là được. Ngoài những tùy chọn
phần trên còn một số tùy chọn phục vụ trong quá trình soạn thảo và
chạy LATEX thuận tiện hơn:
7.3. Gói lệnh đưa hình vào 219

draft R Không gọi ảnh vào nhưng khung để hình sẽ hiện ra và với

R
tên tệp ở trong khung. LATEX chỉ xử lý đối với khối văn bản.
final Ngược lại với tùy chọn trên; điều này cần thiết khi tùy chọn

R
trong lệnh \documentclss cũng có tùy chọn draft.

R
hidescale Bỏ trống khoảng trắng ở đó ảnh phóng sẽ chiếm chỗ.

R
hiderotate Bỏ trống khoảng trắng mà hình sẽ quay chiếm chỗ.
hiresbb Tìm giá trị chiều dài, chiều rộng của hình trong
%%HiResBoundingBox thay vì trong dòng định dạng chuẩn
%%BoundingBox.

7.3.1. Những lệnh trong graphics


Lệnh cơ bản của gói lệnh này là
\includegraphics[<xd,yd>][<xc,yc>]{<tên tệp>}
<xd,yd> là tọa độ góc dưới bên trái và <xc,yc> là tọa độ góc trên
bên phải, nghĩa là hình chữ nhật do hai tọa độ này tạo ra sẽ chứa ảnh.
Những tọa độ này phải có đơn vị độ đo. Nếu một tùy chọn trên không
có thì coi như điểm đầu bằng [0,0], còn điểm thứ hai là điểm đã có. Nếu
không có tùy chọn khung hình thì khung hình đó phụ phuộc vào kích
thước của hình. Ví dụ hình có phần mở rộng là eps thì ta có thể gọi lệnh
đơn giản

7 8 : 2
\begin{center}
\includegraphics{hoa}
\end{center}

Dạng \includegraphics* là hình được vẽ đúng kích thước, nếu


hình vượt ra ngoài kích thước thì sẽ bị treo.
Phóng to thu nhỏ: Hình được đọc vào theo lệnh trên chỉ giữ đúng kích
thước mà nó vốn có. Muốn phóng to thu nhỏ hình ta dùng lệnh
\scalebox{<phóng chiều rộng>}[<phóng chiều cao>]{<tên tệp>}
Các số <phóng chiều rộng> và <phóng chiều cao> là hệ số phóng
của nguyên bản hình. Có thể người ta chỉ có một số phóng thì mặc định
là chỉ phóng theo chiều rộng. Người ta cũng định lại kích thước ảnh
220 Chương 7. Vẽ hình và quản lý hình vẽ

bằng lệnh
\resizebox{<độ dài rộng>}{<độ dài cao>}{<tên tệp>}
Hình sẽ lấy đúng chiều rộng và chiều cao để điền ảnh. Có thể không
phải ảnh mà một khối văn bản nào đó cũng có thể điền đầy vào đó.
Lấy đối xứng: Lệnh sau quay hình đối xứng theo chiều ngang của ảnh
\reflectbox{<tên tệp>}.
Phép quay: Quay hộp chứa văn bản hoặc chứa hình theo ngược chiều
kim đồng hồ trên đường cơ bản của dòng chứa hình.
\rotatebox{<góc quay>}{<tên tệp>}
với <góc quay> được tính theo độ và quay ngược chiều kim đồng hồ.

7 8 : 2
\resizebox{!}{1.5cm}
{\includegraphics{maybay}}
\rotatebox{30}{\resizebox{!}{1.5cm}
{\includegraphics{maybay}}}

7.3.2. Những lệnh trong graphicx

Nếu ta chọn gói lệnh graphicx thì những lệnh đưa vào các hình có
khác và lệnh chính là
\includegraphics[<từ khóa>=<giá trị>, ..., ...]{<tên tệp>}
Đối số <giá trị> là một số và cũng có thể là một cờ lệnh true đúng
hoặc false sai. Còn <từ khóa> trong tùy chọn là những trường hợp

R
sau đây:

R
scale (=<một số>) là hệ số phóng ảnh so với nguyên bản của nó.
width (=<số độ rộng>) Chỉ ra chiều rộng của ảnh bằng <số độ
rộng>, nếu chiều cao không chỉ ra thì nó lấy độ cao bằng đúng

R
chiều rộng này.
height (=<số độ cao>) Chiều cao của ảnh bằng <số độ cao>,
nếu không có tùy chọn chiều rộng thì nó lấy chiều rộng đúng

R
bằng chiều cao này.
totalheight (=<số độ dài>) Như chiều cao của hình cộng thêm
phần chiều sâu so với dòng cơ bản. Như vậy ảnh sẽ lùi xuống so
7.3. Gói lệnh đưa hình vào 221

R
với dòng một chút và khi quay nó lấy đó làm nền để nghiêng đi.
keepaspectration (=true/false) Nếu cả hai đối số width và
height đều được chỉ ra thì tỷ số chiều cao trên chiều rộng không

R
thay đổi.
angle (=<một số>) Góc quay của hình theo số đã cho được tính
bằng độ và chiều quay là ngược chiều kim đồng hồ. Từ khóa này

R
nhất thiết phải sau từ khóa chiều rộng width và chiều cao height.
origin (=<vị trí>) Xác định điểm quay, mặc định là bl góc trái
phía dưới ảnh là điểm quay; c lấy tâm hình; t lấy cạnh trên của
hình; r lấy tâm cạnh phải; và b lấy dòng cơ bản; ta cũng có thể kết

R
hợp lại như tr góc trên bên phải của hình làm tâm quay.
draft (=true/false) Như là draft của gói lệnh đã giải thích ở

R
phần trên nhưng nó chỉ có tác dụng cho một hình này thôi.
clip (=true/false) Treo tất cả các hình có chiều rộng hơn hộp

R
đã quy định cho nó.
bb (=xd yd xc yc) Đây là cho tọa độ bằng tay, hai số đầu là tọa
độ góc dưới, hai số sau là hai tọa độ góc trên, mỗi số đều cách
nhau một khoảng trắng, có thể có đơn vị đo nếu không thì mặc

R
định đơn vị đo là bp.
viewport (=xd yd xc yc) Tương tự trên chỉ ra hộp chứa hình
nhưng tương đối so với điểm góc trái dưới của ảnh; ứng dụng

R
tùy chọn này để chỉ thể hiện một khoảng của ảnh.

R
trim (=xd yd xc yc) Giảm khung hình đã chỉ ra.
hiresbb (=true/false) Giống như tùy chọn của gói lệnh là đọc
kích thước cho hộp lệnh khác đi.

Ví dụ cho các tùy chọn trên vẫn là hình máy bay:

7 8 : 2
\includegraphics[height=1.5cm,
angle=90]{maybay}
\quad
\includegraphics[height=1.5cm,
angle=-45]{maybay}
222 Chương 7. Vẽ hình và quản lý hình vẽ

7.3.3. Một số gói lệnh khác

1. Gói lệnh epsfig của Sebastian Rahtz nhằm đưa hình vào dễ dàng
hơn theo nghĩa của gói lệnh graphics, với lệnh
\epsfysize=<độ dài y> hoặc \epsfxsize=<độ dài x>
\epsf[xd yd xc yc]{<tên tệp>}
ngoài ra nó còn có lệnh với các khóa
\epsfig{file=<tên tệp>, <từ khóa>=<giá trị>,...}
2. Gói lệnh lscape của David Carlisle. Trong nó định nghĩa môi
trường landscape mà nó quay cả trang đi 900 . Nhưng các tiêu đề chạy
và chú thích vẫn không đổi. Gói lệnh này có ích khi ta cho hình đưa vào
quay ngang trang văn bản. Các bạn có thể thử môi trường này, khi ra
tệp DVI rồi phải đổi ra PS thì mới có tác dụng. Tất cả những gì trong
môi trường \begin{landscape} ...\end{landscape} đều được quay
ngang.
3. Gói lệnh rotating của Sebastian Rahtz và Leonor Barroca cho ta
những môi trường quay một cách đơn giản và có thể quay từng khối:
\begin{sideways} <khối văn bản> \end{sideways} % quay 90 độ
\begin{turn}{<số góc>} <khối văn bản> \end{turn} % quay góc
bất kỳ
\begin{rotate}{<số góc>} <khối văn bản> \end{rotate}
\turnbox{<số góc>}{<khối văn bản>}

7 8 : 2
\rule{0pt}{1.5in}\begin{tabular}{rrr}
\begin{turn}{45}Column
1

um 2
3

1\end{turn}&
n

ol n
n
um

C lum

\begin{rotate}{45}Column
ol

o
C

2\end{rotate}&
\begin{rotate}{45}Column 1 2 3
3\end{rotate}\\ 4 5 6
\hline 7 8 9
1& 2& 3\\ 4& 5& 6\\ 7& 8& 9\\
\hline
\end{tabular}
7.3. Gói lệnh đưa hình vào 223

7 8 : 2
\begin{sideways}
\begin{tabular}{|l|l|c|c|c|c|p{1cm}|}

Ghi
Phát hiện mới chú
\hline
&&\multicolumn{4}{c}
{Số người nghiện ma túy}\vline

Nữ
27
16
13
10

10
18
&\\

8
Tình hình năm 2001
Số người nghiện ma túy
\cline{3-6}
&Thành phố&&\multicolumn{3}{c}{%

Tỉ lệ Tái nghiện Nam


103
43

12

24
44
Tình hình năm 2001}\vline&Ghi \\

6
\cline{4-6}&&&&
\multicolumn{2}{c}{Phát hiện mới}
\vline&chú\\ \cline{5-6}

31
16
15

17
&&Tỉ lệ&Tái nghiện&Nam&Nữ&\\

9
7
8
\cline{2-7}
&Hà Nội&41&31&103&27&\\
&Hồ Chí Minh&23&16&43&16&\\

41
Hồ Chí Minh 23
18
13
10
10
8
&Hải Phòng&18&15&8&13&\\
&Đà Nẵng&13&9&12&10&\\

Quảng Ninh
&Cần Thơ&10&7&6&8&\\

Kiên Giang
Thành phố

Hải Phòng
&Kiên Giang&10&8&24&10&\\

Đà Nẵng
Cần Thơ
Hà Nội

\rule{0.5cm}{0pt}
\begin{rotate}{90}Báo cáo an ninh
\end{rotate}\rule{0.5cm}{0pt}
&Quảng Ninh&8&17&44&18&\\
\hline Báo cáo an ninh
\end{tabular}
\end{sideways}

Gói lệnh này còn nhiều ứng dụng nữa, bạn đọc tham khảo trực tiếp
thư mục chứa gói lệnh này, cũng như trong đĩa CD chúng tôi có chuẩn
bị cho cuốn sách này.

7.3.4. Cấu hình điều khiển để đưa ảnh vào văn bản

Mặc dù những gói phần mềm cho LATEX đã được chuẩn hóa trong
tệp *.def, nhưng cũng vẫn còn những cấu hình cài đặt cụ thể trên
máy ta phải xem xét. Những cấu hình này thường chứa trong tệp
graphics.cfg.
1. Chọn điều khiển màn hình và máy in, cho chương trình DVI thường
được đặt trong dòng lệnh
\ExecuteOptions{<bộ điều khiển>}
224 Chương 7. Vẽ hình và quản lý hình vẽ

Nếu cài trong tệp thì đè lên khai báo của tập cấu hình đã có.
2. Những lệnh sau đây có thể để trong tệp nguồn văn bản hoặc trong
tệp graphics.cfg. Để chỉ ra thư mục chứa các ảnh ta có thể khai báo
\graphicpath{<danh sách đường dẫn>}
Danh sách đường dẫn được phân biệt bằng dấu {... }. Ví dụ
\graphicpath{{hinhbmp/}{hinheps/}}.
3. Mặc định về phần mở rộng các tệp hình được liệt kê trong lệnh
\DeclareGraphicsExtensions{<danh sách phần mở rộng>}
Ta muốn sử dụng các tệp ảnh có đuôi như thế nào thì liệt kê vào đó,
tất nhiên LATEX với các phần mềm không phải loại tệp ảnh nào cũng sử
dụng được, chỉ phổ biến là
\DeclareGraphicsExtensions{.eps,.ps,.bmp,.wmf,.tif,...}
4. Loại tệp hình được thể hiện bằng phần mở rộng, người dùng phải
cung cấp những tệp hình có phần mở rộng khác tương ứng với việc
LATEX biết để xử lý. Thường LATEX xử lý các tệp hình theo Postscript có
đuôi là eps. Để LATEX có thể xử lý được tệp bmp ta phải khai báo
\DeclareGraphicsRule{.bmp}{eps}{}{}
để thông báo cho LATEX biết là phần mở rộng kiểu này được xử lý như
là tệp có đuôi eps.

7.4. Tô mầu nền và chữ


Gói lệnh mầu color đi cùng với bộ điều khiển như của gói lệnh

R
graphics. Dùng gói lệnh này có tùy chọn sau đây

monochrome Tất cả các lệnh mầu được chuyển về mầu trắng đen và

R
xem trên màn hình không có mầu khác.
dvipsnames Dùng thông số named mô hình mầu dvips và các bộ

R
điều khiển mầu khác.

R
nodvipsname Không dùng named cho dvips tiết kiệm bộ nhớ.
usenames Gọi tất cả named mầu vào và xác định loại điều khiển.

Những thông số được đặt trong tệp color.cfg. Các lệnh liên quan
7.5. Các loại môi trường di động 225

đến mầu được cho bởi tên hoặc được định nghĩa dưới dạng
[<mô hình màu>]{<danh sách số>}
ở đây <mô hình màu> là một trong rgb (red, green, blue), cmyk (cyan,
magenta, yellow, black), gray hoặc named. Còn <danh sách số> là dãy
số nằm trong từ 0 đến 1, là độ dài của thành phần trong mô hình màu.
Ví dụ [rgb]{1,0,0} là mầu đỏ, [cmyk]{0,0,1,0} là màu vàng. Mô
hình màu gray chỉ lấy 1 số. Mô hình named lấy các màu bằng tên quốc
tế được xây dựng nguyên bản của bộ điều khiển dvips.
Một màu có thể định nghĩa bằng
\definecolor{<tên màu>}{<mô hình màu>}{<danh sách số>}
ở đây <tên màu> là tên màu ta định nghĩa và được dùng trong các lệnh
về màu. Một số màu đã là mặc định cho bất cứ một bộ điều khiển màu
nào: red, green, blue, yellow, cyan, magenta, black, wite.

7.5. Các loại môi trường di động


Những hình hoặc những khối biểu bảng có thể dời tới một vị trí
thích hợp của các trang văn bản để cố định, nhưng các dòng văn bản
khác vẫn được sắp xếp lần lượt bình thường. Để phục vụ cho việc di
dời những biểu bảng, khối văn bản hoặc hình ảnh LATEX cung cấp hai
môi trường để ta chủ động điều khiển di dời đó. Những môi trường
như vậy gọi là môi trường di động:

7.5.1. Vị trí của môi trường di động

\begin{figure}[<vị trí đặt>] <hình> \end{figure}


\begin{figure*}[<vị trí đặt>] <hình> \end{figure*}
\begin{table}[<vị trí đặt>] <bảng> \end{table}
\begin{table*}[<vị trí đặt>] <bảng> \end{table*}
Dạng * chỉ áp dụng cho trang có định dạng hai cột, khi đó hình hoặc
bảng trải ra cả hai cột và coi như chỗ đó là một cột. <hình> là môi
trường picture như ở trên, còn <bảng> là các loại môi trường bảng
như tabular đã xét ở chương 6. Hai môi trường này đều có lệnh đánh
số là \caption với đối số là lời chú thích. Còn vị trí đặt <vị trí đặt>
226 Chương 7. Vẽ hình và quản lý hình vẽ

R
sẽ là các chữ cái có ý nghĩa sau:

h Nghĩa là ở tại vị trí đặt lệnh này môi trường di động sẽ được chèn

R
vào. Không cho phép dạng * có đối số loại này.
t Môi trường di động sẽ ra ở đỉnh trang hiện thời, nếu văn bản
phía trước môi trường và toàn bộ môi trường di động đủ nằm
trên một trang. Nếu không thỏa mãn điều trên thì sẽ chuyển sang
đầu trang sau, còn văn bản sau môi trường tiếp tục nối với văn

R
bản phía trước cho đến khi lập trang mới.
b Môi trường di động được đặt ở cuối trang hiện thời. Nếu khoảng
trống trang đó do văn bản trước môi trường để lại không đủ chỗ
thì môi trường di động được đặt ở cuối trang tiếp theo, còn văn
bản sau môi trường sẽ nối vào với phần trước cho đến đầu môi
trường di động ở vị trí mới và tiếp tục sang trang. Đối số này

R
không cho phép dạng *.
p Môi trường di động ở một trang đặc biệt chỉ dành cho hình hoặc

R
bảng.
! Dùng với sự kết hợp những chữ cái trên.

Giá trị đối số có thể kết hợp cho phép một số khả năng. Nếu không
có đối số tùy chọn thì môi trường được gán theo tổ hợp tbp.
Đối số đặt chỗ của môi trường di động cho phép xác định vị trí di
động, nhưng với tính chất là đưa môi trường vào càng sớm càng tốt
theo nguyên tắc sau đây:

• Không môi trường di động nào được xuất hiện tại các trang đã
định nghĩa ưu tiên.
• Hình và bảng sẽ ra theo thứ tự lần lượt như khi đưa vào, không
có môi trường ở sau lại xuất hiện trước.
• Môi trường di động sẽ xác định vị trí một lần theo đối số <vị trí
đặt>, nếu thiếu đối số này thì mặc định là tổ hợp tbp.
• Không có kí tự ! trong <vị trí đặt> thì vị trí đặt sẽ bỏ qua tất cả
giới hạn của các thông số trong mục sau.
• Với tổ hợp ht đối số h được ưu tiên môi trường di động cố gắng
đưa vào vị trí hiện tại, nếu không đủ chỗ thì được chuyển sang
7.5. Các loại môi trường di động 227

đầu trang sau.

Có trường hợp người ta muốn cấm khối di động xuất hiện ở một
số trang nào đó, ví dụ như đỉnh của một đầu chương chẳng hạn. Tuy
nhiên, có những tình huống khác khối di động phải tạm thời treo lại.
Người ta cũng muốn khối di động ở trên đầu trang nhưng không ở
những trang có các tiêu đề phân đoạn ngay đầu trang. Lệnh
\suppressfloats[<vị trí>]
Đối số <vị trí> chỉ có hai giá trị t hoặc b. Nếu lệnh này đặt đâu đó
trong văn bản thì từ trang này trở đi mọi khối di động sau đó được chỉ
ra trùng với <vị trí> đều để lại đến trang sau. Nếu lệnh trên không có
đối số tùy chọn <vị trí> thì tất cả các loại khối di động đều để lại đến
trang sau đó.
Bạn đọc có thể sử dụng gói lệnh flafter của Frank Mittelbach để
tự động di chuyển tất cả các khối tới đầu trang và chắc chắn các tham
chiếu chéo xuất hiện sau nó.
Bạn đọc cũng có thể dùng gói lệnh afterpage của David Carlisle
với lệnh \afterpage thì những khối di động sẽ được chuyển sang trang
sau.

7.5.2. Thông số cho môi trường di động

Có một số thông số có ảnh hưởng tới việc đặt hình hoặc bảng di

R
động, người dùng có thể thay đổi được trong LATEX.

topnumber Số lớn nhất của những khối di động có thể xuất hiện

R
tại đầu trang trong một văn bản. Mặc định là 2.
bottomnumber Số lớn nhất của những khối di động có thể xuất hiện

R
tại cuối trang trong một văn bản. Mặc định là 1.
totalnumber Số lớn nhất của những khối di động có thể xuất hiện

R
tại bất kỳ trang nào trong một văn bản. Mặc định là 3.
dbltopnumber Như topnumber trong văn bản có hai cột. Mặc định
là 2.

Tất cả các thông số trên là biến số đếm và ta có thể đặt lại bằng
lệnh \setcouter{<thông số>}{<một số>} với <thông số> là những
228 Chương 7. Vẽ hình và quản lý hình vẽ

R
số đếm trên và <một số> giá trị mới là một số.

\topfraction Tỷ số thập phân lớn nhất có số trang có thể có ảnh


tại đầu trang. Ví dụ như nếu nó là 0.2 thì 20% số trang có thể có

R
ảnh tại đầu trang. Giá trị mặc định là 0.7.
\bottomfraction Tỷ số thập phân lớn nhất có số trang có thể có

R
ảnh tại cuối trang. Giá trị mặc định là 0.3.
\textfraction Tỷ số lớn nhất của các trang bình thường bắt đầu

R
trang bằng văn bản. Mặc định là 0.2.
\floatpagefaction Tỷ số trang lớn nhất phải xuất hiện khối di
động. Giới hạn này để tính khoảng trống cho phép tại các trang

R
di động. Giá trị mặc định là 0.5.
\dbltopfraction Tương tự như \topfraction nhưng trong văn

R
bản định dạng hai cột.
\dblfloatpagefraction Tương tự như \floatpagefraction
nhưng trong văn bản định dạng hai cột.

Loại thông số này thay đổi bởi lệnh


\renewcommand{<lệnh thông số>}{<số thập phân>}
với <lệnh thông số> là các lệnh trên và <số thập phân> là một số thập

R
phân để thay đổi.

\floatsep Khoảng trắng dọc giữa hai khối di động hoặc từ đầu
trang (cuối trang) đến khối di động. Mặc định phụ thuộc vào cỡ
của văn bản, ví dụ như số này là 12pt plus 2pt minus 2pt cho

R
văn bản 10pt.
\textfloatsep Khoảng trắng dọc giữa khối di động và văn bản
ở phía trên hoặc phía dưới. Mặc định là 20pt plus 2pt minus

R
4pt.
\intextsep Khoảng trắng dọc phía trên và phía dưới khối di động

R
ở giữa trang.
dblfloatsep Như trong \floatsep với trường hợp định dạng hai

R
cột một trang.
dbltextfloatsep Giống như \textfloatsep nhưng trong định
dạng hai cột trên một trang.
7.5. Các loại môi trường di động 229

Những lệnh trên là những độ đo co dãn nên ta có thể thay đổi bằng

R
lệnh \setlength

\topfigrule Lệnh đặt đường kẻ hoặc những thứ khác vào giữa

R
khối di động và đầu trang và cả đối với văn bản.
\botfigrule Lệnh đặt đường kẻ hoặc những thứ khác vào giữa

R
khối di động và cuối trang và cả đối với văn bản.
\dblfigrule Giống như các thông số trên nhưng trong môi trường
trang hai cột.
CHƯƠNG 8

LÀM CHỈ DẪN VÀ TRA CỨU

8.1. Bảng mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231


8.1.1. Cấu trúc bảng mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
8.1.2. Thêm nội dung bảng mục lục . . . . . . . . . . . . . . . . . . . . 233
8.1.3. Tự làm bảng mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
8.1.4. Gói lệnh minitoc cho nhiều bảng mục lục . . . . . . . . 235
8.1.5. Danh sách hình và bảng trong văn bản . . . . . . . . . . . 236
8.2. Chỉ dẫn chéo trong văn bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.2.1. Chỉ dẫn chéo cơ bản . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.2.2. Gói lệnh varioref tra cứu chéo mềm dẻo hơn . . . . . 240
8.2.3. Tra cứu chéo từ văn bản bên ngoài . . . . . . . . . . . . . . . 241
8.3. Làm danh mục từ khóa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
8.3.1. Quy trình làm chỉ số từ khóa . . . . . . . . . . . . . . . . . . . . 242
8.3.2. Chuẩn bị làm chỉ số trong tệp LATEX . . . . . . . . . . . . . . 244
8.3.3. Gói lệnh makeidx và chương trình MakeIndex . . . 246
8.3.4. Khai báo tùy chọn trong chương trình MakeIndex 247
8.3.5. Thông báo lỗi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
8.4. Người dùng định dạng lại chỉ số . . . . . . . . . . . . . . . . . . . . . . . . 250
8.4.1. Những từ khóa định dạng . . . . . . . . . . . . . . . . . . . . . . . 250
8.4.2. Những ví dụ định dạng lại chỉ số . . . . . . . . . . . . . . . . 253
8.5. Thay đổi trình bày bảng danh mục từ khóa . . . . . . . . . . . . . 255
8.5.1. Danh mục từ khóa nhiều cột . . . . . . . . . . . . . . . . . . . . . 255
8.5.2. Nhiều bảng danh mục từ khóa khác nhau . . . . . . . 256
8.5.3. Gói lệnh index mở rộng khả năng lệnh chỉ số . . . . 259
8.6. Trích dẫn tài liệu tham khảo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

Một tài liệu nhất là các báo cáo, cuốn sách không thể không có
những chỉ dẫn hoặc tra cứu trong chính nội dung của nó. Đơn giản
nhất là bảng mục lục, rồi đến các công thức, phương trình, trích đoạn,
tham khảo, ... đều xảy ra trong một tài liệu đầy đủ. Nếu ta làm các trích
dẫn và tra cứu chéo bằng tay thì chắc chắn có sai sót và nhầm lẫn, không
hết được các trường hợp ta mong muốn. LATEX đã cung cấp nhiều công
8.1. Bảng mục lục 231

cụ để thực hiện điều đó và chỉ cần gõ vào một lần là ta yên tâm lấy ra
rất chính xác theo trang, theo số công thức, theo nhãn cấu trúc văn bản,
... Dù trong quá trình soạn thảo một tài liệu dài có thay đổi vị trí của
các nhãn và trang như thế nào cuối cùng vẫn đúng. Nghĩa là LATEX cho
ta công cụ làm tự động tra cứu và trích dẫn.

8.1. Bảng mục lục


Một tài liệu người đọc thường chú ý đầu tiên đến bảng mục lục.
Nội dung của bảng mục lục đã nói lên phần nào người đọc cần tìm
kiếm thông tin và có quyết định đọc chi tiết nay không. Việc trình bày
bảng mục lục đầy đủ và không sai sót là rất quan trọng. LATEX cung
cấp một số lệnh làm bảng mục lục kèm theo với các chương, đoạn, số
hình hoặc bảng rất thuận tiện. Tất nhiên các bạn phải dùng cấu trúc
văn bản định dạng theo LATEX mà chúng ta đã nói tới trong suốt chương
này. Khi LATEX chạy với các lệnh \tableofcontents, \listoffigures
và \listoftables nó tạo ra tệp chứa các nội dung lần lượt là mục lục,
danh sách hình, danh sách bảng và sau đó đưa vào văn bản của ta tại vị
trí có lệnh này. Tên của các tệp trên được sinh ra trùng với tên *.tex của
người sử dụng chỉ có khác đuôi mở rộng: *.toc chứa bảng mục lục;
*.lof chứa danh sách hình và *.lot chứa danh sách bảng. Ta có thể
mở ra xem được nội dung các tệp này, mỗi lần LATEX chạy lại cập nhật
mới các tệp này một lần, nên ta không sửa trực tiếp ở đây được mà phải
dùng lệnh điều khiển tệp nguồn.

8.1.1. Cấu trúc bảng mục lục

Như phần trên LATEX cùng một lúc có thể tạo ra nhiều bảng một lúc.
Một lệnh tổng quát trong các tệp này là
\contenline{<loại>}{<văn bản>}{<số trang>} và các thông số có

R
nghĩa sau

R
<loại> Loại thực thể, ví dụ như section hoặc figure.
<văn bản> Văn bản được thể hiện trong mục lục hoặc lệnh
\caption.
232 Chương 8. Làm chỉ dẫn và tra cứu

<số trang> R Số trang (trang có tiêu đề này).

Một phần của mục lục sách thể hiện như sau:

7 8
\contentsline {chapter}{\numberline {1}Làm chỉ dẫn và tra
cứu}{10}{chapter.1}%
\contentsline {section}{\numberline {1.1}Bảng mục
lục}{11}{section.1.1}%
\contentsline {subsection}{\numberline {1.1.1}Cấu trúc bảng
mục lục}{11}{subsection.1.1.1}%
\contentsline {subsection}{\numberline {1.1.2}Thêm nội dung
bảng mục lục}{13}{subsection.1.1.2}%
\contentsline {subsection}{\numberline {1.1.3}Tự làm bảng
mục lục}{14}{subsection.1.1.3}%

: 2
Chương 1. Làm chỉ dẫn và tra cứu . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
1.1. Bảng mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.1. Cấu trúc bảng mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.2. Thêm nội dung bảng mục lục . . . . . . . . . . . . . . . . . . . . . . 13
1.1.3. Tự làm bảng mục lục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

Bằng lệnh trên ta có thể làm mục lục bằng tay, nghĩa là gõ trực tiếp
vào như ví dụ trên. Lệnh \numberline định dạng thụt đầu dòng của
mỗi loại trên.
Định dạng lại cả bảng mục lục LATEX sử dụng lệnh sau
\@dottedtocline{<bậc>}{<thụt vào>}{<bề rộng số>}{<văn
bản>}{<trang>}
Hai thông số cuối cùng giống hệt như lệnh ở phần trên trong

R
\contentsline, những thông số còn lại có ý nghĩa như sau

<bậc> Số bậc lồng nhau của văn bản. Thông số này cho phép người
dùng kiểm soát bậc lồng nhau để thụt đầu dòng khi in ra. Khi bậc
càng cao thì giá trị của tocdepth giới hạn đưa vào bảng mục lục.
Số tocdepth mặc định là 2, nghĩa là nó đưa vào bảng mục lục của
\part, \chapter, \section và \subsection.
8.1. Bảng mục lục 233

R
R
<thụt vào> Tổng thụt đầu dòng từ bên trái lề.
<bề rộng số> Độ rộng của hộp chứa chữ số nếu văn bản có lệnh
\numberline. Độ rộng này cũng được tính cho dòng thứ hai
không chứa số đếm.

Thêm vào mặc định của lệnh trên người ta còn dùng những lệnh thông

R
số sau đây để định dạng cho tất cả các chi tiết của mục lục:

R
\@pnumwidth Độ rộng của hộp chứa số trang.

R
\@tocrmarg Thu vào so với lề phải của nội dụng mục lục.
\@dotsep Khoảng cách giữa hai dấu chấm, theo độ đo mu.

Những thông số trên có thể thay đổi bằng lệnh \renewcommand và phải
đặt trong cặp lệnh \makeatletter ... \makeatother. Ta có thể mô tả các
thông số trên như hình sau:

\linewidth
<thụt vào>
<bề rộng số> Tên mục lục đưa vào \@tocrmarg
có thể nhiều dòng.............\@pnumwidth

Lệnh \contensline thực hiện thông số thứ nhất gọi lệnh \l@type
với tyle theo bậc của các lớp văn bản ta đã biết. Ví dụ những lệnh sau
đây được định nghĩa từ lớp book và report và ta cũng có thể định nghĩa
lại, nhớ là phải cho vào giữa \makeatletter ... \makeatother.
\newcommand{\l@section}{\@dottedtocline{1}{1.5em}{2.3em}}
\newcommand{\l@subsection}{\@dottedtocline{2}{3.8em}{3.2em}}
\newcommand{\l@subsubsection}{\@dottedtocline{3}{7.0em}{4.1em}}
\newcommand{\l@paragraph}{\@dottedtocline{4}{10em}{5em}}
\newcommand{\l@subparagraph}{\@dottedtocline{5}{12em}{6em}}
\newcommand{\l@figure}{\@dottedtocline{1}{1.5em}{2.3em}}
\newcommand{\l@table}{\l@figure}
Bậc được tính đưa vào mục lục được đặt ở thông số
\setcounter{tocdepth}{2} là mặc định.

8.1.2. Thêm nội dung bảng mục lục

LATEX cung cấp hai lệnh để đưa trực tiếp thông tin vào mục lục:
234 Chương 8. Làm chỉ dẫn và tra cứu

\addtocontents{<loại tệp>}{<văn bản>}

R
\addcontentsline{<loại tệp>}{<loại>}{<văn bản>}

R
<loại tệp> Phần mở rộng của tệp mục lục, *.toc, *.lof, *.lot.
<loại> Loại thực thể. Trong tệp *.toc loại thực thể theo các tiêu đề

R
đoạn section và chương chapter.
<văn bản> Nội dung thông tin được viết vào tệp. LATEX dùng lệnh
\protect để không đưa vào tệp ngay mà hoãn lại đến lần thứ hai.

Lệnh \addtocontents không có loại mà đưa trực tiếp định dạng vào
mục lục. Người ta lợi dụng lệnh này để đưa các lệnh điều khiển và
khoảng cách giữa các dòng. Ví dụ như
\addtocontents{toc}{\protect\vspace{2ex}}
Như vậy lệnh này đưa một khoảng dọc vào tệp mục lục giữa các
lệnh khác lần lượt trong văn bản.

8.1.3. Tự làm bảng mục lục

Ta cũng có thể tự làm bảng mục lục, ví dụ như một cuốn sách về bài
tập có đánh số các bài tập chẳng hạn. Ta vẫn dùng các công cụ được mô

R
tả ở phần trên. Việc đầu tiên ta phải làm là định nghĩa hai lệnh ví dụ:
1. \listofexample sẽ đọc các thông tin được viết trong tệp có

R
đuôi *.xmp và đưa vào vị trí mà muốn có bảng mục lục xuất hiện.
2. \ecaption tương ứng với tiêu đề của mỗi môi trường và có

R
đối số được viết vào tệp có đuôi *.xmp.
Lệnh \listofexample gọi lệnh \@starttoc{xxx} đọc từ tệp
ngoài có phần mở rộng là *.xxx và đưa vào văn bản đang biên
dịch. Lệnh này đã được dùng cho các lệnh \tableofcontents,
\listoffigures và \listoftables. Tệp thêm vào của ta được định
nghĩa bằng phần mở rộng *.xmp.
Mỗi một thực thể loại của tệp *.xmp được kiểm soát bằng lệnh
\l@example. Ví dụ sau đây tiêu đề được thể hiện như một đoạn với
số trang được in nghiêng.
\newcommand{\listofexample}{\@starttoc{xmp}}
8.1. Bảng mục lục 235

\newcommand{\ecaption}[1]{\addcontentsline{xmp}{example}{#1}}
\newcommand{\l@example}[2]{\par\noindent #1 {\itshape #2}}

8.1.4. Gói lệnh minitoc cho nhiều bảng mục lục


Gói lệnh minitoc được khởi xướng bởi Nigel Ward và Dan Jurafsky,
hoàn thiện bởi tác giả Jean-Pierre Drucbert. Gói này tạo ra bảng mục lục
nhỏ tại đầu mỗi chương trong lớp văn bản book và report.

R
Những lệnh thông số của gói lệnh này được tóm tắt như sau:

\dominitoc Lệnh này bắt buộc phải đặt trước \tableofcontents

R
để khởi động hệ thống minitoc (bắt buộc).
\faketableofcontents Lệnh này thay cho \tableofcontents khi

R
ta muốn minitoc nhưng không cần bảng mục lục chính.
\minitoc Lệnh này phải đặt đúng ngay sau lệnh \chapter, tại đó

R
mục lục nhỏ sẽ xuất hiện.
minitocdepth Số đếm của LATEX chỉ ra bậc bao nhiêu để đưa ra nội

R
dung cho mục lục minitoc (mặc định là bậc 2).
mtcindent Độ dài thụt vào từ lề trái và lề phải của bảng mục lục

R
minitoc (mặc định là 24pt).
mtcfont Lệnh định nghĩa phông dùng cho văn bản của minitoc
(mặc định là cỡ \small của phông hiện thời).

Khi dùng gói lệnh này tại đầu văn bản \usepackage{minitoc} sau đó
đặt các lệnh như hướng dẫn trên. Mỗi chương được tạo ra một bảng
mục lục nhỏ có tên là *.mtcN, ở đây N là số của chương có bảng mục lục.
Theo mặc định số đếm minitocdepth cũng tương tự như tocdepth là 2
và nội dung của mục lục lấy tới thông số của \section và \subsection.
Trước bảng nội dung mục lục ở mỗi chương có đề mục, ta muốn
định nghĩa lại dòng chữ này bằng lệnh \renewcommand{\mtctitle}{\
}, ở đây tôi đã định nghĩa bằng một dòng trắng, bạn đọc tham khảo tại
mỗi đầu chương của cuốn sách này đã áp dụng gói minitoc một cách
thành công. Nếu các bạn thấy nội dung của bản mục lục bị lệch đi một
chương thì các bạn hãy thêm vào lệnh \adjustmtc trước chương đó để
đánh số cho đúng.
236 Chương 8. Làm chỉ dẫn và tra cứu

Nhiều khi ta không dùng lệnh \minitoc nữa thì ta thay gói lệnh
minitoc bằng gói lệnh \usepackage{minitocoff}. Điều này chắc chắn
tất cả các lệnh \minitoc được bỏ qua.
Để minh họa dùng gói này tôi liệt kê phần nguồn ra đây, mong các
bạn chép vào một tệp và chạy thử, còn trong sách này không chạy minh
họa ra đây.

\documentclass{book} \subsection{Tôi muốn môi cô chỉ mỉm cười}


\usepackage{minitoc} \subsection{Những lúc có tôi và mắt chỉ}
\usepackage[utf8]{vietnam} \section{Nhìn tôi những lúc tôi xa xôi}
\setcounter{tocdepth}{1}
\setcounter{minitocdepth}{2} %––––-tiếp tục chương 1
\setlength{\mtcindent}{24pt} \chapter{Nghĩa là ghen quá đấy mà thôi !}
\renewcommand{\mtcfont} \minitoc
{\small} \section{Thế nghĩa là yêu quá mất rồi !}
\begin{document} \subsection{Và nghĩa là cô là tất cả ...}
\dominitoc \subsection{Cô là tất cả của riêng tôi !}
\tableofcontents
\chapter{Ghen} %––––tiếp tục chương 2
\minitoc \end{document}
\section{Cô nhân tình bé của
tôi ơi !}

8.1.5. Danh sách hình và bảng trong văn bản


Ngoài bảng mục lục ra còn hai danh sách cũng được sinh ra và tự
động làm được trong LATEX. Những lệnh sau sinh ra danh sách này
\listoffigure đọc vào hoặc sinh ra tệp có phần mở rộng là .lof;
\listoftables đọc vào hoặc sinh ra tệp có phần mở rộng là .lot.
Nội dung của hai danh sách này được tự động sinh ra bởi lệnh
\caption trong môi trường figure và môi trường table. Khi các môi
trường này không có lệnh \caption thì trong danh sách sẽ không có
chỉ dẫn của hình và bảng đó.
Muốn thêm dòng nội dung vào hai danh sách trên vẫn dùng lệnh
như là thêm vào cho mục lục chỉ có khác là đối số có phần mở rộng
tương ứng với các danh sách trên như
\addcontentsline{<đuôi tệp>}{<định dạng>}{<nội dung>}
\addtocontents{<đuôi tệp>}{<nội dung>}
ở đây <đuôi tệp> là lof cho danh sách hình, lot cho danh sách bảng.
8.2. Chỉ dẫn chéo trong văn bản 237

Còn <định dạng> là figure cho danh sách hình, table cho danh sách
bảng. <nội dung> là văn bản do người dùng đưa vào thích hợp.

8.2. Chỉ dẫn chéo trong văn bản


Trong mục này ta chỉ quan tâm tới những lệnh chỉ dẫn chéo chuẩn
của LATEX. Còn về làm chỉ số và số tài liệu trích dẫn ta để đến mục sau
sẽ nói chi tiết cụ thể, đó cũng là một phần rất quan trọng của mỗi cuốn
sách hoặc tài liệu có cấu trúc hiện đại.

8.2.1. Chỉ dẫn chéo cơ bản

Có ba từ khóa cho việc tra cứu đánh số chéo là


\label{<nhãn khóa>} \ref{<nhãn khóa>}, \pageref{<nhãn
khóa>}.
Lệnh \label là gán số vào nhãn <nhãn khóa> của đối tượng có số
đếm như các lệnh \chapter, \section, ... hoặc môi trường equation,
figure, table, theorem, ...Lệnh \ref là thể hiện vào văn bản số đã ghi
ở <nhãn khóa>, lệnh này có tác dụng cho các đối tượng có số đếm được
liệt kê ở trên. Lệnh \pageref chỉ có tác dụng đưa ra số trang mà ở đó
lệnh \label đã gán vào nhãn <nhãn khóa>.
Vì nhãn được dùng chung một lệnh \label như vậy, nên để phân
biệt các nhãn cho các đối tượng khác nhau người ta thường dùng
đúng tên nhãn để phân biệt như \label{sec:c11}, \label{sec:c12},
... cho các tiêu đề đoạn của văn bản. Nhưng \label{fig:c11},
\label{fig:c12}, ... dùng sau lệnh \caption của mỗi một hình
vẽ. Tương tự như vậy cho các bảng dùng \label{tab:c11},
\label{tab:c12}, .... Khi thể hiện các số trên cũng dễ nhớ như
\ref{sec:c12}, \ref{fig:c11}, ....
Việc dùng nhãn cho các chương, các đoạn, các phương trình bằng
các lệnh trên một cách dễ dàng và chính xác, tránh cho ta nhầm lẫn trích
dẫn một cách đáng tiếc.
1. Chỉ dẫn theo chương, đoạn văn bản: Những lệnh \chapter,
\section, \subsection, ... ngay sau đó ta gán nhãn \label{<tên
238 Chương 8. Làm chỉ dẫn và tra cứu

nhãn>}, ví dụ như \label{chap:c1}, \label{chap:c2},


\label{sec:s1}, ... thì <tên nhãn> được gán vào các số đếm của
chương, đoạn đó. Khi đó ta đặt bất cứ đâu trong văn bản \ref{<tên
nhãn>} đều ra đúng số đếm đã gán. Ví dụ thực tế trong mục nhỏ này
tôi đã gán nhãn
\subsection{Chỉ dẫn chéo cơ bản}\label{subsec:sub1}
sau đó dùng \ref{subsec:sub1} cho kết quả số mục 8.2.1.
2. Chỉ dẫn hình và bảng: Môi trường hình figure và bảng table được
đánh số tự động trong lệnh \caption{<chú thích hình hoặc bảng>},
muốn gán nhãn ta phải đặt nhãn ngay sau lệnh này, ví dụ \caption{Sơ
đồ cấu trúc \LaTeX}\label{fig:sd1}

7 8: 2
\begin{figure}[!ht]
\centering
\includegraphics[scale =1]{head4}
\caption{Vẽ bằng WinTpic}
\label{fig:h1} Hình 1.1. Vẽ bằng WinTpic
\end{figure}

Khi ta sử dụng \ref{fig:h1} hình có số 1.1.


Tương tự cho một bảng với nhãn \label{tab:b1}, sau đó ta đặt bất
cứ đâu \ref{tab:b1} cũng cho số nhãn 5.1.

7 8: 2
\begin{table}[!ht]
A B
\centering
\begin{tabular}{|l |l|}\hline C D
A&B\\ \hline
Bảng 5.1. Ví dụ bảng
C&D \\ \hline
\end{tabular}
\caption{Ví dụ bảng}\label{tab:b1}
\end{table}
Chỉ dẫn công thức toán học: Đánh số công thức toán học một dòng bao
giờ cũng trong môi trường equation và nhãn khóa được đánh ngay sau
khi mở môi trường \begin{equation}\label{eq:c1}, ví dụ
8.2. Chỉ dẫn chéo trong văn bản 239

7 8 : 2
\begin{equation}\label{eq:c1}
( a + b) = a + 2ab + b
2 2 2
(8.1)
(a+b)^2=a^2+2ab+b^2
\end{equation} Thể hiện bằng số bằng (8.1).
Thể hiện bằng số bằng
(\ref{eq:c1}).

Những môi trường dóng công thức mỗi dòng một số, ta phải gán
nhãn cho từng dòng, ví dụ như

7 8 : 2
\begin{align}
\alpha&=45^\circ\label{eq:pt1}\\ α = 45◦ (8.2)
\beta&=90^\circ\label{eq:pt2} ◦
β = 90 (8.3)
\end{align}
Khi đó đẳng thức thứ nhất
Khi đó đẳng thức thứ nhất (8.2) và
(\ref{eq:pt1}) và đẳng thức
đẳng thức thứ hai (8.3).
thứ hai (\ref{eq:pt2}).

Nhãn có thể gán bằng lệnh \tag{<nhãn>}, nhãn không có dấu


ngoặc tròn xung quanh \tag*{<nhãn>} và không gán nữa \notag, ví
dụ

7 8 : 2
\begin{align}
\Phi&=45^\circ\notag\\ Φ = 45◦
\varphi&=90^\circ\tag{K}\label{eq:pt3}\\
ϕ = 90◦ (K)
\gamma&=60^\circ\tag*{H}\label{eq:pt4}

\end{align} γ = 60 H
Khi đó cũng tham chiếu được
\ref{eq:pt3} và \ref{eq:pt4}. Khi đó cũng tham chiếu
được (K) và H.

Công thức đánh cùng một số với những chữ cái liên tiếp bên cạnh
dùng môi trường subequations, ví dụ
240 Chương 8. Làm chỉ dẫn và tra cứu

7 8: 2
\begin{subequations}\label{eq:pt0}
\begin{align}
a&=2R \sin a = 2R sin α (8.4a)
\alpha\label{eq:pt5}\\
b = 2R sin β (8.4b)
b&=2R \sin \beta\label{eq:pt6}\\
c&=2R \sin \gamma\label{eq:pt7} c = 2R sin γ (8.4c)
\end{align}
Lấy nhãn trên bằng cách
\end{subequations}
8.4a,8.4b và 8.4c, còn nhãn
Lấy nhãn trên bằng cách
chung thì 8.4.
\ref{eq:pt5},\ref{eq:pt6} và
\ref{eq:pt7}, còn nhãn chung
thì \ref{eq:pt0}.

Ta có thể chủ động gán nhãn và tra cứu chéo thì

7 8: 2
\begin{align}
a&=b\cos\gamma,\label{eq:pt8}\\ a = b cos γ, (8.5)
b&=c\cos\alpha.
b = c cos α. (8.50 )
\tag{\ref{eq:pt8}$’$}\label{eq:pt9}
\end{align} Ta sẽ có 8.5 và 8.50 .
Ta sẽ có \ref{eq:pt8} và \ref{eq:pt9}.

8.2.2. Gói lệnh varioref tra cứu chéo mềm dẻo hơn

Nhiều trường hợp cùng một nhãn ta muốn thể hiện cả hai lệnh \ref
cho số đối tượng và \pageref cho số trang mà đối tượng đang ở đó.
Người ta có thể định nghĩa một lệnh dùng chung như
\newcommand{\fullref}[1]{\ref{#1} tại trang~\pageref{#1}}
Để thuận tiện Frank Mittelbach đã tạo ra gói lệnh varioref với lệnh
\vref{<nhãn khóa>}
Lệnh \vref sẽ tạo ra kết quả như \ref khi mà vị trí của \ref và
\label nằm trên cùng một trang. Lệnh này còn in ra một trong những
dòng chữ sau: "on the preceding page", hoặc "on the following page"
nếu \ref và \label cách nhau một trang. Còn nó sinh ra \ref và
\pageref khác nhau nhiều trang.
\vpageref[<trang này>][<trang khác>]{<nhãn khóa>}
8.2. Chỉ dẫn chéo trong văn bản 241

Nhiều khi ta chỉ tra cứu chéo số trang. Nếu cùng trang thì \vref
không có tác dụng gì, để khắc phục điều này ta có lệnh \vpageref.
Lệnh này không bắt đầu bằng lệnh \ref mà bằng chuỗi văn bản trong
lệnh \reftexxtcurrent nếu \label và lệnh \vpageref rơi vào cùng
một trang. Còn hai lệnh nữa chứa văn bản cho tra cứu lệch một trang là
\reftextbefore và \reftextafter. Còn lệnh \reftextfaraway chứa
nội dung tra cứu lệch hơn một trang. Lệnh này có hai tùy chọn để cho
chữ kèm vào trích dẫn như
...hãy xem \vpageref[bảng trên][bảng]{tab:c12} chỉ ra ...
Tại những vị trí thích hợp trong văn bản thì tùy chọn trên được điền
vào dòng văn bản.
Để những chữ tiếng Anh mặc định của các lệnh này
thay đổi theo một ngôn ngữ nào đó thì ta dùng lệnh như
\usepackage[german]{varioref}. Tiếng Việt không có gói lệnh
tùy chọn nên ta dùng giải pháp định nghĩa lại.
Để tạo ra những chuỗi trích dẫn đúng, ta có lệnh \reftextvario
\reftextvario{Phương án 1}{Phương án 2}
Lệnh này lấy hai đối số để in ra phụ thuộc vào \vref hoặc
\vpageref được đếm trong văn bản. Ta định nghĩa lại cho tiếng Việt
như sau
\renewcommand{\reftextfaceafter}{trên trang \reftextvario{này}{sau}}
\renewcommand{\reftextfacebefore}{trên trang \reftextvario{này}{trước}}
\renewcommand{\reftextafter}{trên trang \reftextvario{tiếp}{sau}}
\renewcommand{\reftextbefore}{trên trang \reftextvario{ngay
trước}{trước}}
\renewcommand{\reftextcurrent}{trên trang \reftextvario{này}{hiện thời}}
\renewcommand{\reftextfaraway}[1]{trên trang ~\pageref{#1}}

8.2.3. Tra cứu chéo từ văn bản bên ngoài


Gói lệnh xr thực hiện tra cứu chéo ngoài văn bản của các tác giả
David Carlisle và Jean-Pierre Drucbert. Giả sử ta muốn tra cứu chéo
các số mục trong một tệp ngoài có tên là other.tex, khi đó đưa gói
lệnh vào đầu tệp và sau đó là lệnh \extenaldocument{other}.
Sau đó như thường lệ ta dùng các lệnh \ref và \pageref để tra cứu
chéo bất cứ một nhãn nào của lệnh \label trong tệp other.tex.
242 Chương 8. Làm chỉ dẫn và tra cứu

Trường hợp có những nhãn trong văn bản chính và văn bản ngoài
trùng nhau, khi đó xảy ra sự đối kháng các nhãn lúc chạy LATEX sẽ thông
báo lỗi. Để khắc phục điều này khi khai báo tệp ngoài ta phải tùy chọn
\extenaldocument[A-]{other}
Khi đó những nhãn trong tệp other.tex được gắn thêm tiếp
đầu ngữ A- khi tham chiếu chéo. Ví dụ khi trong tệp other.tex
có nhãn \label{intro} thì khi tham chiếu ở tệp chính của ta sẽ là
\ref{A-intro}.

8.3. Làm danh mục từ khóa


Một văn bản lớn như sách, báo cáo, tài liệu đầy đủ thường có những
mục lục, từ khóa để ta có thể tra lại các thông tin trong tài liệu theo các
từ khóa đó. Một cuốn sách khoa học không thể thiếu phần chỉ dẫn
của từ khóa. Danh mục từ khóa đã trở thành một phần của cuốn sách.
Những từ khóa thường ở cuối sách và gắn liền với chúng là số trang ta
đã đánh dấu nó xuất hiện ở đó. Người đọc dễ dàng tìm lại và tra lại các
thông tin liên quan đến từ khóa.
Để sinh ra danh mục từ khóa làm bằng thủ công dễ bị sai sót do
trong quá trình soạn thảo các trang trong văn bản luôn luôn thay đổi.
Những người phát triển LATEX đã đưa ra một giải thuật làm chỉ số
từ khóa tự động bằng các lệnh của LATEX và một phần mềm sắp xếp
MakeIndex.

8.3.1. Quy trình làm chỉ số từ khóa

Quá trình làm chỉ mục từ khóa theo sơ đồ hình 8.1. Trong sơ đồ toàn

R
vẹn quá trình làm chỉ số có ba nấc nếu tạo ra chỉ số:

R
1. Tệp *.tex được chạy qua LATEX sinh ra *.idx gồm các hàng chỉ số.
2. Tệp *.idx cùng các tùy chọn thông tin từ tệp *.ist chạy qua chương
trình MakeIndex tạo ra tệp theo thứ tự chữ cái từ khóa *.ind và tệp sao

R
lưu *.ilg.
3. Tệp chỉ số *.ind được đọc vào qua LATEX và cho kết quả bảng danh
mục từ khóa trong tệp *.dvi.
8.3. Làm danh mục từ khóa 243

Nếu không làm từ khóa thì *.tex biên dịch LATEX cho tệp *.dvi.
Như vậy ta phải chuẩn bị
tệp *.tex
làm chỉ số bằng các lệnh của
LATEX đó là lệnh \index, ta
phải thiết kế những cách làm
1. R LATEX

chỉ số thích hợp để chỉ số tệp *.idx

chính xác, tự động và đẹp. 2. R MakeIndex


tệp *.ist

Như sơ đồ trên cho thấy tệp *.ind


từ khi gõ lệnh vào tệp nguồn
*.tex phải qua rất nhiều công
3. RLATEX tệp *.ilg

đoạn nữa mới cho kết quả, ta tệp *.dvi


lấy một ví dụ nhỏ về hình ảnh
làm chỉ số từ khi đưa lệnh vào Hình 8.1: Sơ đồ làm chỉ số
cho đến khi ra kết quả (phần nhập vào ta mô tả lệnh đó ở trang với số
đã cho, chứ trong thực tế chỉ có lệnh \index ở đó thôi).

Trang v: \index{Môi trường} \indexentry{Môi trường}{v}


Trang 4: \index{Môi trường} \indexentry{Môi trường}{4}
Trang 6: \index{Môi trường} \indexentry{Môi trường}{6}
Trang 9: \indexentry{equation|
\index{equation|see{Môi trường}} see{Môi trường}}{9}
Trang 10: \indexentry{Ma trận@
\index{Môi trường@\verb!Môi \verb!Ma trận!}{10}
trường!} \indexentry{Lệnh|textbf}{14}
Trang 14:\index{Môi trường|textbf} \indexentry{Môi trường!align}{15}
Trang 15:\index{Môi trường!align} (b) Tệp *.idx
(a) Tệp *.tex

\begin{theindex} equation, see Môi trường, 9


\item equation, \see{Môi
trường}{9} Lệnh, 14
\indexspace
\item Lệnh, \textbf{14}
\indexspace Ma trận, 10
\item \verb!Ma trận!, 10 Môi trường, v, 4-6
\item Môi trường, v, 4-6 align, 15
\subitem align, 15
\end{theindex}
(c) Tệp *.ind (d) Tệp *.dvi
244 Chương 8. Làm chỉ dẫn và tra cứu

Ta thấy tệp cuối cùng lấy vào trong LATEX là một môi trường
theindex trong môi trường là các lệnh \item, \subitem và cả
\subsubitem để thụt các từ ở mức sau. Ta cũng có thể làm bằng tay
môi trường này, nhưng sẽ mất công rất nhiều và không chính xác. Chỉ
có LATEX và MakeIndex mới làm tự động và sắp xếp theo chữ cái và số
trang tốt nhất.

8.3.2. Chuẩn bị làm chỉ số trong tệp LATEX

Những nguyên tắc định dạng đầu ra từ khi nhập vào lệnh \index:

1. Những lệnh cùng một từ làm chỉ số và rơi vào cùng một trang thì
chỉ xuất hiện một lần trong danh mục từ khóa. Những từ khóa
giống nhau chỉ xuất hiện một lần còn sau đó là những số trang nó
đã xuất hiện ở đó.
2. Lệnh \index{...} có tính cả dấu trắng trong dấu {...},
như vậy những từ khóa có dấu trắng sau đây là khác
nhau \index{equation}, \index{equation }, \index{
equation} và theo nguyên tắc trên nó sẽ liệt kê làm ba từ khóa
khác nhau, điều này gây lộn xộn cho danh mục từ khóa. Do đó
khi nhập lệnh \index và các từ khóa làm đối số ta hết sức chú ý
điều này.
3. Dấu ! là thể hiện từ trước nó chung cho hàng loạt các từ đứng sau
dấu này, ví dụ

7 8 : 2
Trang 3:\index{Môi trường!Toán!math}Độ dài, 12
Trang 5:\index{Độ dài!table}
table, 5
Trang 9:\index{Môi trường!Văn bản}
Trang 12:\index{Môi figure, 31
trường!Toán!array}
\index{Độ dài} Môi trường
Trang 22:\index{Môi trường!Định lý} Định lý, 22
Trang 31:\index{Độ dài!figure} Toán
array, 12
math, 3

4. Nhiều từ khóa xuất hiện liên tục trong một số trang và


in ra thể hiện bằng dấu gạch ngang giữa các trang dùng
8.3. Làm danh mục từ khóa 245

lệnh \index{...|(} cho lần bắt đầu và \index{...|)} cho


từ lần cuối xuất hiện, tất nhiên những trang này có cùng
định dạng số đếm. Ngoài ra ta có thể làm chỉ số tra chéo
tới các từ khác khi in ra \index{...|see{...}} sẽ in ra chữ
see bên cạnh từ tra chéo. Tiếng Việt ta có thể định nghĩa lại
\renewcommand{\see}{\textit{xem}}

7 8: 2
Trang ii:\index{table|(}
Trang xi:\index{table|)}
fonts
Trang 5:\index{fonts!PostScript|(} Math xem math, fonts, 18
\index{fonts!PostScript|(} PostScript, 5
Trang 12:\index{fonts!Việt Nam|(} Việt Nam, 12-24
Trang 14:\index{table}
Trang 18:
\index{fonts!Math|see{math,fonts}} table, ii-xi, 14
Trang 21:\index{fonts!Việt Nam}
Trang 24:\index{fonts!Việt Nam|)}

5. Kiểm soát sự thể hiện các từ khóa như đậm, nghiêng,... nhưng vẫn
sắp xếp đúng vần chữ cái thường dùng cấu trúc \index{<khóa
sắp>@<khóa in ra>}

7 8 : 2
Trang 5:\index{list}
Trang 7:\index{tabbing@\textbf{tabbing}}
Xóa, 15
Trang \delta(δ), 10
10:\index{delta@\verb!\delta!($\delta$)} \dfrac(phân số), 13
Trang 13:\index{dfrac@\verb!\dfrac!(phân list, 5
số)}
Trang 15:\index{del@Xóa}
tabbing, 7

6. Định dạng số trang in ra như nghiêng, đậm người ta dùng cấu


trúc \index{<từ khóa>|<lệnh phông>} như

7 8 : 2
Trang iii:\index{tabular|textbf}
Trang 8:\index{table}
table, 8, 26-33
Trang 21:\index{tabular|textit} tabular, iii, 21
Trang 26:\index{table|(textit}
Trang 33:\index{table|)}

7. Một số kí tự đặc biệt như !, ", @, | muốn xuất hiện trong từ


khóa thì trước nó ta phải có kí tự " như
246 Chương 8. Làm chỉ dẫn và tra cứu

7 8 : 2
Trang 25:\index{"! LaTeX Error:}
Trang 30:\index{atsign@\texttt{"@} sign}
! LaTeX Error:, 25
Trang 33: @ sign, 30
\index{bar@\verb!"|!|see{\verb!\vert!}} | xem\vert, 33
Trang 35:\index{quote (\verb!""!)} quote (")

8. Để tránh dùng không thống nhất từ khóa làm chỉ số và in trong


tài liệu ta có thể định nghĩa một lệnh kết hợp lại như
\newcommand{\Index}[1]{#1\index{#1}}
Chỉ cần dùng một lần \Index{tabular} thì có cả trong văn bản
và tệp làm chỉ số.
Gói lệnh showidx có thể giúp chúng ta xem được các lệnh \index
đặt ở từng trang. Khi dùng gói lệnh này thì xem tệp DVI sẽ thấy
tất cả các lệnh \index đã cài thể hiện bên lề trang nơi ta cài lệnh
này. Nhờ gói lệnh này ta có thể xem những chỉ số các từ khóa đã
làm hay chưa, nếu có rồi thì nó hiện bên lề trang văn bản.

8.3.3. Gói lệnh makeidx và chương trình MakeIndex

Sau khi đã cài các lệnh \index trong văn bản theo cú pháp phần
trên, để lấy những thông tin từ các lệnh đó từ trong tập LATEX ta tiến
hành các bước sau

• Đặt gói lệnh \usepackage{makeidx} vào phần đầu văn bản.


• Đặt lệnh \makeindex cũng ở phần đầu tài liệu. Lệnh này đòi hỏi
LATEX tạo ra tệp *.idx và ghi các thông tin từ lệnh \index vào đó.
• Đặt lệnh \printindex bất cứ đâu để in ra danh mục từ khóa. Lệnh
này sẽ gọi tệp *.ind vào tệp nguồn khi biên dịch LATEX.

Sau đó ta biên dịch lại LATEX trên toàn văn bản và cho tệp có đuôi
*.idx.
Như cách cài đặt các lệnh LATEX ở trên thì mỗi lần biên dịch tập
nguồn ví dụ có tên là lamik.tex thì luôn tạo ra tệp lamik.idx. Một cách
làm đơn giản dùng chương trình MakeIndex để tạo ra tệp lamik.ind
như sau:
>makeindex lamik.idx
8.3. Làm danh mục từ khóa 247

Chương trình MakeIndex chạy trên môi trường DOS và kết quả là
This is makeindex, portable version 2.12 [26-May-1993]
(MiKTeX 2.2).
Scanning input file lamik.idx....done (34 entries accepted,
0 rejected).
Sorting entries....done (186 comparisons).
Generating output file lamik.ind....done (82 lines written,
0 warnings).
Output written in lamik.ind.
Transcript written in lamik.ilg.
Sau đó ta chạy lại LATEX thì tệp lamik.ind được lấy vào.
Trên thực tế sử dụng chương trình MakeIndex kết hợp với phần
mềm quản lý TEX cũng tương tự nhưng phải biết cài đặt vào đâu cho
đúng chỗ, các bạn có thể tìm thấy ở các chương sau.

8.3.4. Khai báo tùy chọn trong chương trình MakeIndex

Để sử dụng tốt chương trình MakeIndex ta phải hiểu những tùy


chọn của chương trình này với cú pháp đầy đủ như sau:
makeindex [-ciglqr] [-o ind] [-p no] [-s sty] [-t log]

R
[idx0 idx1 ...]

-c Theo mặc định tất cả dấu trắng đều tính vào từ khóa, nếu chọn
tùy chọn này thì tất cả dấu trắng trước và sau từ khóa đều không
tính vào từ khóa và những dấu trắng ở giữa từ khóa chỉ tính là

R
một.
-i Dùng cách gọi chuẩn như gọi một tệp vào. Khi ta có tùy chọn
này và -o không có, thì tệp đưa ra được viết theo dạng chuẩn của

R
tin học.

R
-g Phục vụ xếp chữ cho tiếng Đức.
-l Dùng xếp thứ tự theo chữ cái. Mặc định chương trình xếp theo
từ. Xếp theo từ thì kí tự trắng đứng trước mọi chữ cái trong bảng

R
kí tự. Còn xếp theo chữ cái thì tất cả khoảng trắng được bỏ qua.
-q Kiểu lặng im, không có thông báo nào được gửi tới dòng đưa
248 Chương 8. Làm chỉ dẫn và tra cứu

ra của chương trình. Theo mặc định quá trình xử lý và thông báo
lỗi được đưa ra dòng xuất của chương trình như tệp văn bản. Tùy

R
chọn -q không đưa ra thông báo khi chạy.
-r Không đưa ra thông báo tường minh cho một số trang đã xử

R
lý.
-o ind Lấy *.ind như tệp chỉ số đưa ra. Theo mặc định phần chính
của tệp đưa vào kết hợp với phần mở rộng ind dùng cho việc đưa

R
tệp chỉ số ra đó.
-p no Đặt số trang bắt đầu đưa tập chỉ số ra, nghĩa là từ trang
số no. Tùy chọn này để dùng tách tệp chỉ số với định dạng khác

R
nhau. Số no có ba trường hợp đặc biệt any, odd và even
-s sty Lấy tệp sty như tệp định dạng các chỉ số. Mặc định là
không có định dạng nào cả. Biến môi trường INDEXSTYLE được

R
xác định ở đó tệp định dạng hiện có.
-t log Lấy tệp *.log làm nhật kí khi chạy. Mặc định chương trình
lấy phần chính tên tệp nguồn và phần mở rộng ilg làm tệp ghi
chép này.

8.3.5. Thông báo lỗi

Chương trình MakeIndex đưa ra trên màn hình số dòng đọc vào
hoặc viết ra và có bao nhiêu lỗi nó tìm được. Tất cả quá trình làm
việc của nó được ghi vào tệp theo mặc định có phần mở rộng là *.ilg.
MakeIndex có thể sinh ra những thông báo lỗi lúc đọc tệp *.idx vào hoặc
viết kết quả vào tệp *.ind. Mỗi thông báo lỗi đều có chỗ xảy ra lỗi và số
dòng trong tệp đã sinh ra lỗi.

R
Lỗi trong giai đoạn đọc vào

Extra ’!’ at position ... Đối số của lệnh \index có nhiều


hơn hai kí tự đặc biệt !. Có lẽ một trong số chúng phải là dấu

R
ngoặc kép.
Extra ’@’ at position ... Đối số của lệnh \index có nhiều
hơn hai kí tự đặc biệt @ không có kí tự ! xen vào giữa. Có lẽ một
trong số chúng phải là dấu ngoặc kép.
8.3. Làm danh mục từ khóa 249

Extra ’|’ at position ... R Đối số của lệnh \index có nhiều


hơn hai kí tự đặc biệt |. Có lẽ một trong số chúng phải là dấu

R
ngoặc kép.
Illegal null field Đối số của lệnh \index không có nghĩa
vì có chuỗi kí tự trắng, như lệnh \index{!math} sẽ sinh ra lỗi
vì phía trước dấu ! cần có dãy kí tự. Tương tự như vậy cho

R
\index{@math}.
Argument ... too long (max 1024) Tài liệu chứa lệnh \index
với đối số rất dài. Có lẽ quên đóng ngoặc nhọn cho lệnh này.

R
Lỗi trong giai đoạn viết ra

Unmatched range opening operator Lệnh \index{...|(}


không có lệnh đóng tương ứng sau đó \index{...|)}. Dấu

R
"..." trong hai lệnh cần trùng nhau hoàn toàn.
Unmatched range closing operator Lệnh \index{...|)}
không có lệnh mở tương ứng sau đó \index{...|(}. Dấu "..."

R
trong hai lệnh cần trùng nhau hoàn toàn.
Extra range opening operator Hai lệnh \index{...|(} xuất

R
hiện trong văn bản mà không có lệnh đóng \index{...|)}.
Inconsistent page encapsulator ... within range
MakeIndex được xây dựng cho nhóm các số trang vào với
nhau khi cùng từ khóa, nhưng không chấp nhận khi nhóm các
trang của cùng từ khóa nhưng lại có hai số định dạng khác nhau.
Ví dụ như \index{cat|(} và \index{cat|)} ở hai trang định

R
dạng khác nhau là xi và 43 chẳng hạn.
Conflicting entries Khi trong cùng một trang lại có
hai cách định dạng khác nhau như \index{math} và
\index{math|see{Môi trường}}
250 Chương 8. Làm chỉ dẫn và tra cứu

8.4. Người dùng định dạng lại chỉ số

8.4.1. Những từ khóa định dạng

Như sơ đồ tạo ra chỉ số trong khi chạy MakeIndex còn có thể lấy vào
tệp có phần mở rộng ist để định dạng lại chỉ số của danh mục từ khóa.
Trong tệp này ta có thể thay thế các ký hiệu từ đầu vào đã mặc định cho
MakeIndex. Tương tự như vậy cho những thông số tệp ra khi làm chỉ
số. Người ta chia ra hai loại thông số, một là những thông số cho loại
đưa vào và một cho thông số loại định dạng đưa ra. Bảng sau là những
thông số định dạng đưa vào cho MakeIndex: Từ khóa là những dòng
trong tệp *.ist và bên cạnh là giá trị đối số mặc định ta thường dùng.

Từ khóa Giá trị đối số Giải thích chức năng

keyword (s) "\\indexentry" Lệnh báo cho MakeIndex


biết là đối số của nó chính
là thực thể làm chỉ số.
arg_open (c) ’{’ Ký hiệu biên bắt đầu đối
số.
arg_close (c) ’}’ Ký hiệu biên kết thúc đối
số.
range_open (c) ’(’ Ký hiệu biên bắt đầu đối số
về mảng trang cho chỉ số
trang sau đó.
range_close (c) ’)’ Ký hiệu biên kết thúc đối số
về mảng trang cho chỉ số.
level (c) ’!’ Ký hiệu chia bậc của từ
khóa mới.
atual (c) ’@’ Ký hiệu chỉ ra những đại
lượng sau nó sẽ được in ra.
encap (c) ’|’ Ký hiệu chỉ ra số chỉ số sẽ
bị ảnh hưởng bởi các lệnh
đứng sau nó.
8.4. Người dùng định dạng lại chỉ số 251

quote (c) ’"’ Ký hiệu dấu nháy.


escape (c) ’\\’ Ký hiệu chỉ ra những từ sau
đó xuống dòng.
page_compositor (s) "-" Ký hiệu kết nối các trang.

Bảng 8.1: Thông số định dạng nhập vào cho MakeIndex


Ký hiệu c đối số loại kí tự và s là loại đối số chuỗi kí tự.
Thông số định dạng in ra cho MakeIndex như

Từ khóa Giá trị đối số Giải thích chức năng


Môi trường
preamble (s) "\\begin{theindex}\n" Mở đầu môi trường chỉ số
postamble (s) "\n\n\\end{theindex}\n" Kết thúc môi trường chỉ
số
Trang bắt đầu
setpage_prefix(s) "\n\\setcounter{page}{" Phần đầu lệnh đặt trang
setpage_suffix(s) "}\n" Phần cuối lệnh đặt trang
Bắt đầu nhóm mới
group_skip(s) "\n\n\indexspace\n" Khoảng trắng dọc giữa
hai nhóm
heading_prefix(s) "" Phần đầu lệnh đặt nhóm
heading_suffix(s) "" Phần cuối lệnh đặt cho
nhóm
heading_flag(n) 0 Giá trị flag=0 không
chèn gì vào giữa hai
nhóm từ; flag>0 (<0)
thêm vào kí tự hoa
(thường) giữa hai nhóm,
sẽ chèn vào phần trước
heading_prefix và phần
sau là heading_suffix
Hàng thứ bậc
item_0(s) "\n\\item " Lệnh chèn vào bậc không
của môi trường
item_1 (s) "\n \\subitem " Như trên với bậc 1 bắt
đầu với bậc ≥ 1
252 Chương 8. Làm chỉ dẫn và tra cứu

item_2 (s) "\n \\subsubitem " Như trên với bậc 2 bắt
đầu với bậc ≥ 2
item_01 (s) "\n \\subitem " Lệnh trước bậc 1 bắt đầu
từ bậc 0
item_12 (s) "\n \\subsubitem " Lệnh trước bậc 2 bắt đầu
từ bậc 1
item_x1 (s) "\n \\subitem " Lệnh chèn vào trước bậc 1
khi bậc trước đó không có
số trang
item_x2 (s) "\n \\subsubitem " Như trên cho bậc 2
Dấu ngăn số trang
delim_0 (s) ", " Dấu cách số trang bậc 0
delim_1 (s) ", " Dấu cách số trang bậc 1
delim_2 (s) ", " Dấu cách số trang bậc 2
delim_n (s) ", " Dấu cách số trang
delim_r (s) "--" Dấu cho khoảng cách
trang
Gói gọn trang
encap_prefix(s) "\\" Phần trước gói trang lại
encap_infix(s) "{" Phần trong của gói trang
encap_suffix(s) "}" Phần cuối gói trang
Trang ưu tiên
page_prcedence(s) "rRnaA" Số trang được ưu tiên a,
A là xếp chữ cái nhỏ trước
chữ cái hoa; n đến số; r,
Rđến chữ La Mã
Dòng bao
line_max(n) 72 Độ dài lớn nhất dòng đưa
ra
indent_space(s) "\t\t" Lệnh thụt đầu dòng
chung
indent_length(n) 16 Độ dài thụt vào cho dòng
chung

Bảng 8.2: Thông số định dạng nhập vào cho MakeIndex

Những ký hiệu \n và \t là lệnh để xuống dòng và có một khoảng


trắng tab, còn đối số (s) là chuỗi kí tự và (n) là một số tự nhiên.
8.4. Người dùng định dạng lại chỉ số 253

8.4.2. Những ví dụ định dạng lại chỉ số

Dựa vào những bảng trên ta có thể định dạng lại danh mục từ khóa,
ở đây chúng tôi có đưa ra những ví dụ cụ thể sau:

1. Tập chỉ số chạy độc lập: Bài toán đặt ra là ta lấy những từ khóa
trong tệp chính của ta (để cho tiện ta gọi đó là tệp mila.tex)
thành một tệp riêng, chạy độc lập với tập chính. Trước tiên ta lập
tệp mila.ist có nội dung sau

% Tệp định dạng chỉ số mila.ist


preable
"\\documentclass[10pt]{book}
\\begin{document}
\\begin{theindex}\n"
postable
"\n\n\\end{theindex}
\\end{document}\n"

Sau đó ta có thể biên dịch MakeIndex theo lệnh sau


makeindex.exe -s mila.ist -o milaind.tex mila
Chú ý tệp milaind.tex là tệp kết quả ta cần, được sử dụng như
bình thường. Phần sau chúng tôi hướng dẫn thực hiện lệnh trên
trong PCTEX và MiKTEX, nhưng nói chung chỉ sửa lại phần thông
số trên là đủ.
2. Thay đổi những kí tự đặc biệt: Khi ta thiết lập lệnh chỉ số trong
đối số có các kí tự đặc biệt như @, ", ! là mặc định. Nếu ta thiết
kế lại trong đối số của \index có những kí tự đặc biệt khác ta phải
tiến hành lập tệp mymila.ist với ví dụ thay đổi như sau:

%Định dạng lại việc làm chỉ số tệp mymila.ist


actual ’=’ % ký hiệu = sẽ thay cho ký hiệu mặc định @
quote ’!’ % ký hiệu ! sẽ thay cho ký hiệu mặc định "
level ’>’ %ký hiệu > sẽ thay cho ký hiệu mặc định !

Nghĩa là trong khi thiết lập chỉ số đáng lẽ phải gõ vào


\index{math!Môi trường}, \index{alpha@$\alpha$}
254 Chương 8. Làm chỉ dẫn và tra cứu

thì chỉ gõ vào


\index{math>Môi trường}, \index{alpha=$\alpha$},
còn lại cách làm chỉ số theo quy trình trên không thay đổi.
Chú ý: Việc thay đổi này là không hay, ở đây tôi chỉ trình bày khả
năng thay đổi được chứ không áp dụng kiểu thay đổi này với ví
dụ cụ thể.
3. Thay đổi định dạng đưa ra: Phần thay đổi này quan trọng vì bạn
đọc có thể in ra những danh mục từ khóa đẹp và đầy đủ. Những
tệp được mô tả dưới đây các bạn có thể cho cả vào một tệp cùng
định dạng chỉ số lại đều được:
Trước mỗi nhóm chữ cái ta thêm vào chữ cái đó và in đậm chữ cái
để nhận dạng thứ tự dễ hơn

%Định dạng lại chỉ số tệp headmila.ist


heading_prefix"{\\bfseries\hfil "%nhập phông cho chữ đầu
heading_suffix"\\hfil}\\nopagebreak\n"% kết thúc chữ cái
heading_flag 1 % Làm chữ cái hoa

Sau đó ta tiến hành chạy MakeIndex như:


makeindex.exe -s headmila.ist -o mila.ind mila
Chạy lại LATEX cho tệp chính mila.tex thì tệp mila.ind được gọi
và định dạng theo mong muốn.
Bạn đọc có thể xem cuối cuốn sách này là định dạng theo kiểu
trên. Để khoảng cách số trang và các từ khóa có các dấu chấm
chấm bạn đọc hãy gõ vào tệp trên những dòng sau đây

%Định dạng có dấu chấm giữa từ khóa và số trang


delim_0 "\\dotfill "
delim_1 "\\dotfill "
delim_2 "\\dotfill "

Cuốn sách này phần danh mục từ khóa được thực hiện với tệp
định dạng có các dòng lệnh trên.
4. Bảng chú giải thuật ngữ: LATEX có lệnh \glossary làm bảng chú
giải thuật ngữ. Tương tự lệnh \makeindex đặt ở phần đầu văn
bản, lệnh \makeglossary tạo ra tệp có đuôi .glo cũng hoàn toàn
8.5. Thay đổi trình bày bảng danh mục từ khóa 255

như tệp có đuôi .idx. LATEX chuyển những lệnh \glossary thành
các lệnh \glossaryentry
Chương trình MakeIndex cũng làm từ điển thuật ngữ như chỉ số
danh mục từ khóa ở trên và có thể tạo ra thay đổi khi chạy chương
trình bằng cách lập tệp .ist, ví dụ

% MakeIndex làm môi trường từ điển thuật ngữ


myglossary.ist
keyword "\\glossaryentry" %từ khóa cho glossary
preamble"\n\\begin{theglossary}\n" %bắt đầu môi trường
postamble"\n\n\\end{theglossary}\n"%hết môi trường

8.5. Thay đổi trình bày bảng danh mục từ khóa

8.5.1. Danh mục từ khóa nhiều cột

Như ta đã biết trong các lớp văn bản article, book và report mặc
định môi trường chỉ số sẽ chia ra làm hai cột. Ta có thể vào tệp lớp tìm
thấy môi trường này, ví dụ như trong book.cls có
\newenvironment{theindex}
{\if@twocolumn\@restonecolfalse\else\@restonecoltrue \fi
\columnseprule \z@ \columnsep 35\p@
\twocolumn[\@makeschapterhead{\indexname}]%
\@mkboth{\MakeUppercase\indexname}{%
\MakeUppercase\indexname}%
\thispagestyle{plain}\parindent\z@
\parskip\z@ \@plus .3\p@\relax \let\item\@idxitem}
{\if@restonecol\onecolumn\else\clearpage\fi}
\newcommand\@idxitem{\par\hangindent 40\p@}
\newcommand\subitem{\@idxitem \hspace*{20\p@}}
\newcommand\subsubitem{\@idxitem \hspace*{30\p@}}
Ta muốn thay đổi cách trình bày là tạo ra trang ba cột hoặc hơn
thế. Để làm được điều đó ta phải có gói lệnh multicol và áp dụng môi
trường multicols, định nghĩa lại môi trường trên như sau ở phần đầu
văn bản:
256 Chương 8. Làm chỉ dẫn và tra cứu

\makeatletter
\renewenvironment{theindex}{\newpage
\addcontentsline{toc}{chapter}{Bảng danh mục từ khóa}%
\pagestyle{plain}\let\item\@idxitem
\begin{multicols}{3}[
\centerline{\bfseries Bảng danh mục từ khóa}]
\par\bigskip}%
{\end{multicols}}%
\makeatother
Nghĩa là bắt đầu trang mới, ghi vào tệp mục .toc, phong cách trang
là plain. Lệnh \item được định nghĩa lại cách ra một khoảng như phần
định nghĩa nguyên bản. Sau đó là thiết lập ba cột dùng môi trường
multicols.

8.5.2. Nhiều bảng danh mục từ khóa khác nhau


Gói lệnh multind của F.W. Long định nghĩa lại lệnh \makeindex,
\index và \printindex cho phép làm được nhiều bảng danh mục hơn.
Những lệnh trên có thêm đối số
\makeindex{<tên tệp>} % <tên tệp> chứa một bảng danh mục
\index{<tên tệp>}{<từ khóa>} %<từ khóa> tên từ khóa cho vào
danh mục
\printindex{<tên tệp>}{<đầu đề danh mục>} %<đầu đề > mỗi
bảng 1.
Bạn đọc tạo một tập nguồn có nội dung như hình 8.2, lấy tên là
vdmindex.tex và các bạn chú ý các lệnh mới và gói lệnh:
Các bước tiến hành như sau:

1. Lần thứ nhất biên dịch LATEX cho ta hai tệp A.idx và B.idx.
2. Lần lượt chạy MakeIndex cho các tệp trên
a) Trong PcTEX đặt lại đối số:
Setting→default Setting→MakeIndex Argument →Option
String: A.idx (hoặc B.idx) rồi chạy Typeset→MakeIndex
b) Trong MiTEX đặt lại chương trình:
8.5. Thay đổi trình bày bảng danh mục từ khóa 257
' $
\documentclass[12pt]{article}
\usepackage[utf8]{vietnam}
\usepackage{multind}
\makeindex{A}
\makeindex{B}
\renewcommand{\printindex}[2]{%
\begin{center}\textbf{\large #2}\end{center}\input{#1.ind}}
\begin{document}
\section{Tạo ra nhiều bảng danh mục}
\begin{enumerate}
\item Khoa học mà không có lương tâm chỉ là sự bại hoại tâm
hồn.
(RABELAIS) \index{A}{RABELAIS}
\item Bất cứ sự hiểu biết gì cũng đều do quan sát và kinh
nghiệm mà biết.
(SAINT BEUVE)\index{A}{SAINT BEUVE}
\item Thì giờ người ta đã dùng để bàn chuyện phiếm,
đủ để đọc được một tác phẩm mỗi ngày.
(FRAGNET)\index{B}{FRAGNET}
\end{enumerate}

\section{Định nghĩa lại lệnh làm chỉ số}


\begin{enumerate}
\item Nếu tôi có quyền thế, tôi sẽ đem sách mà gieo rắc
khắp mặt địa cầu
như người ta gieo lúa trong luống cày vậy.
(HOROCE MANN)\index{A}{HOROCE MANN}
\item Tiền vốn đặt vào công việc gì cũng không có lợi bằng
đặt vào việc mua sách hữu ích.
(H.N. CARSON)\index{B}{CARSON}
\item Đọc sách là nói chuyện với những người thành thật
nhất
của những thế kỷ đã qua.
(DESCARTES)\index{B}{DESCARTES}
\end{enumerate}
\printindex{A}{Bảng danh mục thứ nhất}
\printindex{B}{Một bảng danh mục khác}
\end{document}
& %

Hình 8.2: Tệp nguồn vdmindex.tex

Option→Users program→ gõ vào exe file: makeindex cmd file:


A.idx (hoặc B.idx) rồi nhấn nút trên thanh công cụ.
258 Chương 8. Làm chỉ dẫn và tra cứu
' $

1. Tạo ra nhiều bảng danh mục


1. Khoa học mà không có lương tâm chỉ là sự bại hoại tâm
hồn. (RABELAIS)
2. Bất cứ sự hiểu biết gì cũng đều do quan sát và kinh nghiệm
mà biết. (SAINT BEUVE)
3. Thì giờ người ta đã dùng để bàn chuyện phiếm, đủ để đọc
được một tác phẩm mỗi ngày. (FRAGNET)
2. Định nghĩa lại lệnh làm chỉ số
1. Nếu tôi có quyền thế, tôi sẽ đem sách mà gieo rắc khắp
mặt địa cầu như người ta gieo lúa trong luống cày vậy.
(HOROCE MANN)
2. Tiền vốn đặt vào công việc gì cũng không có lợi bằng đặt
vào việc mua sách hữu ích. (H.N. CARSON)
3. Đọc sách là nói chuyện với những người thành thật nhất
của những thế kỷ đã qua. (DESCARTES)

Bảng danh mục thứ nhất


HOROCE MANN, 1
RABELAIS, 1
SAINT BEUVE, 1

Một bảng danh mục khác


CARSON, 1
DESCARTES, 1
FRAGNET, 1
& %

Hình 8.3: Tệp kết quả vdmindex.dvi

Ta cũng có thể chạy trực tiếp trên dòng lệnh DOS. Kết quả hai lần
chạy

>makeindex A.idx
This is makeindex, portable version 2.12 [26-May-1993]
(MiKTeX 2.2).
Scanning input file A.idx....done (3 entries accepted, 0
8.5. Thay đổi trình bày bảng danh mục từ khóa 259

rejected).
Sorting entries....done (5 comparisons).
Generating output file A.ind....done (13 lines written, 0
warnings).
Output written in A.ind.
Transcript written in A.ilg.
>makeindex B.idx
This is makeindex, portable version 2.12 [26-May-1993]
(MiKTeX 2.2).
Scanning input file B.idx....done (3 entries accepted, 0
rejected).
Sorting entries....done (5 comparisons).
Generating output file B.ind....done (13 lines written, 0
warnings).
Output written in B.ind.
Transcript written in B.ilg.

3. Chạy lại LATEX lần nữa cho kết quả như hình 8.3.

8.5.3. Gói lệnh index mở rộng khả năng lệnh chỉ số


Gói lệnh index của David Jones mở rộng làm bảng danh mục từ
khóa theo một số chức năng sau:

1. Làm được rất nhiều bảng chỉ số danh mục đồng thời.
2. Có phương án * cho lệnh \index, đưa đối số vào tệp làm chỉ số.
3. Làm đơn giản lệnh đưa chỉ số vào bằng cách khởi đầu lệnh
\shortindexingon sau đó có thể gõ ^{<tên khóa>} thay cho
\index{<tên khóa>}, _{<tên khóa>} thay cho \index*{<tên
khóa>}. Không dùng những lệnh này nữa hãy cho vào lệnh
\shortindexingonoff. Những từ khóa này trong môi trường
toán là không được.
4. Gói lệnh này kèm theo cả gói lệnh showidx và thêm vào
lệnh trong văn bản \proofmodetrue thì các từ khóa của chỉ
số sẽ in ra bên lề trang, còn định dạng lề trang và phông
chữ in ra bên lề dùng lệnh \indexproofstyle, ví dụ như
\renewcommand{\indexproofstyle}{\footnotesize\itshape}.

Sau khi đưa gói lệnh vào \usepackage{index} ta có thể định nghĩa
tệp chỉ số mới \newindex hoặc định nghĩa lại \renewindex.
260 Chương 8. Làm chỉ dẫn và tra cứu

\newindex{<dấu dẫn>}{<tệp idx>}{<tệp ind>}{<tiêu đề

R
bảng>}

<dấu dẫn> Nhãn này đánh dấu chuyển chỉ số vào tệp nào. Như
vậy các lệnh \index và \printindex có đối số tùy chọn như:

R
\index[<dấu dẫn>]{...} và \printindex[<dấu dẫn>].
<tệp idx> Sau khi chạy LATEX lần thứ nhất thì tạo ra tệp có phần
mở rộng <tệp idx> (ba kí tự bất kì) giống như trường hợp bình

R
thường mặc định luôn luôn có tệp .idx.
<tệp ind> Định hướng chạy \MakeIndex từ tệp <tệp idx> ở trên
ra tệp <tệp ind> để khi chạy LATEX lần nữa thì gọi tệp có phần mở

R
rộng này.
<tiêu đề bảng> Tiêu đề của mỗi bảng danh mục từ khóa.

Ta lấy một ví dụ tệp vdindex.tex có nội dung như hình 8.4.


Các bước tiến hành để tạo ra các tệp chỉ số:

1. Sau khi chạy LATEX đối với tệp vdindex.tex cho ba tệp
vdindex.idx, vdindex.adx và vdindex.ndx.
2. Tạo ra danh mục chỉ số chính:

>makeindex vdindex.idx
This is makeindex, portable version 2.12 [26-May-1993]
(MiKTeX 2.2).
Scanning input file vdindex.idx....done (2 entries
accepted, 0 rejected).
Sorting entries....done (2 comparisons).
Generating output file vdindex.ind....done (9 lines
written, 0 warnings).
Output written in vdindex.ind.
Transcript written in vdindex.ilg.

3. Tạo ra bảng danh mục có đánh dấu là aut:

>makeindex -o vdindex.and vdindex.adx


This is makeindex, portable version 2.12 [26-May-1993]
(MiKTeX 2.2).
Scanning input file vdindex.adx....done (3 entries
accepted, 0 rejected).
Sorting entries....done (4 comparisons).
Generating output file vdindex.and....done (10 lines
written, 0 warnings).
8.5. Thay đổi trình bày bảng danh mục từ khóa 261
' $
\documentclass[12pt]{book}
\usepackage{vnfonts}
\usepackage{index}
\makeindex
\newindex{aut}{adx}{and}{Bảng danh mục từ khóa}
\newindex{not}{ndx}{nnd}{Bảng ký hiệu}

\begin{document}
\chapter{Sử dụng gói lệnh index}

\section{Các lệnh phần đầu}


\begin{itemize}
\item Đánh thắng một vạn quân, không bằng tự thắng lòng
mình. (Thích Ca)\index[aut]{Thích Ca}\index{Thích Ca}
\item Không nên mưu việc lớn với kẻ nói nhiều.(Vân Trung
Tử)
\index[not]{Vân Trung Tử}
\item Đừng khinh việc nhỏ. Lỗ nhỏ làm đắm thuyền. (Quan
Doãn tử)
\index[aut]{Quan Doãn tử}
\end{itemize}

\section{Định nghĩa bảng danh mục khác nhau}


\begin{itemize}
\item Ba người cùng đi, tất có một kẻ làm thầy ta được.
(Khổng tử)
\index[not]{Khổng tử}\index{Khổng tử}
\item Quân tử nghiêm trang mà không tranh với ai, hợp quần
với mọi người mà không bè đảng. (Luận Ngữ)\index[not]{Luận
Ngữ}
\item Nhất nghệ tinh, nhất thân vinh.(Tục
Ngữ)\index[aut]{Tục Ngữ}
\end{itemize}
\printindex[not]
\printindex[aut]
\printindex
\end{document}
& %

Hình 8.4: Tệp nguồn vdindex.tex

Output written in vdindex.and.


Transcript written in vdindex.ilg.

4. Tạo ra bảng danh mục có đánh dấu là not:


262 Chương 8. Làm chỉ dẫn và tra cứu
' $

Chương 1
Sử dụng gói lệnh index

1.1. Các lệnh phần đầu


• Đánh thắng một vạn quân, không bằng tự thắng lòng mình.
(Thích Ca)
• Không nên mưu việc lớn với kẻ nói nhiều.(Vân Trung Tử)
• Đừng khinh việc nhỏ. Lỗ nhỏ làm đắm thuyền. (Quan Doãn
tử)

1.2. Định nghĩa bảng danh mục khác nhau


• Ba người cùng đi, tất có một kẻ làm thầy ta được. (Khổng
tử)
• Quân tử nghiêm trang mà không tranh với ai, hợp quần với
mọi người mà không bè đảng. (Luận Ngữ)
• Nhất nghệ tinh, nhất thân vinh.(Tục Ngữ)
Bảng danh mục từ khóa
Thích Ca, 1
Quan Doãn tử, 1
Tục Ngữ, 1
Bảng ký hiệu
Vân Trung Tử, 1
Khổng tử, 1
Luận Ngữ, 1
Bảng chỉ số
Khổng tử, 1

Thích Ca, 1
& %

Hình 8.5: Tệp kết quả vdindex.dvi

>makeindex -o vdindex.nnd vdindex.ndx


This is makeindex, portable version 2.12 [26-May-1993]
(MiKTeX 2.2).
Scanning input file vdindex.ndx....done (3 entries
8.6. Trích dẫn tài liệu tham khảo 263

accepted, 0 rejected).
Sorting entries....done (5 comparisons).
Generating output file vdindex.nnd....done (13 lines
written, 0 warnings).
Output written in vdindex.nnd.
Transcript written in vdindex.ilg.

5. Chạy lại LATEX lần nữa cho kết quả hình 8.5.

8.6. Trích dẫn tài liệu tham khảo


Những bài báo được công bố tại các tạp chí và cuốn sách đăng tải
hội nghị đều có danh sách tài liệu tham khảo và được chỉ ra bằng các
số trong danh sách bên trong nội dung tài liệu. Trong quá trình soạn
thảo tài liệu những tham khảo số này luôn luôn thay đổi. LATEX cung
cấp một môi trường định dạng thể hiện các tài liệu tham khảo và khi
chạy lưu giữ lại các số tham khảo và để đưa vào tài liệu sau mỗi lần
thay đổi tham khảo:
\begin{thebibliography}{<nhãn mẫu>}
<thực thể tài liệu>
\end{thebibliography}
Mỗi <thực thể tài liệu> là một tên sách hoặc tên bài báo, tác giả,
nhà xuất bản, năm xuất bản, số trang,... và được bắt đầu bằng
\bibitem[<nhãn>]{<khóa nhãn>}
Không có tùy chọn [<nhãn>] thì môi trường sẽ đánh số thứ tự từ
một đến hết. Khi có tùy chọn này môi trường sẽ lấy <nhãn> làm dấu cho
các tên sách hoặc bài báo sau đó và được gán vào <khóa nhãn> để khi
trích dẫn ở đâu thì dùng <khóa nhãn> sẽ in ra <nhãn> tương ứng với
trong danh sách tham khảo.
<nhãn mẫu> chỉ ra cho môi trường là sau dòng thứ nhất của mỗi
\bibitem thì dòng thứ hai được thụt vào theo độ dài các ký tự đã cho
trong <nhãn mẫu> này, mục đích là để xếp các nhãn thẳng hàng theo
chiều dọc, không lẫn vào văn bản. Theo mặc định thì <nhãn mẫu> là số
chữ số lớn nhất của nhãn tham khảo trong môi trường này. Ví dụ nếu
nhãn mẫu là 99 thì tài liệu trong khoảng 10 đến 99 đầu tài liệu.
264 Chương 8. Làm chỉ dẫn và tra cứu

Tham chiếu một tài liệu nào được thực hiện bằng từ khóa
\cite{<khóa nhãn>}
với <khóa nhãn> đã được xác định trong môi trường trên. Ta lấy ví dụ
\begin{thebibliography}{99}
\bibitem{lamport} Leslie Lamport, 1994.
\textit{\LaTeX{}: A Document Preparation System}.
Addison-Wesley, Reading, Massachusetts.
.................................
\bibitem{knuth} Donald E. Knuth.
\textit{Computers and typesetting, Vol. A–E}.
Addison-Wesley, Reading, Massachusetts, 1984–1986.
\bibitem[5a]{knuth:a}Vol. A:\textit{The \TeX\ book}, 1984
\bibitem[5b]{knuth:b}Vol. B:\textit{\TeX :The program},1986
................................
\end{thebibliography}
Với cách khai báo trên thì khi ta tham khảo \cite{lamport} và
\cite{knuth, knuth:a} cho ta [1] và [5, 5a]. Ta đã giả sử tài liệu của
Knuth được đánh số thứ năm, còn sau đó là ta chủ động gán nhãn cho
các tập sách. Mỗi tài liệu đều có thể gán nhãn chủ động cho việc thể
hiện và tra khảo, bạn đọc thử nghiệm lấy.
Trên đây là phần quản lý tài liệu tham khảo tương đối ít tài liệu,
người ta đã làm ra những chương trình phụ trợ và các gói lệnh để quản
lý dữ liệu tham khảo với những tham khảo đến hàng trăm, hàng nghìn
tài liệu dẫn bằng BibTEX. Vấn đề này khá dài và phức tạp và nhu cầu
trước mắt nhiều người không dùng tới, tôi đành để lại tới một dịp khác.
CHƯƠNG 9

SỬ DỤNG PHẦN MỀM PCTEX

9.1. Phần cài đặt và lập cấu hình . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265


9.1.1. Cài đặt phần mềm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
9.1.2. Lập cấu hình . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
9.2. Hướng dẫn sử dụng trong soạn thảo . . . . . . . . . . . . . . . . . . . . 270
9.2.1. Chức năng cơ bản trong soạn thảo . . . . . . . . . . . . . . . 270
9.2.2. Biên dịch LATEX trong chương trình . . . . . . . . . . . . . . 271
9.2.3. Công cụ chuyển đổi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
9.3. PcTEX với phần mềm VnTEX2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
9.3.1. Cài đặt phông tiếng Việt . . . . . . . . . . . . . . . . . . . . . . . . . 272
9.3.2. Dùng đĩa CD VnTEX 2.0 với PcTEXv4 . . . . . . . . . . . . . 273

Phần mềm PcTEX của hãng PcTeX, đây là phần mềm thương mại,
phải có bản mua chính thức mới được cập nhật những thay đổi
mới. Bạn đọc có thể tìm hiểu mọi khía cạnh của phần mềm này trên
trang Web: http://www.pctex.com. Mục đích chương này là tổng quan
những phần hướng dẫn sử dụng quan trọng nhất của phần mềm. Có
thể nhiều bạn đọc đã sử dụng phần mềm này, qua sử dụng thấy được
chương trình tiện dụng và dễ sử dụng cho những người mới học LATEX.
Để dễ tra cứu những chức năng và cách sử dụng phần mềm này tôi liệt
kê ra đây làm tài liệu.

9.1. Phần cài đặt và lập cấu hình

9.1.1. Cài đặt phần mềm

Việc cài đặt được tự động hóa nhấn đúp vào tệp setup.exe trong
đĩa cài đặt và việc còn lại là nhấn các nút OK khi chương trình cài đặt
hỏi. Theo kinh nghiệm bạn đọc nên cài theo chế độ mặc định tại ổ cứng
266 Chương 9. Sử dụng phần mềm PCTEX

C: và các thư mục cho trước. Khi cài xong chương trình sẽ có thư mục

R
chính là C:\PCTEXv4\, rồi đến các thư mục sau:

• AMSLTX12 Chứa toàn bộ các tệp cho AMSLATEX phiên bản 1.2.
Nhiều lệnh dùng trong LATEX chỉ có trong phiên bản kết hợp này

R
và được lấy từ đây.
• AMSTEX Toàn bộ các lệnh của AMSTEX được chứa ở đây. Trong
LATEX dùng các gói lệnh amsth, amsxtra, amssymb, latexsym, ...

R
được lấy trong các tệp trong thư mục này.
• DVIPS Bao gồm các tệp cấu hình chuyển đổi từ tệp DVI sang

R
PS. Quan trọng là tệp fonts.map, ttfonts.map, ...
• FONTS Chứa các loại phông, trong PcTEX chỉ dùng các tệp
*.tfm định kích thước cho phông để kết hợp với phông true type
trong Windows nên nếu không có các tệp này trong cấu hình thì
PcTEX sẽ báo lỗi. Ngoài ra còn các loại phông *.ttf, *.pk hoặc
*.pfb. Trong thư mục này còn 3 thư mục con FONTS\AMS có những
phông của AMSTEX truyền thống. FONTS\TEX chứa những phông
cơ bản của TEX và LATEX theo truyền thống. FONTS\USERS chứa

R
phông của người dùng khác với các loại phông trên.
• FORMATS Gồm những tệp định dạng theo kiểu chạy TEX là
plain.fmt, kiểu chạy LATEX là latex.fmt và tệp amsplain.fmt

R
cho kiểu biên dịch AMSTEX.
• JAWS Chứa các tệp phông *.ps và *.tt tương ứng với tệp
phông trong thư mục FONTS để thể hiện lên màn hình hoặc in
ra máy in. Không có những tệp phông này thì PcTEX không thể in

R
được.
• LATEX2e Tất cả tệp lệnh của LATEX và định nghĩa khai báo đều
chứa ở đây. Những tệp lớp văn bản *.cls, những tệp gói lệnh
*.sty, những tệp định nghĩa phông *.fd đều được chứa tại đây.
Những gói lệnh mới thêm vào ta có thể đặt ở đây hoặc làm một

R
thư mục riêng cho nó đều được.
• PCTEXHLP Các tệp hướng dẫn bằng tiếng Anh về LATEX và TEX

R
đều chứa ở đây.
• SAMPLES Gồm những tệp ví dụ tệp *.tex. Chú ý nhiều tệp
9.1. Phần cài đặt và lập cấu hình 267

chạy theo định dạng TEX, một số còn lại chạy theo LATEX. Những
ví dụ đưa ảnh vào trong văn bản LATEX đều có ở đây cùng với ảnh

R
ví dụ theo dạng *.bmp, *.eps,...
• TEXINPUT Đây là thư mục mặc định từ khi có TEX những tệp
định nghĩa, gói lệnh, lớp văn bản đặt tại đây cũng được gọi vào

R
khi có khai báo.
• VNSAMPLE Gồm một số ví dụ khi cài đặt xong tiếng Việt vào
PcTEX. Bạn mới học có thể lấy mẫu soạn thảo từ những tệp này.

Khởi động PcTEX bằng các đường


Start→Program→Pctexv4→Pctexv4
Giao diện của PcTEX có dạng

9.1.2. Lập cấu hình

1. Để sử dụng trong PcTEX ta phải định dạng chương trình biên dịch
theo TEX, LATEX hoặc AMSTEX bằng cách từ trình duyệt chính:
Typeset→INITeX
268 Chương 9. Sử dụng phần mềm PCTEX

Ta chọn một định dạng Plain TeX và nhấn nút INITeX sau đó lặp lại
thao tác đó cho việc chọn LaTeX và AMSTeX.
2. Cài đặt cho chương trình soạn thảo từ trình đơn chính

R
setting→vào các trình đơn nhỏ như sau:

R
• Toolbar Cho ẩn hoặc hiện thanh công cụ.
• Status Bar Cho ẩn hoặc hiện thanh trạng thái phía dưới cửa

R
sổ soạn thảo.
• Magnifying Box Size Chọ bộ phóng xem chữ trong tệp DVI,

R
chức năng này có trong Default Setting.
• Current Setting Xem phông chữ và ngắt dòng hiện thời có

R
đặt không. Chức năng này cũng có trong Default Setting
• Directories Lập các thư mục chứa các tệp có thể lấy vào
trong khi biên dịch LATEX. Khi đặt tệp vào các thư mục dẫn ra
ở đây LATEX sẽ lấy vào tự động không cần đường dẫn như các tệp

R
ảnh chẳng hạn.
• DVI Fonts Đặt sử dụng phông cho các tệp DVI như dùng các

R
tệp phông *.ttf, *.pfb hoặc *.pk cho Poscript hoặc windows.
• Tex Fonts Đặt phông cho TEX. Khi cài đặt đã có sẵn các

R
phông, nếu cài thêm thì lựa chọn tại đây.
• Confifure Tools Những chương trình trợ giúp được cài đặt

R
vào đây như chương trìnhGsView.exe, Acrobat.exe, ...
• Default Setting Đây là chức năng quan trọng nhất việc đặt
cho màn hình soạn thảo và cho màn hình hiện kết quả.

R
Mỗi trang lựa chọn cài đặt được chú ý:

1. Editor Đánh dấu chọn vào hai ô nhỏ để trống thì khi
soạn thảo đến cuối dòng sẽ ngắt không bị màn hình che

R
khuất.
2. Chang Font \& Colors Nhấn vào nút này sẽ ra bảng
chọn phông cho màn hình soạn thảo. Khi cài đặt đã chọn
phông .Vntime cỡ 14, bạn đọc muốn dùng phông Việt Nam
khác hãy sử dụng chức năng này. Ngoài ra còn định màu cho
các lệnh của TEX (màu xanh) hay các kí hiệu đặc biệt như các
9.1. Phần cài đặt và lập cấu hình 269

dấu $, {, },... Bạn đọc có thể thay đổi màu tùy ý khi chọn

R
vào bảng màu.
3. Typesetting Khi biên dịch xong muốn hiện lên kết quả
ngay, hay báo lỗi kịp thời, cũng như tự động ghi lại các tệp
đang soạn thảo dở, hãy chọn vào các chức năng này. Chế độ
mặc định đã có như vậy, ta thấy thật cần thiết mới thay đổi ở

R
đây.
4. Viewer Đặt đầu ra trên màn hình như cỡ của trang văn
bản, xoay ngang hay đứng thẳng, độ phóng văn bản là bao
nhiêu ta phải chọn lấy một. Khi văn bản có màu thì phải chọn

R
chế độ cho màu thì đầu ra mới có.
5. TeXSpell Options Hàng loạt các tùy chọn để chạy kiểm
tra chính tả (bằng tiếng Anh) thư viện từ điển để kiểm tra có

R
thể lấy tại trang Web của phần mềm này.
6. BibTeX Arguments Chương trình làm mục lục thư viện
cần có đối số cần thiết để định dạng, mặc nhiên đã có chương

R
trình BibTeX kèm theo với đối số ở đây.
7. Make Index Arguments Làm chỉ số bằng chương trình
makeindx.exe những tùy chọn thì gõ vào dòng ở đây. Cách

R
làm như ở chương về làm chỉ số.
8. Postcript Điều khiển tệp Postcript với các màu của

R
nó.
9. Avanced Chọn Postcript trong tệp DVI, khi đó trên
thanh trạng thái có chữ PS và lúc đó ta có thể ghi lại tệp
DVI thành tệp PS. Thực ra đây là chương trình chuyển đổi
tự động chuyển tệp DVI sang tệp PS. Chú ý chọn trong chế
độ này khi hiện tệp DVI sẽ chậm và mỗi lần chuyển sang chế
độ này chương trình ngắt hoàn toàn và phải khởi động lại
chương trình từ đầu.
270 Chương 9. Sử dụng phần mềm PCTEX

9.2. Hướng dẫn sử dụng trong soạn thảo

9.2.1. Chức năng cơ bản trong soạn thảo


Hệ soạn thảo nào cũng có chức năng tương tự như nhau như Menu
có trình đơn File là tạo tệp mới, mở tệp đã có, ghi lại hoặc ghi lại với
tên khác, ... những ai chưa từng soạn thảo văn bản thì ngồi một lúc
cũng có thể làm được. Chúng tôi không đề cập ở đây cũng như trình
đơn Edit bao gồm tìm kiếm, thay thế, sao chép, xóa kí tự, ...
Muốn soạn thảo tiếng Việt bạn đọc hãy cài bộ phông tiếng Việt và
bật bộ gõ tiếng Việt. Bạn đọc hãy tìm bộ gõ Unikey rất nhỏ và dùng rất
tốt, lại cho không người dùng (chúng tôi có chứa trong đĩa CD).
Một khung văn bản LATEX các bạn phải chép vào tệp các bạn
vừa tạo thành những gì do bạn học được sẽ gõ vào đoạn giữa
\begin{document} ... \end{document}. Các lệnh và văn bản được gõ
vào bình thường như các chương trình soạn thảo khác.
Trong PcTEX bạn có thể tra cứu lệnh từ trình đơn Help, chỉ có tra
cứu lệnh TEX và lệnh trong LATEX. Đặc biệt có bảng đưa lệnh vào bằng
cách gọi ra:
9.2. Hướng dẫn sử dụng trong soạn thảo 271

Help→PcTeX Helper

Khi nhấn vào các nút kí hiệu thì lệnh đưa vào tại vị trí con trỏ đang
nhấp nháy. Trên hình các bạn có thể thấy là đưa vào các khuôn mẫu
cho các lớp văn bản bằng trình đơn templates.

9.2.2. Biên dịch LATEX trong chương trình

Việc kết hợp vừa soạn thảo vừa biên dịch là cần thiết để biết lỗi. Đây
cũng là những phút chơi trò chơi giữa soạn thảo và xem thành quả đã
đạt được. Khi văn bản đang mở phải nhấn nút Typeset thì LATEX biên
dịch tệp đang soạn thành tệp DVI nếu không có lỗi. Nếu trong khi biên
dịch có lỗi thì các bạn hãy trở lại tệp nguồn để sửa rồi chạy biên dịch
lại. Cách sửa lỗi các bạn hãy tra trong chương nói về lỗi của LATEX hoặc
TEX.
Khi biên dịch có lỗi nhấn vào phím soạn thảo thì con trỏ nhảy về vị
trí có lỗi trong tệp dạng soạn thảo và ta sửa ngay lỗi tại đó được.
272 Chương 9. Sử dụng phần mềm PCTEX

9.2.3. Công cụ chuyển đổi

Rất tiếc là việc cài đặt các hình vẽ từ Wintpic vào trong PcTEXv4
không được. Nghĩa là những tệp do Wintpic tạo ra sẽ không nhúng
vào trong tệp tex được. Chỉ có vẽ các hình ngoài bằng CorelDraw rồi
đưa vào bằng lệnh:
\includegraphics[width=12truecm, height=6truecm]{pctex5}
với việc dùng gói lệnh graphicx.
Việc chuyển đổi từ tệp dvi sang tệp ps thực hiện ngay trong PcTEX
rất khó. Ta thực hiện như sau: Từ menu chính Settings→Default
Settings sau đó lật trang Addvance và chọn vào PostCript. Biên dịch
lại tệp dvi và dùng Menu chính: File→Save as để ghi ra với cái tên
khác có đuôi ps.
Việc chuyển tệp từ ps sang tệp có đuôi pdf không có trong phiên
bản này. Trong phiên bản PcTEXv5 có các chức năng chuyển đổi tự động
này, nhưng phần mềm phải được mua chính thức mà nhiều bạn đọc
không có khả năng. Một cách tốt nhất là ta dùng chương trình chuyển
đổi Acrobat Distiller.

9.3. PcTEX với phần mềm VnTEX2.0

9.3.1. Cài đặt phông tiếng Việt

Tiếng Việt thiết kế cho phần mềm này được cài đặt tự động từ phiên
bản VnTEX 1.0 trong dự án phổ biến TEX cho sinh viên. Việc cài đặt và
sử dụng nó không gặp nhiều khó khăn và không có lỗi đáng kể nào.
Hàng loạt các luận án Toán học, cũng như các sách Toán của một số
trường đại học đã được soạn trên phần mềm này. Phiên bản kèm theo
cuốn sách này là VnTEX 2.0 vẫn giữ nguyên các ưu điểm của phiên bản
cũ nhưng được tổ chức lại tốt hơn, nhưng số phông thì không thay đổi
và phong phú bằng dùng MikTEX. Ngoài ra, phiên bản mới này kèm
theo hàng loạt các gói lệnh đã nói tới trong cuốn sách này và các bạn
được dùng một cách tự động khi gọi gói lệnh. Nhưng phông và kí hiệu
các bạn xem ở các chương sau.
9.3. PcTEX với phần mềm VnTEX2.0 273

Trong phần đầu văn bản bạn đưa vào lệnh \usepackage{vnfonts}
để gọi gói lệnh làm dấu. Trong phiên bản này chúng tôi
cung cấp một tùy chọn phông ABC bằng cách đưa vào lệnh
\usepackage[vntime]{vntex} thì vẫn giống như phiên bản cũ.
Ngoài ra các bạn có thể thay toàn bộ văn bản bằng các tùy chọn
\usepackage[vnantique]{vntex} (hoặc [vnsouth], [vnaria],...) bạn
đọc tra cứu phần phụ lục cuối sách.

9.3.2. Dùng đĩa CD VnTEX 2.0 với PcTEXv4

Dùng PcTEX trong đĩa VnTEX 2.0 bao gồm trong phần pctex. Để sử
dụng phông tiếng Việt cho PcTEX lần lượt cài đặt (liên tục nhấn nút Ok):

1. Cài đặt PcTEXv4.


2. Chạy chương trình PcTEX và thực hiện định dạng cách biên dịch
bằng:
Typeset→Initex và chọn Plain TeX. Sau đó lặp lại từng lượt cho
LaTeX và Ams TeX.
3. Cài phông tiếng Việt: ABC (nếu đã có cài rồi thì thôi), trong đĩa có
thư mục vnfonts cho Windows. Ta không cần cài đặt bộ gõ ABC
vào máy. Ta thực hiện như sau:
- Start→Setting→Control Panel
- Chạy chương trình Fonts và trên menu với Install.
4. Cài đặt VnTEX1.0.
5. Chạy chương trình PcTEX và mở những tệp ví dụ ở thư mục:
C:\Pctexv4\vnsample\vdlatex.tex và biên dịch thử xem có
hiệu quả không.
6. Cài đặt Unikey 3.5 (đã có bộ gõ tiếng Việt khác rồi thì thôi).
7. Có thể cài đặt một số chương trình phụ trợ khác như: Acrobat
Reader 4.0, GSview 2.0.
CHƯƠNG 10

SỬ DỤNG PHẦN MỀM MiKTEX

10.1. Phần cơ bản của MiKTEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274


10.1.1. Cài đặt MiKTEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
10.1.2. Sử dụng MiKTEX đối với người dùng . . . . . . . . . . . 277
10.2. Chương trình soạn thảo WinShell . . . . . . . . . . . . . . . . . . . . . . . 277
10.2.1. Cài đặt và khởi động WinShell . . . . . . . . . . . . . . . . . . 278
10.2.2. Hướng dẫn sử dụng WinShell . . . . . . . . . . . . . . . . . . 280
10.2.3. Chuyển đổi dữ liệu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
10.3. MikTEX với phần mềm VnTEX2.0 . . . . . . . . . . . . . . . . . . . . . . . . . 287
10.3.1. Phông và tệp của gói lệnh tiếng Việt . . . . . . . . . . . . 287
10.3.2. Dùng đĩa CD VnTEX 2.0 với MikTEXv4 . . . . . . . . . . 288

10.1. Phần cơ bản của MiKTEX


Chương trình MiKTEX của tác giả Christian Schenk, đây là chương
trình miễn phí cho người dùng, hiện nay có bản MiKTEX 2.2 trên trang
Web: http://www.miktex.de

10.1.1. Cài đặt MiKTEX


Chương trình cài đặt Setup Wizard trên trang Web. Chương trình
này vừa làm nhiệm vụ cài đặt vừa lấy các tệp chương trình MiKTEX về,
tuy hai việc này làm độc lập với nhau.
Khi cài đặt cũng như lấy chương trình từ Internet, Setup Wizard
hỏi bạn lựa chọn sau đây (MiKTEX chia làm ba mức độ lớn khác nhau):

• Tập nguồn có độ lớn 23Mb, tương ứng khi cài đặt vào máy là
100Mb. Đây là chương trình MiKTEX cỡ nhỏ bao gồm chương
trình TEX, các gói lệnh của LATEX, chương trình PDFLATEX, phông
10.1. Phần cơ bản của MiKTEX 275

type 1. Người dùng bình thường như chúng ta chỉ cần mức này
là quá đủ.
• Tập nguồn có độ lớn 64Mb, tương ứng khi cài đặt vào máy là
200Mb. Chương trình này có thêm chương trình Omega, ConTeXt,
e-TeX.
• Tập nguồn có độ lớn 143Mb, tương ứng khi cài đặt vào máy là
500Mb. Chương trình bao gồm tất cả những gì có của TEX cho
đến thời điểm ra phiên bản.

Chú ý khi cài đặt ta chọn tới các thư mục đã lấy các tệp trên mạng
về đó. Khi cài xong trong trình đơn khởi động của Windows:

R
Start→Programs→MiKTeX và sau đó là những mục nhỏ của MiKTEX:

• MiKTeX 2.2→Help→ Frequently Asked Questions Trả lời

R
câu hỏi người dùng MiKTEX trong thời gian đã qua.
• MiKTeX 2.2→Help →LaTeX2e Reference Khảo cứu thông

R
tin của LATEX 2ε , các lệnh, môi trường và cấu trúc của nó.
• MiKTeX 2.2→Help→ Release Notes Các chú ý đến phút

R
cuối cùng đóng gói MiKTEX.
• MiKTeX 2.2→Help→ Tips and Tricks Các vướng mắc và

R
mẹo nhỏ của MiKTEX được giải thích và mách bảo.
• MiKTeX 2.2→DVI Viewer Gọi tắt chương trình xem tệp DVI,
có thể chuyển tới thư mục tài liệu của MiKTEX để xem các hướng

R
dẫn.
• MiKTeX 2.2→MiKTeX Options Đây là chương trình quản lý
tệp của MiKTEX, khi cài phông tiếng Việt ta phải thường xuyên

R
chạy lại chương trình này.
• MiKTeX 2.2→MiKTeX Update Wizard Nếu bạn muốn cập
nhật phiên bản mới hãy chọn chương trình này.

Để mặc định thì MiKTEX tạo ra hai thư mục gốc (người cài đặt có
thể thay đổi) C:\TeXMF\ chứa toàn bộ chương trình MiKTEX và trong

R
đó gồm có các thư mục con sau:

• bibtex\, dvips\, makeindex\ Các thư mục chứa những


276 Chương 10. Sử dụng phần mềm MiKTEX

R
chương trình liên quan đến đầu vào.
• doc\ Thư mục chứa toàn bộ những tài liệu hướng dẫn người

R
dùng.
• fonts\ Thư mục chứa phông với những định dạng khác

R
nhau.

R
• miktex\ Thư mục gồm tất cả tệp liên quan đến MiKTEX.
• miktex\bin\ Thư mục chứa tất cả tệp chương trình (*.exe,

R
*.dll).
• miktex\config\ Thư mục chứa tệp cấu hình miktex.ini và
tệp ánh xạ phông miktex.map của MiKTEX. Ngoài ra chứa tất cả

R
tệp nhật ký khi dùng Setup Wizard.
• miktex\base\ Thư mục chứa tệp mf.pool chuỗi thông báo

R
lỗi của MetaFont.
• miktex\fmt\ Thư mục chứa tệp etex.pool, pdftex.pool,

R
omega.pool, tex.pool chuỗi thông báo lỗi của TEX.
• miktex\mem\ Thư mục chứa thông báo lỗi của MetaPost
mp.pool.

Khi ta sử dụng MiKTEX những thư mục trên được giữ nguyên. Khi
chạy TEX đòi hỏi các tệp TFM (TeX Font Metric) và khi đó có các chương
trình của MiKTEX tạo ra, nhưng được ghi ở thư mục chính thứ hai
C:\local TEXMF\ trong thư mục này gồm có các thư mục nhỏ tương

R
tự như trong thư mục phần trên:

• fonts\ Chứa toàn bộ các tệp loại phông không có trong

R
MiKTEX và được tạo ra trong khi chạy.
• miktex\config\ Thư mục chứa các tệp cấu hình về dữ liệu

R
của người dùng.

R
• miktex\base\ Chứa tệp MetaFont cơ bản của người dùng.

R
• miktex\fmt\ Thư mục chứa các tệp định dạng TEX.
• miktex\mem\ Thư mục chứa tệp về bộ nhớ MetaPost.
10.2. Chương trình soạn thảo WinShell 277

10.1.2. Sử dụng MiKTEX đối với người dùng

Ta có thể thay đổi hẳn tên


C:\local TEXMF\ thành tên
khác như C:\VNTeX\ hoặc ta
lập ra thư mục tương tự mới
hoàn toàn mà vẫn giữ nguyên
C:\local TEXMF\ , nhưng
phần thư mục con bên trong
cần được giữ nguyên. Nhưng
khi đó ta phải cấu hình đường
dẫn lại cho MiKTEX mới hiểu
để tìm kiếm đến thư mục mới
lập bằng cách:

Start→Programs→ MiKTeX→MiKTeX Option


và chọn trang root có các nút thêm thư mục hoặc là bỏ thư mục đi,
sau đó nhấn nút refresh FNDB. Chú ý: Khi cài đặt xong chương trình
VnTEX hoặc thêm phông mới ta đều phải chạy lại chương trình trên.
Khi LATEX thông báo không tìm thấy tệp ta cài vào các thư mục trên
cũng chạy lại chương trình này. Tất nhiên theo hình trên thì còn nhiều
chương trình liên quan đến MiKTEX, đề nghị các bạn tự tìm hiểu.
Để chạy LATEX thông qua MiKTEX người ta thường dùng một chương
trình soạn thảo văn bản, trong đó dễ dàng soạn tập nguồn TEX và liên
kết chạy luôn các chương trình của MiKTEX. Một chương trình nổi tiếng
WinEdt của Aleksander Simonic có phiên bản 5, đây không phải là phần
mềm miễn phí mà chỉ cho thử và đánh giá. Ngoài ra chúng tôi đã khảo
sát là cài phông tiếng Việt không có sẵn, nhiều chức năng quá phức tạp
và rất vụn vặt, có thể chỉ có kiểm tra chính tả tiếng Anh là tốt. Để sử
dụng tốt MiKTEX chúng tôi đã tìm được chương trình WinShell.

10.2. Chương trình soạn thảo WinShell


Hiện tại có rất nhiều chương trình soạn thảo văn bản trợ giúp cho
TEX. Mỗi chương trình đều có ưu điểm và nhược điểm riêng. Chúng tôi
chọn WinShell vì nó đơn giản, dễ sử dụng, người dùng tự cấu hình lấy
278 Chương 10. Sử dụng phần mềm MiKTEX

được, có đầy đủ các công cụ cần thiết cho việc soạn thảo TEX.
Chương trình tương đối hiện đại, chạy ổn định theo các thử nghiệm
của chúng tôi, nhất là các loại phông tiếng Việt và các bộ gõ tiếng Việt
hiện hành tại Việt Nam. Đây là chương trình miễn phí của tác giả Ingo
H. de Boer, hiện đang có phiên bản cài đặt WinShell 2.2.1 tại trang
Web http://www.winshell.de. Phiên bản này chạy rất ổn định và gọn
nhẹ. Bên cạnh đó có phiên bản beta WinShell 2.2.2 có kèm theo bộ
kiểm tra chính tả tiếng Anh, các bạn có thể tự cập nhật phiên bản này,
ở đây chúng tôi chỉ giới thiệu WinShell 2.2.1 vì đã được kiểm tra rất
kỹ các khả năng của phiên bản này, cuốn sách bạn đang đọc được soạn
trên chương trình này.

10.2.1. Cài đặt và khởi động WinShell

Nhấn đúp vào tệp chương trình cài đặt khởi động và nhập các tệp
của chương trình vào thư mục Program Files\WinShell, sau khi cài
đặt chương trình có một Shortcut trên Desktop và đường dẫn khởi
động chương trình:
Start→Program→WinShell →WinShell

Bạn có thể khởi động hướng


dẫn sử dụng chương trình
bằng tiếng Anh qua giao
diện Web, hoặc tệp pdf, ...
Phần dưới đây chúng tôi
liệt kê cách sử dụng Win-
Shell một cách nhanh nhất
và các kinh nghiệm là người
sử dụng trước.

Chương trình chính được chứa trong thư mục Program


Files\WinShell bao gồm
10.2. Chương trình soạn thảo WinShell 279

Trong \WinShell mục đích dùng


Thư mục htm Chứa tất cả tài liệu hướng dẫn sử dụng bằng
trang Web
Thư mục demo đây là một ví dụ tốt dùng project quản lý văn
bản thành nhiều tệp
WinShell.exe Đây là chương trình chính của hệ soạn thảo
này
WinShell_*.dll Một số thư viện khi dùng giao diện bằng tiếng
Anh, Pháp, Đức, Italia, Tây Ban Nha, Ba Lan.
và một số tệp hướng dẫn sử dụng liên quan nữa.
Khi WinShell chạy lần đầu tiên nó tạo ra các tệp quan trọng sau đây,

R
bạn đọc có thể dùng Notepad.exe đọc và sửa đổi theo ý của mỗi người:

WinShell.ini Tệp ghi lại cấu hình của WinShell, được tự động

R
cập nhật cho lần sử dụng cuối cùng.
WinShell.commands Bao gồm các lệnh của TEX để khi soạn thảo
lệnh được đổi mầu cho biết lệnh đó là đúng với nguyên bản. Khi
mới cài đặt tệp này còn thiếu nhiều lệnh TEX mà ta hay sử dụng.
Chúng tôi đã soạn lại và có kèm theo đĩa CD với VnTEX, các bạn

R
có thể chép đè lên.
WinShell.environments Đây là tệp chứa các lệnh môi trường,
trong khi soạn thảo thể hiện đậm lên, tệp này cũng có thể thêm

R
được.
WinShell.macros Tệp chứa các macro gõ tắt, tốt nhất là cài đặt

R
trong khi chạy chương trình chứ không sửa ở đây.
WinshellMacros.bmp Đây là tập ảnh cho biểu tượng Macro, không

R
nên sửa.
WinshellUserTools.bmp Tệp ảnh cho thanh công cụ, ta cũng
không sửa.

Nơi đặt các tệp này phụ thuộc vào hệ điều hành của máy bạn.
Những trường hợp sau đây chúng tôi đã thử và tìm thấy:
Hệ điều hành Win98 bạn tìm thấy tại thư mục
C:\windows\Application Data\WinShell
280 Chương 10. Sử dụng phần mềm MiKTEX

Hệ điều hành Win2000 bạn tìm thấy trong thư mục dành riêng cho
bạn, của tôi là:
Documents and Setting\nhdien.I_O_M\Application Data\WinShell

10.2.2. Hướng dẫn sử dụng WinShell


Giao diện chung: Khi chạy chương trình có giao diện

Ngoài menu, thanh công cụ WinShell là ba cửa sổ chính, cửa sổ bên


trái là nội dung của một project có nhiều tệp, khi nhấn tệp nào bên
cửa sổ này nội dung sẽ hiện ra ở cửa sổ soạn thảo bên phải, không phải
gọi tệp ấy dài dòng. Phần chính là cửa sổ soạn thảo, tất cả nội dung
trong LATEX ta gõ vào ở đây. Cửa sổ bên dưới chứa tất cả thông báo khi
ta chạy chương trình LATEX hoặc các chương trình khác có liên quan.
Các trình đơn Edit hoặc File quá quen thuộc với những người soạn
thảo trên máy tính, và nó giống nhau với mọi chương trình trên Win-
dows nên tôi không nhắc lại ở đây, các bạn tự tìm hiểu lấy.
Chương trình biên dịch và chuyển đổi LATEX
Trình đơn Execute và cũng như các nút trên thanh công cụ hoặc
10.2. Chương trình soạn thảo WinShell 281

Option→General ta có bảng sau:

Tên Phím Thông số Thực hiện


tắt
LATEX F5 %s.tex Biên dịch LATEX sang tệp DVI.
BibTEX F6 %s Lấy tệp tài liệu tham khảo.
DVIWin F7 %s.dvi Xem trên màn hình sản phẩm.
DVIPS F8 %s.tex Chuyển tệp DVI sang tệp PS.
GSView F9 %s.ps Xem tệp PS trên màn hình.
PDFLATEX F10 %s.tex Chuyển tệp TEX sang tệp PDF
PDFView F11 %s.pdf Xem tệp PDF trên màn hình.

Các chương trình trên đều gọi từ thư mục của MiKTEX là
C:\TeXMF\MiKTeX\bin\. Khi muốn đặt lại thông số hoặc chương trình
trên ta vào trình đơn Option→Program call.

Ta có thể thay đổi chương


trình trong exe-File, chúng
tôi đã thay latex.exe bằng
texify.exe và thông số dòng
lệnh là --run-viewer %s.tex vì
chương trình này biên dịch LATEX
và sau đó khởi động yap.exe xem
tệp DVI ngay, không cần qua giai
đoạn xem DVI riêng.

Thông số %<p>[s, p, c]<.xxx> có ý nghĩa như sau:

Thông số ý nghĩa lấy tệp


%s Dùng tên tệp trên thanh tiêu đề.
%ps Tên tệp trên thanh tiêu đề với đường dẫn.
%pp Đường dẫn của tệp dự án.
%c Tên tệp hiện thời.
%pc Tệp hiện thời và đường dẫn đầy đủ.
<.xxx> Phần mở rộng của tệp.

Khi cài đặt chương trình có thể chúng ta phải chọn chương trình
trước đó để có tệp sản phẩm mới nhất, ví dụ muốn xem tệp DVI ta phải
282 Chương 10. Sử dụng phần mềm MiKTEX

chọn chương trình latex trước, trong trường hợp này nếu tệp LATEX có
thay đổi thì chương trình tự động dịch lại LATEX cho tệp DVI mới nhất,
nếu không thay đổi gì trong tệp LATEX thì chương trình lấy tệp DVI cũ
ra xem.
Chương trình người sử dụng Hoàn toàn tương tự cho chương trình
của người dùng Option→User Program

Ta có thể cập nhật 10 chương


trình khi cần thiết, ở đây lấy
một ví dụ thêm vào chương trình
makeindex.exe làm chỉ số cho tài
liệu của ta. Tùy chọn trên dòng
lệnh là -s -o %s.ind %s.idx, đây
là những thông số cần thiết như
phần về LATEX ta đã bàn rồi. Có thể
thêm 10 chương trình như vậy và

phím gọi tắt của chúng lần lượt là Ctrl+F1...Ctrl+F10. Các chương
trình này không có nút để thực hiện chạy, nếu chỉ cần phím tắt thì
không sao.

Nếu muốn làm một nút trên


thanh công cụ ta tiến hành như
sau:
Bước 1. Từ trình đơn
Options→View→Customize và
chọn Category là User-Program

Bước 2. Nhấn chuột trái vào


chương trình cần làm nút và kéo
đến vị trí thanh công cụ ta cần đặt
nút và cửa sổ soạn thảo nút xuất
hiện.
10.2. Chương trình soạn thảo WinShell 283

Bước 3. Nhấn nút Edit để sửa


lại biểu tượng của nút sẽ ra trên
thanh công cụ. Ta có thể vẽ lại
biểu tượng của nút như hình bên.
Bước 4. Nhấn các nút OK để hoàn
thiện các quá trình trên và trên
thanh công cụ có biểu tượng ta đã
soạn ra.

Khi nhấn vào nút này chương trình cài bên trong tự động chạy.
Chú ý muốn sửa lại nút vừa làm trên ta lại vào
Options→View→Customize

và chọn Category là
User-Program và chọn vào
chương trình ta muốn sửa, sau
đó đưa chuột lên nút ở thanh
công cụ nhấn chuột phải và ta
chọn Edit và lặp lại từ bước 3 ở
trên.
Tạo và dùng Macro
Macro là một cách gõ tắt, trước tiên ta định nghĩa ký tự gõ tắt được
thay bằng một chuỗi ký tự rất dài, tránh mất công đánh lại. Công cụ
này thích hợp cho văn bản có nhiều cụm từ hay lặp lại. Trong soạn
LATEX có một số cấu trúc (lệnh) hay sử dụng ta nên định nghĩa và gõ tắt
là tốt nhất. Ta có thể tạo được 10 macro với phím gọi tắt Shift+F1 đến
Shift+F10.

Ví dụ chúng tôi có định nghĩa một số \begin{align*}


tổ hợp như: al ứng với cấu trúc ký tự ở & \\
bên cạnh, khi gọi ta đưa con trỏ đến vị & \\
trí cần gọi và dùng phím tắt để gọi vào. \end{align*}
284 Chương 10. Sử dụng phần mềm MiKTEX

Đưa vào một Macro ta tiến hành


như sau: Options→Macro. Ta gõ
tên Macro vào và nội dung của
Macro này, rồi chọn OK. Để sử
dụng Macro ta có thể dùng các
phím tắt hoặc là nhấn vào nút M
trên thanh công cụ thì thanh nút
Macro hiện ra (có 10 nút) và ta
nhấn vào nút tương ứng Macro

để chúng thực hiện tại vị trí con trỏ trong văn bản.
Ta có thể sửa lại các biểu tượng trên thanh Macro, cách làm hoàn
toàn như làm nút của chương trình người dùng ở phần trước, các bạn
hãy tự tìm hiểu lấy.
Đặt phông và tô mầu cho các lệnh và ký tự đặc biệt
Từ Options→Fonts hoặc Syntax-Highlighting chọn nút Change
cho việc thay đổi phông của phần soạn thảo. Rất tiếc chương trình
không soạn được phông Unicode cho tiếng Việt.

Chọn thay đổi mầu cho lệnh


LATEX chứa trong tệp ở phần
đầu ta đã nói tới, mỗi lần chọn
theo danh sách ta lại nhấn nút
color để chọn mầu theo sở
thích. Chú ý muốn các lệnh hoặc
môi trường thay đổi mầu ta vào
hai tệp Winshell.environments
và Winshell.commands để thêm
vào.
Những nút đưa các ký hiệu toán vào văn bản
Những nút trên thanh công cụ khi nhấn vào chúng lại cho ta một
thanh công cụ khác nhiều nút và ký hiệu hơn để đưa vào văn bản:

← R Bật thanh các loại mũi tên đưa vào LATEX.



a R Thanh các loại dấu trên chữ cái.
10.2. Chương trình soạn thảo WinShell 285

α R Thanh các chữ cái Hy Lạp.

M R Thanh các nút Macro.

≤ R Thanh các phép toán quan hệ.

± R Thanh các phép toán đôi.

ℵ R Thanh các ký hiệu đặc biệt.

Khi nhấn vào các nút của các thanh trên những lệnh TEX được đưa
vào tại vị trí con trỏ của văn bản.
Thiết lập bảng tự động cho LATEX

Ta bắt đầu từ
Excute→Table Wizard
và chọn số hàng, số cột.
Văn bản trong các cột được thay đổi
khi ta nhấn chuột trái vào đó:

> Căn vào giữa;


x Căn về bên trái;
y Căn về bên phải;
Còn các đường kẻ ngang hoặc
dọc được ký hiệu:
× Không kẻ ngang (dọc).
| Kẻ ngang hoặc dọc.
k Kẻ đường đôi ngang (dọc).
Nhấn chuột vào những nút này để thay đổi các đường kẻ trong bảng.
286 Chương 10. Sử dụng phần mềm MiKTEX

Ngoài ra ta phải điền nhãn \begin{table}


cho bảng khi đã đưa vào \begin{tabular}{cccc}
văn bản các lệnh LATEXcó ent0 & ent1 & ent2 & ent3 \\
lệnh như hình bên. ent4 & ent5 & ent6 & ent7 \\
Cuối cùng đưa nội dung ent8 & ent9 & ent10 & ent11 \\
vào từng ô khi bảng đã \end{tabular}
đưa các lệnh TEX vào văn \caption[smallcaption]{longcaption}
bản. \label{label}
\end{table}
Quản lý dự án
WinShell có dành cửa sổ nhỏ bên trái màn hình và hẳn một trình
đơn để quản lý dự án (Project). Một dự án là một văn bản dài như một
cuốn sách có các chương, mỗi chương chia thành một tệp, trong LATEX
để quản lý đồng bộ một cuốn sách ta đặt tên cho dự án, ví dụ cuốn sách
này có tên dự án là Milatex.wsp. Đặt và đổi tên hoặc ghi lại dự án đều
từ trình đơn Project. Muốn lấy tệp vào dự án từ Project→Add sau đó
là chọn:
Main-TeX-Document là lấy tệp chính, tệp này gọi tất cả tệp còn lại,
nghĩa là trong tệp này gồm có định dạng cơ bản của dự án và lệnh
\input{...} gọi các tệp khác.
TeX-Document là gọi tệp bình thường vào dự án.
Có một cách khác là nhấn phím phải chuột ở tên dự án cũng ra hai
lựa chọn trên. Trong dự án khi nháy chuột phải hai lần vào tên tệp thì
nội dung hiện ra trong cửa sổ văn bản.
Khi biên dịch dù ta đang soạn ở tệp nào thì chương trình biên dịch
lấy tệp dự án ra xử lý chứ không phải tệp đang hiện ra trước mặt ta.
Khi văn bản có cấu trúc thì cửa sổ dự án lấy nội dung của mục lục
dự án của ta qua các lệnh \chapter, \section và \subsection. Mục
này tiếng Việt khó đọc.
Cài đặt WinShell hoàn thiện hơn
Để hiện các lệnh và môi trường của LATEX thay đổi mầu cho dễ soạn
thảo bạn hãy mở hai tệp như phần đầu đã giới thiệu và thêm các lệnh
hoặc môi trường vào đó.
10.3. MikTEX với phần mềm VnTEX2.0 287

Đặt các Macro hay dùng nhất của mình vào chức năng đó và gọi
bằng phím tắt.
Nên tổ chức văn bản thành các dự án, bộ cài đặt có một dự án
demo.wsp, các bạn hãy tham khảo.
WinShell 2.2.1 và WinShell 2.2.2 sử dụng cho phiên bản Win-
dows 98 trở về trước đều tốt. Nhưng từ Windows 2000 trở đi bị mắc
một lỗi không hiện được chữ ư. Cách khắc phục là sau khi cài đặt xong
ta dùng chương trình sửa lỗi của chính PcTEX, cách làm cũng như phần
sửa lỗi cho PcTEX, chỉ có khác là ta phải chỉ vào thư mục C:\Program
Files\WinShell.

10.2.3. Chuyển đổi dữ liệu

Trên thanh công cụ của Winshell có những nút thực hiện chuyển
đổi dữ liệu từ tệp đang soạn thảo tex sang tệp ps và pdf như phần
cấu hình cài đặt ở trên. Khi đã chuyển xong trên thanh công cụ của
WinShell có nút xem ngay kết quả ở tệp pá hoặc pdf.

10.3. MikTEX với phần mềm VnTEX2.0

10.3.1. Phông và tệp của gói lệnh tiếng Việt


Khi cài đặt MikTEX những chương trình tự sinh phông đã
có. Ta chỉ cần cung cấp các tệp *.mf trong hệ thống đường
dẫn của nó là đủ. Tất cả phông tiếng Việt và các kí hiệu trong
cuốn sách này được liệt kê ở cuối sách có chứa trong thư mục
C:\vntex\fonts\source\public\vnfonts.
Những tệp định nghĩa phông cũng giống như trong PcTEX nhưng
được đặt tại C:\vntex\tex\latex\vnfonts.
Mỗi lần MikTEX chạy khi có định nghĩa phông thì nó tìm xem có các
tệp tương ứng *.mf không để các chương trình khác sinh ra thành các
tệp *.pk. Nếu ta đặt thư mục C:\localTexmf là thư mục địa phương
trong tùy chọn của MikTEX thì tất cả tệp sinh ra *.pk được chứa ở đây.
MikTEX sinh ra các tệp *.pk một lần rồi sau đó dùng tiếp và cần đến
288 Chương 10. Sử dụng phần mềm MiKTEX

đâu nó mới sinh ra đến đó. Do vậy lượng phông dùng của từng người
không nhiều lắm.

10.3.2. Dùng đĩa CD VnTEX 2.0 với MikTEXv4

Dùng MikTEX trong đĩa VnTEX 2.0 bao gồm trong phần miktex. Để
sử dụng phông tiếng Việt cho MikTEX lần lượt cài đặt:

1. Cài đặt GostCript 6.0. Chương trình trợ giúp xem các tệp hình
đuôi eps trong MikTEX.
2. Cài đặt MikTEX 2.4.
3. Cài đặt Wenshell 2.2.1.
4. Cài đặt VnTEX2.0.
5. Chạy chương trình cấu hình của MikTEX theo cách sau:
Start→Program→MikTeX Option
Chọn Root và Add thư mục C:\Vntex.
6. Cài phông tiếng Việt: ABC (nếu đã có cài rồi thì thôi), trong đĩa có
thư mục vnfonts cho Windows. Ta không cần cài đặt bộ gõ ABC
vào máy. Ta thực hiện như sau:
- Start→Setting→Control Panel
- Chạy chương trình Fonts và trên menu với Install.
7. Chạy chương trình Winshell và mở những tệp ví dụ ở thư mục:
C:\vntex\vnsample\vdlatex.tex và biên dịch thử xem có hiệu
quả không.
8. Cài đặt Unikey 3.5 (đã có bộ gõ tiếng Việt khác rồi thì thôi).
9. Có thể cài đặt một số chương trình phụ trợ khác như: Acrobat
Reader 4.0, GSview 2.0.
10.3. MikTEX với phần mềm VnTEX2.0 289
CHƯƠNG 11

NHỮNG PHẦN MỀM TRỢ GIÚP

11.1. Phần mềm vẽ hình WinTpic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290


11.1.1. Cài đặt WinTpic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
11.1.2. Hướng dẫn sử dụng WinTpic . . . . . . . . . . . . . . . . . . . 291
11.1.3. Nút lệnh và cách vẽ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
11.1.4. Thực hiện trên các Menu . . . . . . . . . . . . . . . . . . . . . . . 295
11.2. Đưa các hình đã vẽ từ WinTpic vào LATEX . . . . . . . . . . . . . . . 297
11.2.1. Các cách nhập tệp có hình vẽ . . . . . . . . . . . . . . . . . . . 297
11.2.2. Những ví dụ về khả năng WinTpic . . . . . . . . . . . . . 298
11.3. Các chương trình vẽ hình ngoài LATEX . . . . . . . . . . . . . . . . . . . 300
11.4. Các chương trình đọc tài liệu và in ấn . . . . . . . . . . . . . . . . . 302
11.4.1. Chương trình Gsview . . . . . . . . . . . . . . . . . . . . . . . . . . 302
11.4.2. Chương trình Acrobat Reader . . . . . . . . . . . . . . . . . . 303

11.1. Phần mềm vẽ hình WinTpic


Phần mềm WinTpic của tác giả Masashi Horii (Nhật Bản)
hiện đang có phiên bản 3.08. Đây là phần mềm vẽ hình cho LATEX
được cho không người dùng. Phần mềm được đặt tại trang Web
http://rd.vector.co.jp/soft/dl/win95/writing/se061886.html.
Qua sử dụng chúng tôi thấy rất thuận lợi và đáp ứng đầy đủ để vẽ các
hình cơ bản. Chương trình này khi vẽ xong thì hình vẽ được ghi lại
dưới dạng LATEX và nhúng vào văn bản của ta không cần một gói lệnh
kèm theo nào. Ngoài ra khi vẽ xong còn có thể chạy LATEX ngay để kiểm
tra hình đã vẽ.

11.1.1. Cài đặt WinTpic

Chương trình đặt trong bất cứ thư mục nào cũng được, nhưng
chúng tôi cài chương trình này tại C:\WinTpic\. rong thư mục này gồm
11.1. Phần mềm vẽ hình WinTpic 291

có các tệp quan trọng sau:


wtpic.exe 540Kb Tệp chạy chương trình
wtpic.ini 892b Tệp ghi lại cấu hình của WinTpic
wtpic.hlp 23Kb Tệp hướng dẫn sử dụng, chỉ bằng tiếng Nhật
Ta có thể làm shortcut cho WinTpic trên Desktop hoặc cài trong
chương trình soạn thảo LATEX như WinShell hoặc PcTEX.

11.1.2. Hướng dẫn sử dụng WinTpic


Khi chạy chương trình có giao diện:

Ta chú ý tới bàn vẽ được chấm điểm để dễ xác định. Bút vẽ bằng chuột
thể hiện hai đường chấm chấm vuông góc với nhau và di chuyển đến
đâu thì tọa độ thể hiện ở dưới màn hình. Bàn vẽ còn có một loạt nút
công cụ thường được sử dụng, nhưng không phải tất cả các công cụ
đều bày ra các nút mà nó còn ẩn chứa trong Menu của chương trình.
Ta đi vào từng Menu của chương trình:
Help
Rất tiếc hướng dẫn chương trình chỉ có bản tiếng Nhật. Thực ra
chương trình rất dễ sử dụng, để giúp các bạn học nhanh hơn, không
phải mày mò tôi liệt kê các chức năng sau đây của WinTpic. Trong khi
sử dụng bạn đọc sẽ sáng tạo ra những cách thức cho mình.
option
292 Chương 11. Những phần mềm trợ giúp

Từ option→SetupParameters cho màn hình và mỗi trang được thể

R
hiện trên màn hình lật để lựa chọn và cài đặt:

Line/Paint Chọn độ dày mỏng của đường vẽ và độ sáng tối của

R
mực vẽ. Ta để chế độ mặc định là tốt.
File Ta có thể đặt Initial Directory nơi mà đặt các tệp chủ yếu
của ta, không đặt cũng không sao cả. Default ext ta có thể đặt là
tex khi mở tệp mới, hoặc ghi lại chương trình tự động thêm đuôi
này. Filter đặt *.tex để khi mở tệp ta chỉ nhìn thấy các tệp có
đuôi tex thôi.

Output R Thông số Length of 1 Grid là đường chia ô trên bàn


vẽ, ta có thể chọn sao cho vẽ thuận tiện, nên là 0.5cm.
\unitlength{...} chọn kích thước đo cho hình vẽ, nên chọn 1pt
là đơn vị đo của LATEX được áp dụng trên bàn vẽ và trong chương

R
trình dịch LATEX.
TexPreviewer Trong khi vẽ ta có thể thử xem hình trong LATEX
như thế nào, chọn một chương trình biên dịch trong mục TeX
Compiler, chúng tôi đã đặt C:\texmf\miktex\bin\latex.exe
và DVI Ware là C:\texmf\miktex\bin\yap.exe. Cuối cùng là
Packge File gói lệnh cần dùng cho vẽ hình, nếu bỏ trống mặc

R
nhiên là lấy gói lệnh graphicx.
Language Khi cài đặt là tiếng Nhật, ta chọn lại tiếng English.

Từ option→TeX Preview là biên dịch và chạy chương trình LATEX


ta đã cài đặt ở phần trước đối với hình đang trên bàn vẽ được chuyển
11.1. Phần mềm vẽ hình WinTpic 293

thành tệp *.dvi hiện trên màn hình cho ta đánh giá.

11.1.3. Nút lệnh và cách vẽ

Các nút có hình vẽ là dùng khởi đầu cho vẽ hình đó.


Cách vẽ
Trước khi vẽ dùng chuột nhấn vào nút đường vẽ và đưa con chuột
đến vị trí vẽ, mỗi loại đường khác nhau có cách vẽ khác nhau và có thể
vẽ nhiều đường một loại một lúc. Để cố định lại các hình cho một lần vẽ
ta phải nhấn một lúc Shift+Enter hoặc nhấn chuột phải cho ta Menu
ngữ cảnh

Chọn draw là cố định hình.


Chọn Cancel là không vẽ hình.

RR
Các tùy chọn của ngữ cảnh còn:
+LineWidth Độ dày đường vẽ.
+LineType Loại đường vẽ liền

+Paint R
hay đứt đoạn.
Hình có đặc bên trong
theo một số loại.

Nét vẽ
Trên thanh công cụ có ba ô thể hiện tùy chọn nét vẽ như phần Menu
ngữ cảnh trên

Tùy chọn Nét vẽ


Normal Nét vẽ liền bình thường, tùy chọn hay dùng.
Dashed Nét vẽ đường đứt đoạn dài.
Dotted Nét vẽ là những dấu chấm liên tục.
Nothing Vẽ không nhìn thấy hình
VeryThick Nét vẽ dày và rất đậm.
Thick Nét vẽ đậm.
Thin Nét vẽ mỏng, bình thường, tùy chọn hay dùng.
VeryThin Nét vẽ rất mỏng.
DarkGray Hình phủ bởi mầu xám sẫm (khi có bao)
LightGray Hình phủ mầu xám sáng.
294 Chương 11. Những phần mềm trợ giúp

White Hình được phủ mầu trắng.


Nothing Hình trong suốt, đây là tùy chọn mặc định.

Làm nhãn cho các hình


Mỗi hình đều phải có những chú thích hoặc các nhãn ở các đỉnh, các
đường vẽ. Nút sau đây cho ta làm việc đó:
Trong Menu: Shapes → String{}:

Nhấn chuột tại vị trí cần cho nhãn sẽ xuất hiện giao diện:

Nhãn theo nguyên tắc của LATEX, nghĩa là ký hiệu toán phải trong $...$.
Các nút đường vẽ

Nút Trên Menu Cách vẽ và chức năng


chữ Shapes
L Lines Nhấn phím trái chuột tại điểm thứ nhất kéo
đến điểm thứ hai cho 1 đoạn thẳng, có thể vẽ
nhiều đường một lúc. Để kết thúc 1 đợt vẽ phải
nhấn Shift+Enter hoặc phím phải chuột rồi
chọn Draw.
C Circle Nhấn trái chuột lần 1 xác định tâm, kéo và
nhấn chuột lần 2 xác định bán kính, nhấn
chuột phải chọn kết thúc cho hình tròn. Khi
không nhấn kết thúc nhấn chuột lần 3 là ta
muốn vẽ một cung tròn và tới nút nhấn thứ
4 mới kết thúc thì cho 1 cung.
B Box Nhấn chuột trái lần 1 xác định 1 đỉnh hình
vuông, kéo ra và xác định đỉnh hình vuông đối
diện, rồi nhấn phím phải chuột chọn draw để
kết thúc.
E Ellipe Cách làm tương tự như vẽ hình tròn ở trên.
11.1. Phần mềm vẽ hình WinTpic 295

P Polygon Mỗi lần nhấn phím trái chuột cho ta một đỉnh
đa giác cho đến khi ta nhấn phím kết thúc như
các chức năng trên.
D Dots Mỗi lần nhấn phím trái chuột cho ta một điểm,
chú ý chọn nét vẽ thick để chấm to hơn, kết
thúc quá trình chấm điểm cũng phải thực hiện
chọn phím chuột phải sau đó là draw.
V Vectors Tương tự như vẽ đường thẳng, chỉ khác là
đoạn thẳng có mũi tên.
F(x) Function Nhấn phím trái chuột lần 1 và kéo ra xác định
miền để vẽ hàm và nhấn lần 2, sau đó ta nhấn
lần 3 xác định gốc tọa độ. Sau đó nhấn đôi
(hoặc Shift+Enter) sẽ hiện ra giao diện gõ
hàm vào và các thông số khác. Hiện tại chức
năng này đưa hình vào LATEX nhưng chỉ khi
chuyển qua tệp ps hình mới hiện ra đúng, nên
tôi không đề cập ở đây, các bạn hãy thử (chức
năng này vẽ được rất nhiều hàm theo công
thức).
S Stripes Kẻ những đường thẳng song song cho một
miền kín các đường vẽ. Nhấn chuột trái tại
miền cần điền đường vẽ sẽ xuất hiện giao diện
chọn các đường và nét điền.
ESC Khi kết thúc vẽ thì nút này lõm vào. Trong khi
vẽ ta cũng có thể nhấn vào nút này để kết thúc
lần vẽ.

11.1.4. Thực hiện trên các Menu


Chức năng vẽ chỉ có trên Menu
Ba chức năng quan trọng không có trên nút vẽ.

Menu: Shapes Cách vẽ và chức năng


SplineCurves Nhấn phím trái chuột liên tiếp cho ta những
đường cong thích hợp, sau đó là kết thúc với
nhấn phím phải chuột chọn Draw.
296 Chương 11. Những phần mềm trợ giúp

ZigZag Mỗi lần nhấn phím trái chuột cho ta một đoạn
thẳng nối với điểm trước đó, sau đó cũng phải
kết thúc quá trình vẽ như các phần trên.
RegularPolygon Khi chọn chức năng này sẽ phải trả lời hình đa
giác đều bao nhiêu đỉnh, sau đó là nhấn chuột
xác định đỉnh đầu tiên và việc còn lại là điều
chỉnh đa giác to nhỏ, rồi kết thúc.

Chỉnh sửa hình vẽ


Nhấn phím trái chuột vào một hình nghĩa là chọn hình đó, hình
được chọn sẽ có màu đỏ, xuất hiện Menu chỉnh sửa ở phía dưới bàn
vẽ hoặc ta nhấn phím phải chuột cũng ra Menu như trong Edit. Muốn
chọn nhiều đối tượng, nhấn nút trái chuột tại một góc bàn vẽ và giữ và
kéo chuột phủ lên những hình ta cần chọn. Những phím trên bàn phím
có chức năng sau:

Tên phím Chức năng tác dụng


Mũi tên Chuyển đổi hình được chọn trên bàn vẽ.
Del Xóa một hình đã chọn.
Ins Lấy lại các hình đã xóa trước đó (như Undo).
Esc Không trong chế độ lựa chọn hình nữa.
M Dùng di chuyển hình (Move) theo con trỏ chuột. Tới
vị trí mới phải chọn kết thúc hay bấm nút phải chuột
rồi chọn Draw.
C Sao chép (Copy) lại hình thêm 1 bản
E (Edit) Sửa hình được chọn.
R (Rotate) Quay hình theo các phương và sau đó cũng
kết thúc như khi vẽ. Riêng chữ không quay được.

Trên Menu Edit còn một số chức năng chỉnh sửa quan trọng sau:

Tên phím Chức năng tác dụng


Zoom Hình được chọn phóng to hoặc thu nhỏ theo con trỏ
chuột chuyển động với hướng khác nhau.
11.2. Đưa các hình đã vẽ từ WinTpic vào LATEX 297

Mirror Lật hình đối xứng sang phải, sang trái, lên trên hoặc
xuống dưới.
AddArrow Gắn thêm mũi tên vào các đường được chọn.

Lấy kích thước của hình


Một hình đưa vào LATEX phải biết được kích thước chiều dài, chiều
rộng của một hình.

Khi ta chọn một số


hình và thực hiện:
Edit→Zoom(ratio) cho
cửa sổ biết được chiều dài,
rộng của hình. Ngoài ra ta
còn thay đổi được tỷ lệ hai
chiều này cho hình đẹp hơn.

11.2. Đưa các hình đã vẽ từ WinTpic vào LATEX


Một hình đã được vẽ trong WinTpic ta phải ghi lại bằng tệp có phần
mở rộng là tex. Mỗi hình được ghi vào một tệp riêng, khi muốn sửa
hình đó ta lại mở tệp đó trong WinTpic để sửa, rồi ghi lại.

11.2.1. Các cách nhập tệp có hình vẽ

Tại vị trí trong văn bản muốn đưa hình vào đơn giản là dùng lệnh:
\input{hinh1.tex} đưa hình trong tệp hinh1.tex. Nếu hình nhỏ thì
nó kèm luôn cùng với văn bản của dòng đó. Vì tệp hình vẽ là TEX nên
ta có thể mở ra xem được, ví dụ:

B
A

A∩B

Một phần đầu của tệp TEX hình trên như sau:
298 Chương 11. Những phần mềm trợ giúp

%WinTpicVersion3.08
\unitlength 1cm
\begin{picture}( 2.6300, 1.9050)( 2.2725, -2.0275)
% CIRCLE 2 0 3 0
% 4 1410 420 1730 570 1730 570 1720 560
\special{pn 8}%
\special{ar 1388 414 348 348 0.4241944 0.4383366}%
% CIRCLE 2 0 3 0
% 4 1220 370 1450 580 1450 580 1450 580
........................................
Nhưng đưa hình vào có nhãn và đánh số ở dưới ta phải đưa vào cấu
trúc sau đây cho cả chiều ngang của trang:

\begin{figure}[!ht]
C
\input {hinh1.tex}
P
\caption{Đường thẳng Simpson}
\end{figure}
Hoặc là bên phải của trang
\begin{floatingfigure}[r]{5cm} A
\input {hinh1.tex} B
\caption{Đường thẳng Simpson}
\end{floatingfigure}
Hình 1.1 Đường thẳng Simpson

Hoặc dùng các cắt đặt hình như trong phần gói lệnh ta đã biết.

11.2.2. Những ví dụ về khả năng WinTpic

Để dễ hiểu và như bài tập thực hành tôi có vẽ bằng WinTpic một số
hình. Bạn đọc có thể sáng tạo ra các loại hình khác nhau bằng các công
cụ đã học ở phần trước.

Một công thức hóa học


CH3 COCH2 CH2 O

N
O N C6 H5
C6 H5
11.2. Đưa các hình đã vẽ từ WinTpic vào LATEX 299

18% %
Phân tích
& thiết kế
7% 50%
Lập trình
Bảo trì
25%
Kiểm sửa
Biểu đồ cai nghiện ma túy tại Hà
Nội.
Giá thành phát triển phần mềm.

Q′ S
P′
E
M′
N′
C F
Q P L
K
B
M A N
D A O

Mặt cắt hình khối. Đường Cônic

1
−1/2 1/2 x
0
y = x+1−x
−1

a x
Dùng đường không nét để kẻ
phía ngoài. Đồ thị hàm không liên tục.
300 Chương 11. Những phần mềm trợ giúp

Cho vay
trả lời

đơn vay Ghi nợ


Khách vay G x
hoàn trả x′
Thu nợ

Biểu đồ luồng dữ liệu


Điểm trong miền xác định.
Hệ thống tín dụng ngân hàng.

11.3. Các chương trình vẽ hình ngoài LATEX


Tuy Wintpic vẽ hình rất thuận lợi và cho ta tệp đưa thẳng vào tệp
*.tex, nhưng cũng không phong phú và chất lượng nhiều khi không
cao. Nhiều hình vẽ rất đa dạng không thực hiện được bằng Wintpic,
chúng tôi thường dùng những chương trình vẽ hình chuyên nghiệp để
vẽ hình và sau đó chuyển sang tệp có đuôi *.eps hoặc *.bmp rồi dùng
lệnh của LATEX đưa vào văn bản. Đơn giản nhất là dùng chương trình
Paint.exe có ngay trong mọi hệ điều hành Windows. Chương trình
khá đơn giản và chỉ cho ta kết quả tệp bmp. Ta biết các tệp bmp có dung
lượng lớn và đưa vào LATEX có chất lượng xấu. Sau đây chúng tôi lướt
qua việc sử dụng chương trình CorelDraw.

Đây là một chương trình vẽ hình chuyên nghiệp và rất thông dụng.
11.3. Các chương trình vẽ hình ngoài LATEX 301

Bạn đọc muốn sử dụng tốt chương trình này hãy tìm tài liệu liên quan
đến nó để đọc. Chúng tôi chỉ hướng dẫn phần cơ bản chuyển hình đã
vẽ được trong CorelDraw sang tệp eps để sử dụng. Giao diện khi chạy
CorelDraw có dạng như hình vẽ trên. Chương trình này có đầy đủ các
công cụ vẽ hình và các trang vẽ, tệp chứa hình vẽ tốn ít bộ nhớ vì nó
làm việc theo phương pháp vectơ.
Khi ta chọn các chi tiết của hình thì chương trình cho ta biết chiều
dài và rộng của hình trên thanh công cụ, điều này rất tốt cho ta khi đưa
chiều dài và rộng của hình vào trong LATEX.
Khi các bạn muốn chuyển đổi hình ở các định dạng khác như bmp,
tiff, ps, ... sang tệp eps để đưa vào LATEX có chất lượng cao thì thực
hiện như sau:

• Thực hiện đưa tệp vào bằng lệnh trên Menu: File→Import
Xuất hiện giao diện tìm tới tệp của ta để đưa vào.
• Thực hiện đưa tệp ra thành tệp eps: File→Export

Sau khi vẽ hình ta cũng chuyển hình của ta thành định dạng eps
được thực hiện như sau:

• Chọn tất cả các chi tiết của hình cần đưa ra.
• Thực hiện đưa tệp ra thành tệp eps: File→Export

Sau khi đặt tên cho tệp đưa ra ta phải chọn tùy chọn cho chất lượng
hình đưa ra. Giao diện để chọn đưa ra như hình sau:

Chú ý để tệp đưa ra nhỏ gọn và tốt cho in ấn thì chọn như trong hình
này. Phải chọn Send Bitmaps as:Grayscale và Resolution:72dpi.
302 Chương 11. Những phần mềm trợ giúp

Đặt các tệp eps vào tệp tex dùng gói lệnh graphicx và lệnh:
\includegraphics[width=10cm, height=6cm]{coreldraw1}

11.4. Các chương trình đọc tài liệu và in ấn


Trong MikTEX và PcTEX không kèm theo chương trình đọc và in
văn bản các tệp dạng PS hoặc PDF. Phần này chúng tôi giới thiệu sơ
lược cách sử dụng hai chương trình rất nổi tiếng và miễn phí cho người
dùng.

11.4.1. Chương trình Gsview

Chúng tôi có bản Gsview 2.0 miễn phí, phiên bản này cần chương
trình Ghostscript 4.01.
Mọi thông tin và cập nhật mới nhất về chương trình này các bạn hãy
vào: ftp://ftp.cs.wisc.edu/ghost/rjl/
http://www.cs.wisc.edu/~ghost/.

Đồng bộ hóa cho LATEX


Bộ cài đặt chúng tôi có chạy rất tốt trong môi trường Windows và
cài đặt thư mục C:\Gstools\.
Khi cài xong ta có thể chạy chương trình Gsview độc lập từ nút
Start của Windows:
Start→Programs→ gsview →GSview
Rồi ta mở tệp PS để xem và in ấn. Nhưng chúng ta sẽ sử dụng phần
11.4. Các chương trình đọc tài liệu và in ấn 303

mềm này kèm vào chương trình quản lý TEX của ta như sau:

• Đối với MikTEX trong chương trình soạn thảo Winshell ta thực
hiện từ trình đơn Options→Program Calls sau đó chọn GSView:
exe-File: C:\Gstools\gsview\gsview32.exe
cmd line: %s.ps
sau đó đánh dấu vào LaTeX first và DVIPS first.
• Đối với PcTEX từ trình đơn Setting→Configure Tools chọn:
Menu Text: &gsview32.exe
Program File Name: C:\Gstools\gsview\gsview32.exe.
Parameters: %d\%f.ps
Working Directory:%d
sau đó nhấn OK là cài đặt xong.

Những điểm chú ý khi chạy chương trình


Chạy chương trình khi ta đã chuyển đổi tệp DVI thành các tệp PS
cùng tên với tệp LATEX đang soạn thảo. Bằng cách cài đặt trên, Gsview
tự động lấy tệp PS và hiện lên màn hình và từ đây các bạn lật trang và
in văn bản ra được.
Ta có thể phóng to thu nhỏ, chọn in một số trang, những máy in
Poscript cho ra bản in có chất lượng cao.
Ta cũng có thể in ngang hoặc in dọc tài liệu. Bạn đọc chạy chương
trình và tìm hiểu về nó cũng có nhiều lý thú cho người làm chế bản.

11.4.2. Chương trình Acrobat Reader


Acrobat Reader là chương trình miễn phí với người dùng, hiện tại
hầu như người ta trao đổi với nhau bằng các tệp PDF vì các tệp này
không phụ thuộc vào phông mà cố định như bức ảnh, ngoài ra bảo vệ
được văn bản nguồn và tránh được các loại Virus trên tệp văn bản.
Cài đặt đồng bộ hóa cho LATEX
Chúng tôi có bản Acrobat Reader 5.0, những thông tin liên quan
đến chương trình các bạn vào trang web:
http://www.adobe.com/acrobat
Cài đặt chương trình này thường không có vấn đề gì. Khi chạy chương
304 Chương 11. Những phần mềm trợ giúp

trình theo thứ tự sau:


Start→Program→ Acrobat Reader 5.0
Rồi ta mở tệp PDF để xem và in ấn. Nhưng chúng ta sẽ sử dụng
phần mềm này kèm vào chương trình quản lý TEX của ta như sau:

• Đối với MikTEX trong chương trình soạn thảo Winshell ta thực
hiện từ trình đơn Options→Program Calls sau đó chọn PDFView:
exe-File: C:\Adobe\Acrobat 5.0\Reader\AcroRd32.exe
cmd line: %s.pdf
sau đó đánh dấu vào PDFLaTeX first.
• Đối với PcTEX từ trình đơn Setting→Configure Tools chọn:
Menu Text: &AcroRD32.exe
Program File Name:C:\Adobe\Acrobat
5.0\Reader\AcroRd32.exe
Parameters: %d\%f.pdf
Working Directory:%d
sau đó nhấn OK là cài đặt xong.

Những điểm chú ý khi chạy chương trình


Chạy chương trình khi ta đã chuyển đổi tệp DVI thành các tệp PDF
cùng tên với tệp LATEX đang soạn thảo. Bằng cách cài đặt trên, Acrobat
Reader tự động lấy tệp PDF và hiện lên màn hình và từ đây các bạn lật
trang và in văn bản ra được.

Ta có thể phóng to thu nhỏ, chọn in một số trang, chất lượng tệp PDF
phụ thuộc vào chương trình chuyển đổi từ tệp DVI sang PDF hoặc từ
tệp TEX sang PDF.
CHƯƠNG 12

Các lớp văn bản

12.1. Sử dụng văn bản không cần mẫu . . . . . . . . . . . . . . . . . . . . . . 305


12.2. Lớp văn bản letter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
12.2.1. Trình bày một bức thư . . . . . . . . . . . . . . . . . . . . . . . . . . 309
12.3. Lớp văn bản slides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
12.3.1. Môi trường slides . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
12.3.2. Ví dụ biểu diễn bằng slides . . . . . . . . . . . . . . . . . . . . . 314
12.4. Lớp văn bản article và book . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

12.1. Sử dụng văn bản không cần mẫu


Một văn bản ngắn hoặc những văn bản không kiểm soát việc đánh
số ta có thể tự tạo bằng các lệnh đã biết dù ở phần đầu có dùng một lớp
văn bản nào cũng được. Nội dung được thể hiện trong môi trường văn
bản document
7
\documentclass[10pt,onesite]{article} 8
\usepackage{vnfonts}
\usepackage{amsmath}
\usepackage[mathscr]{eucal}
\newcommand{\dis}{\displaystyle}

\begin{document}
\centerline {\bf Môn thi Tin học cơ Bản}
\centerline {(Thời gian 180 phút)}
\noindent {\bf Họ và tên: \dotfill Khóa:\dotfill}\\
{\bf Đề số: \hfill 03 \hfill Chữ ký:\dotfill}\\

\noindent {\bf Câu 1.} Hãy tạo một thư mục trên ổ Z:
với tên của mình cùng với đề số ở trên,
ví dụ như Z:$\setminus$dien01. Trong thư mục này chứa 4 tệp có
nội dung
306 Chương 12. Các lớp văn bản

trả lời các câu hỏi sau, ví dụ dien01.doc, dien01.exl,


dien01.tex, dien01.ms.\\
\noindent{\bf Soạn trong tệp MS Word:}\\

\noindent {\bf Câu 2.} Độ đo của thông tin ký hiệu là gì và các


mức độ đo?

\noindent {\bf Câu 3.} Mô tả sử dụng chuột trong hệ điều hành


Windows.

\noindent {\bf Câu 4.} Đánh số trang và làm tiêu đề chạy ở trên

ở dưới một trang?

\noindent {\bf Câu 5.} Vẽ hình thang $ABCD$ nội tiếp đường tròn
tâm $O$,
hai đáy $AB$ và $CD$. Chú ý có đánh dấu tâm $O$ và
các nhãn với hình được nhóm lại.

\noindent{\bf Soạn trong tệp MS Excel:}\\


\noindent {\bf Câu 6.} Trình bày bảng lương đầy đủ sau đây:\\
{\bf Bảng lương nhân viên}\\
{\bf Tháng 10/2001}\\
\begin{tabular}{|l|l|l|l|l|l|}\hline
Stt& Họ và Tên & LCB& NC& Lương Tạm ứng&Thực lĩnh\\ \hline
1&Lê Văn Minh&290&20&&\\
2& Nguyễn Thị Vân&330&26&&\\
3& Phạm Thế Bảo &230&25&&\\
4& Đinh Sỹ Kỳ&520&25&&\\
5& Vương Ngọc Khôi&430&24&&\\
6& Nguyễn Mai Lan&330&24&&\\ \hline
& Tổng cộng&&&&\\ \hline
\end{tabular}\\
Lương $= (LCB*1.5)*NC$\\
Tạm ứng $=4/5$ Lương\\
Thực lĩnh $=$ Lương - Tạm ứng\\

\noindent{\bf Soạn trong tệp LaTeX:}\\


\noindent {\bf Câu 7.} Soạn thảo công thức sau trong LaTeX:
\begin{align*}
u^\epsilon(x) & =\int_U\eta_\epsilon(x-y)u(y)dy =
\frac{
1}{\epsilon^n}\int_{B(x,\epsilon)}\eta\big(\frac{|x-y|}{\epsilon}\big)
u(y)dy\\
& =\frac{1}{\epsilon^n}\int_0^\epsilon\eta\big(\frac{
r}{\epsilon}\big)
12.1. Sử dụng văn bản không cần mẫu 307

\big(\int_{\partial B(x,\epsilon)}udS\big)dr.
\end{align*}

\noindent {\bf Câu 8.} Công thức:


$$v(r)= \begin{cases}
&b\log r+c\ (n=2)\\
&\dis{\frac {b}{r^{n-2}}}+c\ (n\ge 3),
\end{cases}$$

\noindent{\bf Soạn trong tệp Maple:}\\


\noindent {\bf Câu 9.} Gói lệnh dùng để làm gì?
Gọi gói lệnh \verb+linalg+ và thực hiện biến đổi đối với ma trận:
$$A=\begin{pmatrix}
1&2&3\\ x&x&5\\ \frac{4}{5} &4&-1
\end{pmatrix} $$
và tính: $A^{-1}$; $A^2$; $3A^3$.

\noindent {\bf Câu 10.} Dùng Maple giải hệ phương trình


và vẽ đồ thị của hai phương trình
$$\begin{cases}
&5x-4y=3\\
&7x-9y=8
\end{cases}.$$
\end{document}
: 2
MÔN THI TIN HỌC CƠ BẢN
(Thời gian 180 phút)
HỌ VÀ TÊN: . . . . . . . . . . . . . . . . . . . . . . . . . Khóa: . . . . . . . . . . . . . . . . . . . . . . . . .
Đề số: 03 Chữ ký: . . . . . . . . . . . . . . . . .
Câu 1. Hãy tạo một thư mục trên ổ Z: với tên của mình cùng với đề
số ở trên, ví dụ như Z:\dien01. Trong thư mục này chứa 4 tệp có nội
dung trả lời các câu hỏi sau, ví dụ dien01.doc, dien01.exl, dien01.tex,
dien01.ms.
Soạn trong tệp MS Word:
Câu 2. Độ đo của thông tin ký hiệu là gì và các mức độ đo?
Câu 3. Mô tả sử dụng chuột trong hệ điều hành Windows.
Câu 4. Đánh số trang và làm tiêu đề chạy ở trên và ở dưới một trang?
Câu 5. Vẽ hình thang ABCD nội tiếp đường tròn tâm O, hai đáy AB và
CD. Chú ý có đánh dấu tâm O và các nhãn với hình được nhóm lại.
Soạn trong tệp MS Excel:
308 Chương 12. Các lớp văn bản

Câu 6. Trình bày bảng lương đầy đủ sau đây:


BẢNG LƯƠNG NHÂN VIÊN
Tháng 10/2001
Stt Họ và Tên LCB NC Lương Tạm ứng Thực lĩnh
1 Lê Văn Minh 290 20
2 Nguyễn Thị Vân 330 26
3 Phạm Thế Bảo 230 25
4 Đinh Sỹ Kỳ 520 25
5 Vương Ngọc Khôi 430 24
6 Nguyễn Mai Lan 330 24
Tổng cộng

Lương = ( LCB ∗ 1.5) ∗ NC


Tạm ứng = 4/5 Lương
Thực lĩnh = Lương - Tạm ứng
Soạn trong tệp LaTeX:
Câu 7. Soạn thảo công thức sau trong LaTeX:

1 x-y 
Z Z
u (x) =
e
ηe ( x − y)u(y)dy = n η u(y)dy
U e B(x,e) e
1 e r
Z Z
udS dr.

= n η
e 0 e ∂B( x,e)

Câu 8. Công thức:


(
blogr + c (n = 2)
v (r ) = b
r n −2
+ c ( n ≥ 3),

Soạn trong tệp Maple:


Câu 9. Gói lệnh dùng để làm gì? Gọi gói lệnh linalg và thực hiện biến
đổi đối với ma trận:
 
1 2 3
A=
 
 x x 5 

4
5 4 −1

và tính: A−1 ; A2 ; 3A3 .


12.2. Lớp văn bản letter 309

Câu 10. Dùng Maple giải hệ phương trình và vẽ đồ thị của hai phương
trình
(
5x − 4y = 3
.
7x − 9y = 8

12.2. Lớp văn bản letter

12.2.1. Trình bày một bức thư

Viết một bức thư không cần mẫu có thể làm như ở phần trên. LATEX
có một lớp dành riêng cho viết thư theo tiêu chuẩn quốc tế. Lệnh
đầu tiên phải dùng đó là \documentclass[10pt]{letter} và phần
mở đầu là \address{<địa chỉ người gửi>} lệnh đưa địa chỉ người
gửi, lệnh tên người gửi \signature{<tên người gửi>} (hoặc tương
đương như vậy lệnh \name{<tên người gửi>}. Trong các lệnh trên
dùng lệnh \\ để xuống dòng trong nội dung như \address{Phòng GTS
và TTKH\\ Viện Toán học\\ ...} Ngoài ra phần đầu ta cho ngay
lệnh \date{20/08/2003}. Trong môi trường chính của văn bản có môi
trường letter với cú pháp: \begin{letter}{<địa chỉ người gửi>}
trước khi đóng môi trường này có các lệnh \opening{Kính gửi ...}
và \closing{Kính chào ...} và một số lệnh ghi chú và tái bút. Mỗi
thư mẫu này được in trên giấy có phần đầu sẵn. Muốn in thư có cả
tiêu đề của cơ quan ta đưa tên cơ quan vào trong khoảng trắng từ lệnh
\begin{letter}{...} đến \opening, chú ý cả lệnh kéo nội dung lên
theo trang giấy cũng đưa vào đây như ví dụ sau:

7
\documentclass{letter} 8
\usepackage{vnfonts}

\begin{document}
\address{Phòng GTS và TTKH\\
Viện Toán học\\
18 Hoàng Quốc Việt\\
10307 Hà Nội, Việt Nam}
\signature{Nguyễn Hữu Điển}
310 Chương 12. Các lớp văn bản

\date{20/01/2004}

\begin{letter}
{Giáo sư Nguyễn Đình Ngọc\\
Khoa công nghệ thông tin\\
Đại học Thăng Long\\
Hà Nội}

%Thêm vào tiêu đề của một bức thư


\vspace*{-3cm} %Kéo lên 3cm
\begin{center}
{\bf VIỆN KHOA HỌC VÀ CÔNG NGHỆ VIỆT NAM}\\
{\bf Viện Toán học}\\
18 Hoàng Quốc Việt,
10307 Hà Nội, Việt Nam\\
Tel. 84.4.7563474, Fax 84.4.7564303
\end{center}
\hrulefill %vẽ đường kẻ ngang

\opening{Thưa Giáo sư}


Theo sự gợi ý của giáo sư về giảng dạy cho sinh viên
những phần mềm tính toán khoa học, tôi đã chuẩn bị những
vấn đề sau:
Phần mềm Maple và tính toán kí hiệu

\begin{itemize}
\item Những tính toán số và tính toán kí hiệu
\item Tính toán trong giải tích
\item Tính toán trong đại số tuyến tính
\item Đồ họa với kết quả tính toán
\item Lập trình tính toán khoa học
\end{itemize}

Tổng cộng thời gian là 60 tiết với một nửa thời gian là
12.2. Lớp văn bản letter 311

thực hành
trên máy, còn lại là lý thuyết.
Giáo sư có ý kiến gì đề nghị cho biết sớm để chúng tôi
chuẩn bị.
\closing{Kính chào Giáo sư}

\cc{Viện Toán học\\


Phòng GTS\&TTKH}
\encl{Đĩa phần mềm cài đặt cho việc học tập}
\ps{P.S. Tôi phải đi Đức công tác trong tháng 9 này}

\end{letter}
\end{document}
: 2

VIỆN KHOA HỌC VÀ CÔNG NGHỆ VIỆT NAM


Viện Toán học
18 Hoàng Quốc Việt, 10307 Hà Nội, Việt Nam
Tel. 84.4.7563474, Fax 84.4.7564303

Phòng GTS và TTKH


Viện Toán học
18 Hoàng Quốc Việt
10307 Hà Nội, Việt Nam

20/01/2004

Giáo sư Nguyễn Đình Ngọc


Khoa công nghệ thông tin
Đại học Thăng Long
Hà Nội

Thưa Giáo sư
Theo sự gợi ý của giáo sư về giảng dạy cho sinh viên những phần
mềm tính toán khoa học, tôi đã chuẩn bị những vấn đề sau:
Phần mềm Maple và tính toán kí hiệu
• Những tính toán số và tính toán kí hiệu
• Tính toán trong giải tích
• Tính toán trong đại số tuyến tính
312 Chương 12. Các lớp văn bản

• Đồ họa với kết quả tính toán


• Lập trình tính toán khoa học

Tổng cộng thời gian là 60 tiết với một nửa thời gian là thực hành trên
máy, còn lại là lý thuyết. Giáo sư có ý kiến gì đề nghị cho biết sớm để
chúng tôi chuẩn bị.
Kính chào Giáo sư

Nguyễn Hữu Điển


Cùng gửi: Viện Toán học
Phòng GTS&TTKH
Kèm theo: Đĩa phần mềm cài đặt cho việc học tập
P.S. Tôi phải đi Đức công tác trong tháng 9 này nên không gặp được
Giáo sư.

12.3. Lớp văn bản slides


Văn bản trình diễn nội dung một tài liệu phải ngắn gọn và mang
những ý chính để người nghe và trình bày đều đọc được và nắm bắt
nội dung tốt. LATEX có đưa vào một lớp slides nhằm mục đích trên.
Văn bản trong lớp này được phóng to một cách thích hợp và kết hợp
với mầu chữ cho nổi bật. Những văn bản được trình bày thành những
trang liên tiếp.

12.3.1. Môi trường slides

Cũng như một văn bản bình thường khác cấu trúc của lớp slides

\documentclass{slides}
\usepackage{vnfonts}
\usepackage[dvips]{color}
\begin{document}
<các trang văn bản>
\end{document}
12.3. Lớp văn bản slides 313

Những gói lệnh trong phần đầu văn bản ta sử dụng như các lớp khác.
Trong thân văn bản có thêm ba môi trường để thể hiện những phần
khác nhau của một trang trình diễn: Môi trường slides cho trang
chính; môi trường overlays thể hiện khả năng xuất hiện dòng; môi
trường notes phần chú thích thêm vào trang.

Môi trường slides: Đây là môi trường chính cho một trang. Trong môi
trường này có phông không chân \sffamily với cỡ của lệnh
\LARGE, các lệnh về màu có tác dụng ở đây. Cú pháp là

\begin{slide} <văn bản và lệnh của \LaTeX> \end{slide}

Môi trường overlays: Môi trường nhằm thêm các dòng lần lượt vào
trong khi ta trình bày. Nó có cú pháp

\begin{overlay} <văn bản và lệnh của \LaTeX>


\end{overlay}

Trong hai môi trường trên đều có tác dụng lệnh \invisible làm
ẩn các dòng sau đó và \visible cho xuất hiện những dòng sau
đó. Với ví dụ dưới đây các bạn sẽ hiểu cách bố trí các trang.
Môi trường notes: Môi trường chỉ những trang còn lại cần phải trình
bày.

Một số công cụ khác như lệnh \pagestyle{...} khi cho thông


số plain thì các trang được đánh số trang khi môi trường slide và
overlay. Khi chọn heading thì giống như trên nhưng thêm đồng hồ
thời gian góc trái dưới của trang khi ta có tùy chọn clock ở lớp này. Khi
empty không đánh số trang.
Tùy chọn clock trên lệnh của lớp \documentclass, muốn dùng
nó thì thực hiện hai lệnh liền \settime{<số giây>} và \addtime{<số
giây>}.
Ta có thể nhảy qua các trang bằng lệnh onlyslides{<danh sách
trang>} ví dụ chỉ hiện các trang 2, 5, 9-12, 15 thì ta dùng lệnh
onlyslides{2,5,9-12,15}.
314 Chương 12. Các lớp văn bản

12.3.2. Ví dụ biểu diễn bằng slides

Ví dụ 4 trang lần lượt xuất hiện các dòng trình bày khi ta nhấn chuột
trái:
\documentclass[a4paper, clock]{slides}
\title{A Sample Document}%Trang tiêu đề
\author{Nguyen Huu Dien}
\begin{document}
\maketitle
\begin{slide}%%Trang thứ nhất
Mark TWAIN
\begin{itemize}
\item Don’t give me quotes
\invisible
\item tell me
\item what you know.
\visible
\end{itemize}
Meaningful precept.
\end{slide}
\begin{overlay}%%Trang thứ hai
\visible
Mark TWAIN
\begin{itemize}
\item Don’t give me quotes
\item tell me
\invisible
\item what you know.
\visible
\end{itemize}
Meaningful precept.
\end{overlay}
\begin{slide}%%Trang thứ ba
Mark TWAIN
12.3. Lớp văn bản slides 315

\begin{itemize}
\item Don’t give me quotes
\item tell me
\item what you know.
\end{itemize}
Meaningful precept.
\end{slide}
\end{document}
' '
$ $

Mark TWAIN

A Sample Document • Don't give me quotes

Nguyen Huu Dien

Meaningful precept.

& %
& %

' '
$ $

Mark TWAIN Mark TWAIN

• Don't give me quotes • Don't give me quotes

• tell me • tell me

• what you know

Meaningful precept. Meaningful precept..

& %
& %
316 Chương 12. Các lớp văn bản

12.4. Lớp văn bản article và book


Hai lớp văn bản article và book là những lớp cơ bản và từ đầu tới
đây đều nói những lệnh thuộc trong lớp này. Những lệnh phân đoạn,
phân chương, phân tiết mục trong tài liệu đã được đề cập tới ngay từ
đầu cuốn sách này.
Khi cài đặt VnTEX 2.0 đã có những ví dụ về loại lớp này, chúng
tôi không nhắc lại ở đây mà chỉ liệt kê những macro đã sử dụng cho
cuốn sách này để bạn đọc tham khảo. Trong phần mềm VnTEX 2.0 có
lớp vnbook, do chúng tôi lấy từ lớp book sửa lại cho thích hợp các dấu
chấm và đánh số theo kiểu sách chúng ta thường dùng và không phải
định nghĩa lại như đầu cuốn sách này đã hướng dẫn.
%6/4/2003 bắt đầu viết lại cuốn sách thứ hai về LaTeX
\documentclass[10pt,openany,reqno, twoside]{vnbook}
\usepackage{amsxtra,amssymb,latexsym, amscd} %Phông AMS
\usepackage{theorem} %Mở rộng môi trường Định lý
\usepackage{indentfirst} %Dòng đầu tiên của đoạn thụt vào
\usepackage{fancyhdr} %Làm đường kẻ và tiêu đề chạy
\usepackage{makeidx} %Thực hiện làm chỉ số ở cuối sách
\pagestyle{fancyplain} %Cũng làm tiêu đề chạy đầu trang
\usepackage{multicol} %Làm nhiều cột trên một trang
\usepackage{longtable} %Bảng dài quá một trang ngắt được
\usepackage{color, graphicx} %Đưa các dạng ảnh vào tệp TeX
\usepackage{floatflt} %Tạo các bảng, hình đặt cơ động nhất
\usepackage{program} %Làm từ khóa trong chương trình đậm
\usepackage[tight,vietnam]{minitoc} %Làm mục lục mỗi chương
\usepackage{layout} %Vẽ mô tả các vùng của một trang TeX
\usepackage{array} %Mở rộng các lệnh về môi trường mảng
\usepackage{delarray} %Ký hiệu biên của mảng
\usepackage{supertabular} %Bảng dài nhiều trang
\input letterspacing.tex %Thay đổi khoảng cách kí tự
\usepackage{ulem} %In nghiêng và gạch dưới
\usepackage{xspace} %Sinh kí tự trống sau lệnh
\usepackage{setspace} %Đổi khoảng cách giữa các dòng
12.4. Lớp văn bản article và book 317

\usepackage{picinpar} %Làm lỗ có văn bản trong đoạn


\usepackage{dcolumn} %Định nghĩa dóng cột
\usepackage{hhline} %Kết hợp đường kẻ ngang và đường kẻ dọc
\usepackage{multirow} %sắp xếp dọc theo cột của bảng
\usepackage{threeparttable} %Làm chú thích trong bảng
\usepackage{shapepar}%Định dạng đoạn đặc biệt
\usepackage{alltt} %Mở rộng môi trường nguyên dạng verbatim
\usepackage{verbatim} %Mở rộng môi trường nguyên dạng
\usepackage{moreverb} %Nâng cao môi trường nguyên dạng
\usepackage{calc} %Thêm khả năng tính toán
\usepackage{enumerate} %Mở rộng môi trường đánh số
\usepackage{pb-diagram} %Làm biểu đồ mũi tên
\usepackage{ifthen} %Thêm lệnh điều khiển trong văn bản
\usepackage{boxedminipage} %Khoanh những văn bản
\usepackage{shadow}%Tạo một văn bản có bóng nền
\usepackage{fancybox}%Tạo khung các hộp văn bản khác nhau
\usepackage{graphpap}% Kẻ ô li để vẽ hình
\usepackage{tabularx} %Tự động tính độ rộng bảng
%\usepackage{lscape} % Xoay ngang trang văn bản
%\usepackage{showidx} %Cho hiện những nơi có lệnh \index
\usepackage{rotating}%Quay hình
\usepackage{vnfonts} %Gói lệnh phông tiếng Việt
\voffset=-1truecm %Khoảng từ mép giấy trên đến mép văn bản
\hoffset=-1.5truecm %Khoảng từ mép giấy trái đến mép văn
bản
\textheight 20truecm %Độ dài của trang
\textwidth 12truecm %Độ rộng của trang
\parskip 3pt %Khoảng cách cộng thêm khi sang đoạn mới
\headsep=14truept %Khoảng từ chân tiêu đề chạy trên đến
dòng VB
\makeindex %Thực hiện làm chỉ số
\renewcommand{\headwidth}{12truecm}%độ rộng tiêu đề chạy
% Định nghĩa lại tiêu đề chạy tên chương
\renewcommand{\chaptermark}[1]
318 Chương 12. Các lớp văn bản

{\markboth{ Chương \thechapter. \sl


#1}{}}
% Định nghĩa lại tiêu đề chạy tên các đoạn
\renewcommand{\sectionmark}[1]%
{\markright{\thesection\ \sl #1}}
% Đặt tiêu đề chạy bên phải, bên trái
\lhead[\fancyplain{}{\thepage}]%
{\fancyplain{}{\rightmark}}
\rhead[\fancyplain{}{\leftmark}]%
{\fancyplain{}{\thepage}}
\cfoot{}
\sloppy%%%%%%%%%%%
\font\wingding=wingdin0 at 12pt %Phông kí hiệu đẹp
%Đặt môi trường ví dụ để vừa in nguồn và in TeX
%Trên mỗi loại có biểu tượng
\newenvironment{vidu}
{\par\noindent\raise-1ex\hbox{\wingding\symbol{55}}%
\hrulefill \raise-1ex\hbox{\wingding \symbol{56}}
\vspace*{-0.5cm}
\def\chiadoi{\par\vspace*{-0.5cm}
\noindent\raise-1ex\hbox{\wingding \symbol{58}}
\hrulefill\raise-1ex\hbox{\wingding \symbol{50}}\par }}{}
%Đặt môi trường hai cột để thể hiện ví dụ
\newenvironment{eqblank}[2]{\par%
\noindent\begin{minipage}[t]{#1\columnwidth}
\vspace*{0.1ex}
\def\producing{\end{minipage}
\hfill\begin{minipage}[t]{#2\columnwidth}%
\vspace*{0.1ex}}}{%
\end{minipage} \\ \mbox{}}
%%Đặt lại môi trường description cho đẹp
\makeatletter
\renewenvironment{description}
{\list{}{\labelwidth\z@ \itemindent -\leftmargin
12.4. Lớp văn bản article và book 319

\setlength{\parsep}{0pt}
\let\makelabel\descriptionlabel }}
{\endlist}
\makeatother

\renewcommand{\mtctitle}{\ } %Định nghĩa lại tên mục lục


mỗi chương
\font\exo=vhexotic scaled \magstep4 %Dùng phông viết hoa
tiêu đề
\font\exon=vnexotic scaled \magstep4 %Phông không viết hoa
tiêu đề
\newcommand{\hoa}[1]{\exo #1} %Lệnh viết hoa
\DeclareMathOperator{\tg}{tg} %Định nghĩa toán tử tg (LaTeX
không có)
\DeclareMathOperator{\cotg}{cotg}%Định nghĩa toán tử cotg
\theoremstyle{plain}%Định dạng môi trường theorem
\newtheorem{theorem}{Định lý}
\newtheorem{axiom}{Tiên đề}[chapter]
\newtheorem{hq}[theorem]{Hệ quả}
{\theoremstyle{break}\newtheorem{cor}{Hệ quả}}
{\theoremstyle{plain}\theorembodyfont{\rmfamily}
\newtheorem{Rem}{Chú ý}}
{\theoremheaderfont{\normalfont\bfseries}\newtheorem{Lem}{Bổ
đề}}
{\theoremstyle{break} \newtheorem{hequa}{Hệ quả}}
{\theoremstyle{plain} \newtheorem{thidu}{Ví dụ}[section]}
{\theorembodyfont{\rmfamily} \newtheorem{goiy}{Gợi ý}}
{\theoremstyle{marginbreak} \newtheorem{bode}[hequa]{Bổ
đề}}
{\theoremstyle{change}
\theorembodyfont{\rm } \newtheorem{dinhnghia}{Định
nghĩa}}

\newcommand{\taychi}{\hbox{\wingding \symbol{70}}}%Bàn tay


320 Chương 12. Các lớp văn bản

chỉ
\newcommand{\laco}{\hbox{\wingding \symbol{71}}}%Lá cọ
\newcommand{\krong}[1]{\makebox[#1]{\rule{0.4pt}{4pt}
\hrulefill\rule{.4pt}{4pt}}}%Khoảng rỗng

\setlength{\fboxsep}{10pt}%Độ dày đường kẻ bao văn bản


\newenvironment{Oboxedminipage}%Môi trường kẻ bao văn bản
{\begin{Sbox}\begin{minipage}}
{\end{minipage}\end{Sbox}\Ovalbox{\TheSbox}}
\hfuzz=0pt %độ dãn cho phép đối với mép văn bản

\begin{document}%Bắt đầu văn bản


\dominitoc %Khởi động gói làm mục lục nhỏ tại mỗi chương
%Định nghĩa lại các từ sau sang tiếng Việt
\renewcommand{\chaptername}{\exon Chương}
\renewcommand{\contentsname}{\exo Mục lục}
\renewcommand{\partname}{\exon Phần}
\renewcommand{\bibname}{\exo Tài liệu tham khảo}%
\renewcommand{\indexname}{\exo Danh mục từ khóa}%
\setlength{\baselineskip}{14truept}%Đặt độ cao của 1 dòng
\begin{titlepage}%Các lệnh làm bìa sách
\font\exob=vhexob12 scaled \magstep5
\font\exoh=vhexob12 scaled \magstep3
\font\tacgia=vhexob12 scaled \magstep1
\def\LaTeXb{{L\kern-.36em\raise.3ex \hbox{\large\exoh A}
\kern-.15em T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}}
\def\LaTeXc{\hoa{L\kern-.36em\raise.3ex \hbox{\exoh A}
\kern-.15em T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}}
\centerline{{\tacgia Nguyễn Hữu Điển}}
\vspace*{5cm}
\centerline{{\exob \LaTeXb}}
\bigskip
\centerline{{\exoh Với gói lệnh và phần mềm}}
\bigskip
12.4. Lớp văn bản article và book 321

\centerline{{\exoh công cụ}}


\vfill
\centerline{\tacgia Nhà xuất bản Đại học Quốc gia Hà Nội
2004}
\end{titlepage}
\pagenumbering{arabic}%Đánh số kiểu 1, 2, 3, ...
\setcounter{page}{3}%Đánh số lại trang từ 3
\include{mila0}%Tệp lời nói đầu
\newpage
\markboth{{\it Mục lục}}{{\it Mục lục}}%Tiêu đề chạy cho ML
\tableofcontents %Đưa mục lục vào
\newpage
\include{mila1} %Chương cấu trúc văn bản
\include{mila2} %Lệnh và môi trường
\include{mila3} %Văn bản toán học
\include{mila4} %Thông báo lỗi
\include{mila5} %Công cụ định dạng cơ bản
\include{mila6} %Các biểu bảng
\include{mila7} %Vẽ hình và quản lý hình
\include{mila8} %Chỉ dẫn và tra cứu trong văn bản
\include{mila9} %Sử dụng phần mềm PcTeX
\include{mila10} %Sử dụng phần mềm MikTeX
\include{mila12} %Những phần mềm trợ giúp
\include{mila13} %Các lớp văn bản
\include{mila14} %Tra cứu địa chỉ và kí hiệu
\include{tailieu} %Tài liệu tra cứu
\newpage
\addcontentsline{toc}{section}{{\bf Danh mục từ khóa}}
\renewcommand{\rightmark}{
{\it \LaTeX{} với gói lệnh và phần mềm công cụ}}
\renewcommand{\leftmark}{{\it Danh mục từ khóa}}
\printindex %In ra từ khóa
\end{document}%Hết văn bản
CHƯƠNG 13

TRA CỨU ĐỊA CHỈ VÀ KÍ HIỆU

13.1. Địa chỉ các gói lệnh trên Internet . . . . . . . . . . . . . . . . . . . . . . . 322


13.2. Mẫu chữ tiếng Việt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
13.3. Những kí hiệu đẹp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

13.1. Địa chỉ các gói lệnh trên Internet


Trong cuốn sách này có dùng rất nhiều gói lệnh, nếu các bạn không
có đĩa cài đặt hãy lên một trong những trang Web để lấy xuống và thử
nghiệm:
1. http://ctan.tug.org/
2. http://www.tex.ac.uk/
3. http://www.dante.de/.
Trong thư mục tex-archive và đi tiếp theo thư mục của từng gói
lệnh. Ví dụ ta vào đến http://www.tex.ac.uk/tex-archive/ và sau
đây là danh sách gói lệnh có dùng ở đây:

a4 R
R macros/latex/contrib/supported/ntgclass/a4.dtx
a4dutch
a4 R
R
macros/latex209/contrib/misc/a4dutch.sty
macros/latex/contrib/supported/ntgclass/a4.dtx
a4dutch
a4wide R
R
macros/latex209/contrib/misc/a4dutch.sty
macros/latex/contrib/other/misc/a4wide.sty
a5
a5comb R
R
macros/latex209/contrib/misc/a5.sty
macros/latex209/contrib/misc/a5comb.sty
afterpage
alltt R
R
macros/latex/packages/tools/
macros/latex/base/
amsbsy
amscd
amsfonts
R
R
macros/latex/packages/amslatex/inputs/amsbsy.sty
macros/latex/packages/amslatex/inputs/amscd.sty
fonts/amsfonts/latex/amsfonts.sty
13.1. Địa chỉ các gói lệnh trên Internet 323

amssymb R
R fonts/amsfonts/latex/amssymb.sty
amstex
amstext R
R
macros/latex/packages/amslatex/inputs/amsmath.sty
macros/latex/packages/amslatex/inputs/amstext.sty
apalike
R
R
biblio/bibtex/contrib/apalike.sty
biblio/bibtex/contrib/apalike.bst
array
authordate1-4 R
R
macros/latex/packages/tools/
biblio/bibtex/contrib/authordate1-4.sty
avant
babel R
R
fonts/metrics/adobe/avantgar/sty/avantgar.sty
macros/latex/packages/babel/
bar
basker R
R
macros/latex209/contrib/bar.sty
fonts/metrics/monotype/baskervi/sty/baskervi.sty
bembo
beton R
R
fonts/metrics/adobe/bembo/sty/bembo.sty
macros/latex/contrib/supported/beton/
bezier
biblist R
R
* macros/latex/base/
macros/latex209/contrib/biblist/
bibmods
bibunits R
R
macros/latex209/contrib/misc/bibmods.sty
macros/latex209/contrib/misc/bibunits.sty
bookman
R
R
fonts/metrics/adobe/bookman/sty/bookman.sty
fonts/metrics/monotype/bookman/sty/bookman.sty
boxedminipage
calc R
R
macros/latex/contrib/other/misc/boxedminipage.sty
macros/latex/packages/tools
changebar
chapterbib R
R
macros/latex/contrib/supported/changebar/
macros/latex/contrib/supported/cite/chapterbib.sty
chicago
R
R
biblio/bibtex/contrib/chicago.bst
biblio/bibtex/contrib/chicago.sty

cite R
R
biblio/bibtex/contrib/chicagoa.bst
macros/latex/contrib/supported/cite/
citesort
color R
R
macros/latex/contrib/supported/cite/
macros/latex/packages/graphics
colordvi

concrete
R
R
dviware/dvips/dvips/colordvi.sty
dviware/dvips/dvips/colordvi.tex
macros/latex/contrib/supported/beton
324 Chương 13. Tra cứu địa chỉ và kí hiệu

curves R
R macros/latex/contrib/supported/curves/curves.sty
curvesls
dcolumn R
R
macros/latex/contrib/supported/curves/curvesls.sty
macros/latex/packages/tools
delarray
doc R
R
macros/latex/packages/tools
macros/latex/base
doublespace
draftcopy R
R
[use setspace instead]
macros/latex/contrib/suppported/draftcopy/
eclbip
ecltree R
R
macros/latex209/contrib/eclbip
macros/latex209/contrib/eclbip
eepic
eepicemu R
R
macros/latex/contrib/other/eepic
macros/latex/contrib/other/eepic
endfloat
endnotes R
R
macros/latex/contrib/supported/endfloat/
macros/latex209/contrib/misc/endnotes.sty
enumerate
epic R
R
macros/latex/packages/tools
macros/latex/contrib/other/epic/
epsfig
eufrak R
R
macros/latex/packages/graphics
macros/latex/packages/mfnfss
euler
euscript R
R
macros/latex/contrib/supported/euler/
fonts/amsfonts/latex/euscript.sty
exscale
fancybox R
R
macros/latex/base
macros/latex/contrib/other/seminar/inputs/fancybox.sty
fancyhdr
fancyheadings R
R
macros/latex/contrib/supported/fancyhdr/
[use fancyhdr instead]
flafter
float R
R
macros/latex/base
macros/latex/contrib/supported/float
floatfig
fnpara R
R
macros/latex/contrib/other/floatflt/
macros/latex/contrib/other/misc/fnpara.sty
footnpag
french R
R
macros/latex/contrib/supported/footnpag/
language/french/inputs/french.sty
ftnright
garamond
german
R
R
macros/latex/packages/tools
fonts/metrics/monotype/garamond/sty/garamond.sty
languages/german/german.dtx
13.1. Địa chỉ các gói lệnh trên Internet 325

graphics R
R macros/latex/packages/graphics
hackalloc
hangcaption R
R
macros/latex/contrib/other/localloc
macros/latex209/contrib/misc/hangcaption.sty
harvard
helvet R
R
macros/latex/contrib/supported/harvard
fonts/metrics/adobe/helvetic/sty/helvetic.sty
here
hhline R
R
(obsolete; incorporated in float.sty)
macros/latex/packages/tools
ifthen
indentfirst R
R
macros/latex/base
macros/latex/packages/tools
index
isolatin1 R
R
macros/latex209/contrib/misc/index.doc
(use inputenc instead)
jmb
R
R
biblio/bibtex/contrib/jmb.sty
biblio/bibtex/contrib/jmb.bst
latexsym
layout R
R
macros/latex/base
macros/latex/packages/tools/
letterspace
letterspacing R
R
[use letterspacing instead]
macros/generic/letterspacing.tex
longtable
lscape R
R
macros/latex/packages/tools
macros/latex/contrib/misc/lscape.sty
lucid
lucidbr R
R
macros/latex/packages/psnfss/
macros/latex/packages/psnfss/
lucmath
makeidx R
R
macros/latex/packages/psnfss/
macros/latex/base
minitoc
minitocoff R
R
macros/latex/contrib/supported/minitoc/
macros/latex/contrib/supported/minitoc/
moreverb
mtimes R
R
macros/latex/contrib/supported/moreverb/
macros/latex/packages/psnfss/
multibox
multicol R
R
macros/latex209/contrib/misc/multibox.sty
macros/latex/packages/tools
multind
multirow
named
R
R
macros/latex209/contrib/misc/multind.sty
macros/latex/contrib/multirow/multirow.sty
biblio/bibtex/contrib/named.bst
326 Chương 13. Tra cứu địa chỉ và kí hiệu

R
R biblio/bibtex/contrib/named.sty
nar
R
R
biblio/bibtex/contrib/nar.bst
biblio/bibtex/contrib/nar.sty
natbib
nature R
R
macros/latex/contrib/supported/natbib/
biblio/bibtex/contrib/nature.bst

newapa R
R
biblio/bibtex/contrib/nature.sty
biblio/bibtex/contrib/newapa.bst

newcent R
R
biblio/bibtex/contrib/newapa.sty
fonts/metrics/adobe/newcentu/sty/newcentu.sty
newlfont
oldgerm R
R
macros/latex/base/
macros/latex/packages/mfnfss
oldlfont
openbib R
R
macros/latex/base
macros/latex/base
overcite
palatino R
R
macros/latex/contrib/supported/cite/
fonts/metrics/adobe/palatino/sty/palatino.sty
pandora
picinpar R
R
macros/latex/packages/mfnfss
macros/latex209/contrib/picinpar/
pifont
portland R
R
macros/latex/packages/psnfss
macros/latex209/contrib/misc/portland.sty
program
psboxit R
R
macros/latex/contrib/supported/program/
macros/latex209/contrib/misc/psboxit.sty
pstimesm
rotate R
R
macros/latex209/contrib/misc/pstimesm.sty
dviware/dvips/dvips/rotate.sty

rotating R
R
dviware/dvips/dvips/rotate.tex
macros/latex/contrib/supported/rotating
seminar
setspace R
R
macros/latex/contrib/other/seminar
macros/latex/contrib/supported/setspace/setspace.sty
shadow
shapepar R
R
macros/latex209/contrib/misc/shadow.sty
macros/latex/contrib/other/misc/shapepar.sty
showidx
showtags R macros/latex/base
macros/latex209/contrib/misc/showtags.sty
13.2. Mẫu chữ tiếng Việt 327

subfigure R
R macros/latex/contrib/suported/subfigure/
supertab
syntonly R
R
macros/latex/contrib/supported/supertabular
macros/latex/base
t1enc
tabularx R
R
macros/latex/base
macros/latex/packages/tools
theorem
R
R
macros/latex/packages/tools
threeparttable macros/latex/contrib/other/misc/threeparttable.sty
times
tracefnt R
R
fonts/metrics/adobe/times/sty/times.sty
macros/latex/base
trees
ulem R
R
macros/latex/contrib/supported/treesvr
macros/latex/contrib/other/misc/ulem.sty
varioref
verbatim R
R
macros/latex/packages/tools
macros/latex/packages/tools
version
vpage R
R
macros/latex/contrib/other/misc/version.sty
macros/latex/contrib/other/misc/vmargin.sty
wrapfig
xr
xspace
R
R
macros/latex/contrib/other/misc/wrapfig.sty
macros/latex/packages/tools
macros/latex/packages/tools

13.2. Mẫu chữ tiếng Việt


Những tên phông sau đây có tác dụng khi dùng lệnh, ví dụ:
\font\tenfont=vhantiq at 12pt,... Tất cả các phông này MiKTEX đều
dùng được, còn PcTEX không dùng được các phông có biểu tượng G.

vntime R
RUèng n÷îc nhî nguçn
vhantiq
vharabi R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vharial
vhariali R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vharialn
vharis R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhavan
vhavanb R Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
328 Chương 13. Tra cứu địa chỉ và kí hiệu

vhavanbi R
R
Uèng n÷îc nhî nguçn
vhavani
vhbahab R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn

vhblac R
vhbahabi GUèng n÷îc nhî nguçn

RUèng n÷îc nhî nguçn


vhbodo
vhcentb R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhcentbi
vhcenti RUèng n÷îc nhî nguçn

RUèng n÷îc nhî nguçn


Uèng n÷îc nhî nguçn

RUèng n÷îc nhî nguçn


vhcent
vhclar
Uèng n÷îc nhî nguçn
vhclari
vhcomsci RRUèng n÷îc nhî nguçn
G
Uèng n÷îc nhî nguçn
vhcoop
vhcorvi
vhcour
RRUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhcouri
R
GUèng n÷îc nhî nguçn

RUèng n÷îc nhî nguçn


vhcourb Uèng n÷îc nhî nguçn
vhexot
vhexoti
vhfree
G
RRUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhgoth
vhhelv RUèng n÷îc nhî nguçn
vhhelvi
vhkaol RRUèng n÷îc nhî nguçn
GUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhlinc
vhlinu RRUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhmemo
vhmemoi RRUèng n÷îc nhî nguçn
vhmusti
vhpark
vhpres
RRUèng
Uèng n÷îc nhî nguçn
n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
13.2. Mẫu chữ tiếng Việt 329

vhrevu R
RUèng n÷îc nhî nguçn
vhsouth
vhtekn R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhtifh
vhtime R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhtimeb
vhtimebi R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vhtimei
vhuniv R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn

RUèng n÷îc nhî nguçn


vhvogu Uèng n÷îc nhî nguçn
vn3d
vn3di GUèng n÷îc nhî nguçn
vn3db GUèng n÷îc nhî nguçn
vn3dbi
vnantiq
vnantiqb
RRUèng
GUèng n÷îc nhî nguçn
n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vnantiqi G Uèng n÷îc nhî nguçn
vnantibi
vnarab
vnarabi
G
R Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
GUèng n÷îc nhî nguçn
vnarabbi
vnarianb RR
GUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vnariani
vnaris RUèngUèngn÷îcn÷îcnhînhînguçn
Uèng n÷îc nhî nguçn
nguçn
vnarisb
vnavan
G
RRUèng n÷îc nhî nguçn
vnavanb
vnavanbi RR
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vnavani
vnbaha R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn

vnblac R
vnbahabi GUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
330 Chương 13. Tra cứu địa chỉ và kí hiệu

vnblaci
vnbodo R
GUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vnbodoi
vncentb R
GUèng n÷îc nhî nguçn

R Uèng n÷îc nhî nguçn


vncentbi
vncenti R
R
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vncent
vnclare RUèngUèngn÷îcn÷îcnhînhînguçn
Uèng n÷îc nhî nguçn
nguçn
vnclarei
vncomsi
vncoop
G
R
RUèngUèngn÷îcn÷îcnhînhînguçn
Uèng n÷îc nhî nguçn
nguçn
vncoopi
vncorsi
G
RUèng n÷îc nhî nguçn
vncorsib
vncour
vncourb RR R
GUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vncourbi
vncouri
vnexot
RRUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn

vnexoti G Uèng n÷îc nhî nguçn


vnexotb
vnfree
vngoth
G
RRUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn

Uèng n÷îc nhî nguçn


vngothb
vnhelv
G
RUèng n÷îc nhî nguçn
vnhelvi
vnkaol RRUèng
GUèng n÷îc nhî nguçn
n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vnlinc
vnlinu
vnlinui
RUèng n÷îc nhî nguçn
GUèng n÷îc nhî nguçn
vnlinub
vnluci R
GUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
13.3. Những kí hiệu đẹp 331

vnmemo R
R Uèng n÷îc nhî nguçn
vnmemoi
vnmust R Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vnmusti
vnpark
vnpres
R
GUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
RUèngUèngn÷îcn÷îcnhînhînguçn
nguçn
vnpresi G
vnpresb GUèng n÷îc nhî nguçn
GUèng n÷îc nhî nguçn
vnpresbi
vnrevu
vnsouthb
R
RUèngUèngn÷îcn÷îcnhînhînguçn
Uèng n÷îc nhî nguçn
nguçn
vnsouthd G
vnsouthi
RUèng n÷îc nhî nguçn
GUèng n÷îc nhî nguçn

R
vnsouth
vnstam
vntekn
vntifh
R
R
Uèngn÷îcnhînguçn
Uèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn
vntekn GUèng n÷îc nhî nguçn
vntekni GUèng n÷îc nhî nguçn
vnteknb
vntimeb RRUèng
GUèng n÷îc nhî nguçn
n÷îc nhî nguçn
vntimebi
vntimei
vnuniv
RUèng n÷îc nhî nguçn
Uèng n÷îc nhî nguçn

GUèng n÷îc nhî nguçn


vnunivi GUèng n÷îc nhî nguçn
vnunivb GUèng n÷îc nhî nguçn
vnunivbi GUèng n÷îc nhî nguçn
vnvogu GUèng n÷îc nhî nguçn

13.3. Những kí hiệu đẹp


Một số kí hiệu đã được dùng trong tài liệu này lấy từ những phông
sau đây. Cách dùng là sử dụng lệnh \symbol{<số mã>}, <số mã> là số
332 Chương 13. Tra cứu địa chỉ và kí hiệu

hàng cộng với số trên đầu cột ra vị trí mã cần lấy kí hiệu ra. Ví dụ
1. Ta định nghĩa phông \font\web=webdings sau đó lấy
{\web\symbol{74}} cho ta J. Kí hiệu trong bảng 13.4.
2. Định nghĩa \font\typem=wingdin0 sau đó lấy
{\typem\symbol{74}} cho ta J.Kí hiệu trong bảng 13.5.
3. Tương tự ta lấy được kí hiệu các bảng 13.6, bảng 13.7 và 13.11.

0 1 2 3 4 5 6 7 8 9
0 ` ´ ˆ ˜ ¨ ˚ ˇ ˘ ¯
10 ˙ ¸ ‚ ‹ › “ ” „ «
20 » – — ı Ỷ ỷ Ỵ ỵ
30 Đ đ ! " # $ % & ’
40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U V W X Y
90 Z [ \ ] ^ _ ‘ a b c
100 d e f g h i j k l m
110 n o p q r s t u v w
120 x y z { | } ~ À Á
130 Ã Ả Ạ Â Ầ Ấ Ẫ Ẩ Ậ Ă
140 Ằ Ắ Ẵ Ẳ Ặ È É Ẽ Ẻ Ẹ
150 Ê Ề Ế Ễ Ể Ệ Ì Í Ĩ Ỉ
160 à á ã ả ạ â ầ ấ ẫ ẩ
170 ậ ă ằ ắ ẵ ẳ ặ è é ẽ
180 ẻ ẹ ê ề ế ễ ể ệ ì í
190 ĩ ỉ Ị Ò Ó Õ Ỏ Ọ Ô Ồ
200 Ố Ỗ Ổ Ộ Ơ Ờ Ớ Ỡ Ở Ợ
210 Ù Ú Ũ Ủ Ụ Ư Ừ Ứ Ữ Ử
220 Ự Ỳ Ý Ỹ ị ò ó õ ỏ ọ
230 ô ồ ố ỗ ổ ộ ơ ờ ớ ỡ
240 ở ợ ù ú ũ ủ ụ ư ừ ứ
250 ữ ử ự ỳ ý

Bảng 13.3: Bảng phông ABC trong LATEX


13.3. Những kí hiệu đẹp 333

0 1 2 3 4 5 6 7 8 9
0
10
20
30   ! " # $ % & '
40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U V W X Y
90 Z [ \ ] ^ _ ` a b c
100 d e f g h i j k l m
110 n o p q r s t u v w
120 x y z { | } ~  € 
130 ‚ ƒ „ … † ‡ ˆ ‰ Š ‹
140 Œ  Ž   ‘ ’ “ ” •
150 – — ˜ ™ š › œ  ž Ÿ
160   ¡ ¢ £ ¤ ¥ ¦ § ¨ ©
170 ª « ¬ ­ ® ¯ ° ± ² ³
180 ´ µ ¶ · ¸ ¹ º » ¼ ½
190 ¾ ¿ À Á Â Ã Ä Å Æ Ç
200 È É Ê Ë Ì Í Î Ï Ð Ñ
210 Ò Ó Ô Õ Ö × Ø Ù Ú Û
220 Ü Ý Þ ß à á â ã ä å
230 æ ç è é ê ë ì í î ï
240 ð ñ ò ó ô õ ö ÷ ø ù
250 ú û ü ý þ

Bảng 13.4: Bảng phông webdings trong LATEX


334 Chương 13. Tra cứu địa chỉ và kí hiệu

0 1 2 3 4 5 6 7 8 9
0
10
20
30   ! " # $ % & '
40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U V W X Y
90 Z [ \ ] ^ _ ` a b c
100 d e f g h i j k l m
110 n o p q r s t u v w
120 x y z { | } ~  € 
130 ‚ ƒ „ … † ‡ ˆ ‰ Š ‹
140 Œ  Ž   ‘ ’ “ ” •
150 – — ˜ ™ š › œ  ž Ÿ
160   ¡ ¢ £ ¤ ¥ ¦ § ¨ ©
170 ª « ¬ ­ ® ¯ ° ± ² ³
180 ´ µ ¶ · ¸ ¹ º » ¼ ½
190 ¾ ¿ À Á Â Ã Ä Å Æ Ç
200 È É Ê Ë Ì Í Î Ï Ð Ñ
210 Ò Ó Ô Õ Ö × Ø Ù Ú Û
220 Ü Ý Þ ß à á â ã ä å
230 æ ç è é ê ë ì í î ï
240 ð ñ ò ó ô õ ö ÷ ø ù
250 ú û ü ý þ

Bảng 13.5: Bảng phông wingdin0 trong LATEX


13.3. Những kí hiệu đẹp 335

0 1 2 3 4 5 6 7 8 9
0
10
20
30   ! " # $ % & '
40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U V W X Y
90 Z [ \ ] ^ _ ` a b c
100 d e f g h i j k l m
110 n o p q r s t u v w
120 x y z { | } ~  € 
130 ‚ ƒ „ … † ‡ ˆ ‰ Š ‹
140 Œ  Ž   ‘ ’ “ ” •
150 – — ˜ ™ š › œ  ž Ÿ
160   ¡ ¢ £ ¤ ¥ ¦ § ¨ ©
170 ª « ¬ ­ ® ¯ ° ± ² ³
180 ´ µ ¶ · ¸ ¹ º » ¼ ½
190 ¾ ¿ À Á Â Ã Ä Å Æ Ç
200 È É Ê Ë Ì Í Î Ï Ð Ñ
210 Ò Ó Ô Õ Ö × Ø Ù Ú Û
220 Ü Ý Þ ß à á â ã ä å
230 æ ç è é ê ë ì í î ï
240 ð ñ ò ó ô õ ö ÷ ø ù
250

Bảng 13.6: Bảng phông wingdin2 trong LATEX


336 Chương 13. Tra cứu địa chỉ và kí hiệu

0 1 2 3 4 5 6 7 8 9
0
10
20
30   ! " # $ % & '
40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U V W X Y
90 Z [ \ ] ^ _ ` a b c
100 d e f g h i j k l m
110 n o p q r s t u v w
120 x y z { | } ~  € 
130 ‚ ƒ „ … † ‡ ˆ ‰ Š ‹
140 Œ  Ž   ‘ ’ “ ” •
150 – — ˜ ™ š › œ  ž Ÿ
160   ¡ ¢ £ ¤ ¥ ¦ § ¨ ©
170 ª « ¬ ­ ® ¯ ° ± ² ³
180 ´ µ ¶ · ¸ ¹ º » ¼ ½
190 ¾ ¿ À Á Â Ã Ä Å Æ Ç
200 È É Ê Ë Ì Í Î Ï Ð Ñ
210 Ò Ó Ô Õ Ö × Ø Ù Ú Û
220 Ü Ý Þ ß à á â ã ä å
230 æ ç è é ê ë ì í î ï
240 ð
250

Bảng 13.7: Bảng phông wingdin3 trong LATEX


13.3. Những kí hiệu đẹp 337

0 1 2 3 4 5 6 7 8 9
0
10
20
30   ! " # $ % & '
40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U V W X Y
90 Z [ \ ] ^ _ ` a b c
100 d e f g h i j k l m
110 n o p q r s t u v w
120 x y z { | } ~  € 
130 ‚ ƒ „ … † ‡ ˆ ‰ Š ‹
140 Œ  Ž   ‘ ’ “ ” •
150 – — ˜ ™ š › œ  ž Ÿ
160   ¡ ¢ £ ¤ ¥ ¦ § ¨ ©
170 ª « ¬ ­ ® ¯ ° ± ² ³
180 ´ µ ¶ · ¸ ¹ º » ¼ ½
190 ¾ ¿ À Á Â Ã Ä Å Æ Ç
200 È É Ê Ë Ì Í Î Ï Ð Ñ
210 Ò Ó Ô Õ Ö × Ø Ù Ú Û
220 Ü Ý Þ ß à á â ã ä å
230 æ ç è é ê ë ì í î ï
240 ð ñ ò ó ô õ ö ÷ ø ù
250 ú û ü ý þ
Bảng 13.8: Bảng phông monotype trong LATEX
338 Chương 13. Tra cứu địa chỉ và kí hiệu

0 1 2 3 4 5 6 7 8 9

30 ! " # $ % & '


40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U
Bảng 13.9: Bảng phông sports at 12pt trong LATEX

0 1 2 3 4 5 6 7 8 9
30 % & '
40 ( ) * + , - . / 0 1
50 2 3 4 5 6 7 8 9 : ;
60 < = > ? @ A B C D E
70 F G H I J K L M N O
80 P Q R S T U V W X Y
90 Z [ \ ] ^ _ ` a b c
100 d e f g h i j k l m
110 n o p q r s t u v w
120 x y z {
Bảng 13.10: Bảng phông animals1 at 14pt trong LATEX

 ) ! ", #- $. %/ &0 '1


0 1 2 3 4 5 6 7 8 9
30
40 (2 3= *4 +5 6@ 7A 8B 9C :D ;E
50
60 < >?
Bảng 13.11: Bảng phông animals2 at 14pt trong LATEX
TÀI LIỆU THAM KHẢO

[1] Nguyễn Hữu Điển, Nguyễn Minh Tuấn 2001. LATEX: Tra cứu và soạn
thảo. NXB ĐHQG, Hà Nội.
[2] Nguyễn Hữu Điển, 1995. Preparation of a TeX-document using Viet-
namese TexT Editors, Master Thesis, Vrije Universsiteit Brussel.
[3] Helmut Kopka, Patrick W. Daly 1999. A Guide to LATEX. Addison-
Wesley
[4] George Gratzer, 1995. Math into LATEX: An introduction to LATEX and
AMSLATEX. Birkhauser, Boston.
[5] Leslie Lamport, 1994. LATEX: A Document Preparation System.
Addison-Wesley, Reading, Massachusetts.
[6] Donald E. Knuth, 1990. TEXbook. Computers and typesetting, Vol
A, Addison-Wesley, Reading, Massachusetts.
[7] Donald E. Knuth, 1986. METAFONT: The Program . Computers and
typesetting, Vol D, Addison-Wesley, Reading, Massachusetts.
[8] P.W. Abrahams, 1990. TEX for the impatient. Addison-Wesley, Read-
ing, Massachusetts.
[9] M. Goossens, F. Mittelback and A. Samarin, 1994. The LATEX Com-
panion. Addison-Wesley, Reading, Massachusetts.
DANH MỤC TỪ KHÓA

#, 44 .sty, 15
\#, 44 .tex, 15
$, 44 .texlog, 16
\$, 44 .tfm, 15, 16
%, 45 .toc, 16
\%, 44 /(/), 84
&, 45, 109 \:, 89
\&, 44 \;, 89
(((), 84 @<<<, 96
\(, 59, 61 @=, 96
)()), 84 @>>>, 96
\), 59, 61 @AAA, 96
*, 62 @VVV, 96
\,, 89 \@addtoreset, 19
.aux, 16 \@dotsep, 233
.bbl, 16 \@dottedtocline, 232
.bib, 16 \@evenfoot, 27
.blg, 16 \@makefnmark, 164
.bst, 16 \@makefntext, 164
.clo, 16 \@oddfoot, 27
.cls, 15 \@oddhead, 27
.dtx, 16 \@pnumwidth, 233
.dvi, 16 \@ptsize, 23
.fd, 16 \@seccntformat, 36
.fmt, 16 \@startsection, 36
.idx, 16, 242 \@starttoc, 234
.ilg, 16, 242 \@thefnmark, 164
.ind, 16, 242 \@tocrmarg, 233
.ist, 16, 242 @twoside, 23
.lis, 16 [([), 84
.list, 16 \[, 61
.lof, 16 \\, 49, 108
.lot, 16 \Bbbk(k), 87
.ltx, 16 \choose, 92
.mf, 16 \circle, 215
.pk, 16 \dbinom, 91
.pol, 16 \hdotsfor, 95
.poo, 16 \hrulefill, 49
.pool, 16 \mtctitle, 235
Danh mục từ khóa 341

\qbezier, 216 \AmS, 75


\], 61 amscd(Gói lệnh), 96
](]), 84 amsmath, 75
\^, 44 amsopn(gói lệnh), 83
^, 45 amsopn(môi trường), 83
\_, 44 amssymb(gói lệnh), 80
_, 45 amssymb(môi trường), 85
{, 45 \and, 59
\{, 44 \angle(∠), 83, 87
}, 45 angle, 221
\}, 44 \appendix, 40
\~, 44 appendix(môi trường), 40
~, 45 \appendixname, 42
10pt, 17 \approx(≈), 80
11pt, 17 \approxeq(u), 87
12pt, 17 \arabic, 26, 51
\arccos(arccos), 81
a4dutch(gói lệnh), 22 \arcsin(arcsin), 81
a4paper, 17 \arctan(arctan), 81
a4wide(gói lệnh), 22 \arg(arg), 81
a5(gói lệnh), 22 arg_close, 250
a5comb(gói lệnh), 22 arg_open, 250
a5paper, 17 array, 171
\abovedisplayshortskip, 107 array(gói lệnh), 175
\abovedisplayskip, 107 \arraybackslash, 181
\abstract, 41 \arraycolsep, 107, 174
\abstractname, 42 \arrayrulewidth, 174
\acute(´), 78 \arraystretch, 174
\addcontentsline, 234, 236 \arrow, 98
\addtocontents, 234, 236 article(lớp văn bản), 33
\addtocounter, 50 \ast(∗), 80
\addtolength, 47 \asymp(), 80
\adjustmtc, 235 \atop, 91, 92
\aleph(ℵ), 83 atual, 251
align(môi trường), 110
alignat(môi trường), 110 b5paper, 17
aligned(môi trường), 112 \backepsilon(), 87
alignedat(môi trường), 112 \backprime(8), 87
\allowdisplaybreaks, 109 \backsim(v), 87
alltt(gói lệnh), 160 \backsimeq(w), 87
\Alph, 26, 51 \backslash(\), 83, 84
\alph, 26, 51 \bar(¯), 78
\alpha(α), 79 bar(gói lệnh), 217
\alsoname, 42 \barwedge(Z), 86
\alsoseename, 42 \baselineskip, 22, 157
\amalg(q), 80 \baselinestretch, 31, 157
342 LATEX Tra cứu và soạn thảo

bb, 221 \boldsymbol, 75


\Bbb, 75 book(lớp văn bản), 33
Bcenter(môi trường), 206 \boolean, 59
Bdescription(môi trường), 206 \bot(⊥), 83
\because(∵), 87 \botfigrule, 229
\belowdisplayshortskip, 107 \bottomcaption, 188
\belowdisplayskip, 107 \bottomfraction, 228
Benumerate(môi trường), 206 bottomnumber, 227
Beqnarray(môi trường), 206 \bowtie(./), 80
\beta(β), 79 \Box(2), 80
\beth(i), 85 \boxdot( ), 86
\between(G), 87 boxedminipage(gói lệnh), 203
Bflushleft(môi trường), 206 \boxminus( ), 86
Bflushright(môi trường), 206 \boxplus(), 86
\bfseries, 60 \boxtimes(), 86
bfseries(môi trường), 60 bp, 46
\bibname, 42 break, 104
\Big, 85 \breve(˘), 78
\big, 85 T \bullet(•), 80
\bigcap( ), 83 \Bumpeq(m), 87
\bigcirc(S ), 80 \bumpeq(l), 87
\bigcup( ), 83
\Bigg, 85 cacl(gói lệnh), 149
\bigg, 85 J calc(gói lệnh), 22
\bigodot( L ), 83 \Cap(e), 86
\bigoplus( N ), 83 \cap(∩), 80
\bigotimes( ), 83 Case, 183
\bigskip, 49 cases(môi trường), 95
\bigsqcup( ), 83 cc, 46
F

\bigstar(F), 87 \ccname, 42
\bigtriangledown(5), 80 CD(môi trường), 96
\bigtriangleup( 4), 80 \cdot(·), 80
), 83 \cdots(· · · ), 89
U
\biguplus(
\bigvee( ),V83 center(môi trường), 60, 146
W

\bigwedge( ), 83 \centerdot(), 86
\binom, 91 \centering, 60, 146
Bitemize(môi trường), 206 centertags, 113
\blacklozenge(), 87 \cfoot, 29
\blacksquare(), 87 change, 104
\blacktriangle(N), 87 changebreak, 104
\blacktriangledown(H), 87 chapter, 34, 50
\blacktriangleleft(J), 87 \chaptermark, 31
\blacktriangleright(I), 87 \chaptername, 42
bmatrix(môi trường), 94 \chead, 29
\bmod( mod ), 83 \check(ˇ), 78
\boldmath, 77 \chi(χ), 79
Danh mục từ khóa 343

\choose, 91 \dagger(†), 80
\circ(◦), 80 \daleth(k), 85
\circeq($), 87 \dashbox, 213
\circlearrowleft( ), 86 \dashleftarrow(L99), 86
\circlearrowright(), 86 \dashrightarrow(99K), 86
\circledast(~), 86 \dashv(a), 80
\circledcirc(}), 86 \datename, 42
\circleddash(), 86 \dblfigrule, 229
\circledS(s), 87 \dblfloatpagefraction, 228
\clearemptydoublepage, 25 dblfloatsep, 228
\clearpage, 24 dbltextfloatsep, 228
\cline, 172 \dbltopfraction, 228
clip, 221 dbltopnumber, 227
\clubsuit(♣), 83 dcolumn(gói lệnh), 193
cm, 46 dd, 46
\cmda, 40 \ddagger(‡), 80
\cmdb, 40 \ddot(¨), 78
collecmore(số đếm), 168 .
\ddots( . . ), 89
color(gói lệnh), 208, 224 \DeclareGraphicsExtensions,
columnbadness(số đếm), 168 224
\columnsep, 18, 19, 167 \DeclareGraphicsRule, 224
\columnseprule, 18, 19, 168 \DeclareMathOperator, 82
\columnwidth, 19 \def, 53
comment(môi trường), 161 \definecolor, 209, 225
\complement({), 87 \deg(deg), 81
\cong(∼=), 80 delarray(gói lệnh), 183
\contentsline, 232 \Delta(∆), 79
\contentsname, 42 \delta(δ), 79
\coprod(ä), 83 \depth, 69
\cornersize, 205 description(môi trường), 147
\cos(cos), 81 \descriptionlabel, 151
\cosh(cosh), 81 \det(det), 81
\cot(cot), 81 \dfrac, 78, 91
\cotg(cotg), 82 \dgARROWLENGTH, 100
\coth(coth), 81 \dgARROWPART, 101
\csc(csc), 81 \dgDOTSIZE, 101
\Cup(d), 86 \dgDOTSPACING, 101
\cup(∪), 80 \dgHORIZPAD, 101
\curlyeqprec(2), 87 \dgLABELOFFSET, 101
\curlyeqsucc(3), 87 \dgVERTPAD, 101
\curlyvee(g), 86 \diagdown(), 87
\curlywedge(f), 86 diagram(môi trường), 98
\curvearrowleft(x), 86 \diagup(), 87
\curvearrowright(y), 86 \Diamond(3), 80
curves(gói lệnh), 217 \diamond(), 80
344 LATEX Tra cứu và soạn thảo

\diamondpar, 160 \enlargethispage*, 32


\diamondshape, 160 \ensuremath, 53
\diamondsuit(♦), 83 enumerate(môi trường), 147
\digamma(z), 85 enumi, 50
\dim(dim), 81 enumi(số đếm), 148
\displaybreak, 109 enumii, 50
displaymath(môi trường), 61 enumii(số đếm), 148
\displaystyle, 90 enumiii, 50
\div(÷), 80 enumiii(số đếm), 148
\divideontimes(>), 86 enumiv, 50
document, 17 enumiv(số đếm), 148
document(môi trường), 61, 67 epic(gói lệnh), 217
\documentclass, 17 \epsf, 222
\dominitoc, 235 \epsfig, 222
\dot(˙), 78 epsfig(gói lệnh), 222
.
\doteq(=), 80 \epsfxsize, 222
\doteqdot(+), 87 \epsfysize, 222
\dotfill, 49 \epsilon(e), 79
\dotplus(u), 86 \eqcirc(P), 87
\doublebarwedge([), 86 eqnarray(môi trường), 108
\doublebox, 205 eqnarray*(môi trường), 108
\doublerulesep, 174 \eqslantgtr(1), 87
\Downarrow(⇓), 81, 84 \eqslantless(0), 87
\downarrow(↓), 81, 84 \equal, 58
\downdownarrows(), 86 equation, 50
\downharpoonleft(), 86 equation(môi trường), 62, 108
\downharpoonright(), 86 equation*(môi trường), 62, 108
draft, 18, 219, 221 \equiv, 83
dvipsnames, 224 escape, 251
\eta(η), 79
\ecaption, 235 \eth(ð), 87
ecltree(gói lệnh), 217 \evensidemargin, 19
eepic(gói lệnh), 217 ex, 46
\eject, 49 \ExecuteOptions, 223
\ell(`), 83 executivepaper, 17
em, 46 \exists(∃), 83
empty, 25 \exp(exp), 81
\emptyset(∅), 83 \extenaldocument, 241
encap, 251 \extrarowheight, 175
\enclname, 42
\endfirsthead, 191 \faketableofcontents, 235
\endfoot, 191 \fallingdotseq(;), 87
\endhead, 191 false, 59
\endlastfoot, 191 fancy, 28
endnotes(gói lệnh), 165 fancybox(gói lệnh), 204
\enlargethispage, 31 fancyheadings(gói lệnh), 28
Danh mục từ khóa 345

\fancyplain, 30 \ggg(≫), 87
\fbox, 68, 73 \gimel(‫)ג‬, 85
\fboxrule, 204 \glossary, 254
\fboxsep, 73, 204 \gnapprox(), 88
figure, 50 \gneq( ), 88
\figurename, 42 \gneqq( ), 88
figwindow(môi trường), 158 \gnsim(), 88
final, 18, 219 \graphicpath, 224
finalcolumnbadness(số đếm), graphics(gói lệnh), 218
168 graphicx(gói lệnh), 218, 220
\Finv(`), 87 graphpap(gói lệnh), 210
\flat([), 83 \graphpaper, 210
\floatpagefaction, 228 \grave(`), 78
\floatsep, 228 group_skip, 251
\flushbottom, 32 \gtrapprox('), 87
flushleft(môi trường), 146 \gtrdot(m), 87
flushright(môi trường), 146 \gtreqless(R), 87
fneqn, 115
\fnsymbol, 51 \gtreqqless(T), 87
\footins, 164 \gtrless(≷), 87
\footnote, 56, 164 \gtrsim(&), 87
footnote, 50 \gvertneqq(), 88
\footnotemark, 165
\footnoterule, 164 \hat(ˆ), 78
\footnotesep, 164 \hbar(h̄), 83, 87
\footnotesize, 164 \headheight, 21
\footnotetext, 165 heading_flag, 251
\footskip, 20 heading_prefix, 251
\forall(∀), 83 heading_suffix, 251
\foxrule, 73 headings, 25
\frac, 91 \headpagename, 42
\frak, 75 \headsep, 21
\framebox, 68, 213 \headtoname, 42
\heartpar, 160
\Game(a), 87 \heartshape, 160
\Gamma(Γ), 79 \heartsuit(♥), 83
\gamma(γ), 79 \height, 69
gather(môi trường), 110 height, 220
gathered(môi trường), 112 \hfill, 49
\gcd(gcd), 81 hhline(gói lệnh), 195
\ge(≥), 80 hiderotate, 219
\geq(≥), 80 hidescale, 219
\geqq(=), 87 hiresbb, 219, 221
\geqslant(>), 87 \hline, 172
\gets, 81 \hom(hom), 81
\gg(), 80 \hookleftarrow(←-), 81
346 LATEX Tra cứu và soạn thảo

\hookrightarrow(,→), 81 \jmath, 78
\hslash(}), 87 \jmath(), 83
\hspace, 48 \jot, 107
\hspace*, 48
\kappa(κ), 79
\idotsint( · · · ), 89
R R
keepaspectration, 221
ifthen(gói lệnh), 57 \ker(ker), 81
\ifthenelse, 57 keyword, 250
RRRR 153
\ignorespaces, \keywordsname, 42
\iiiint(RRR ), 88 \kill, 184, 191
\iiint(RR ), 88
\iint( ), 88 \l@example, 235
\Im(=), 83 \l@figure, 233
\imath, 78 \l@paragraph, 233
\imath(ı), 83 \l@section, 233
\in(∈), 80 \l@subparagraph, 233
in, 46 \l@subsection, 233
\include, 67 \l@subsubsection, 233
\includegraphics, 219, 220 \l@table, 233
\includeonly, 67 \l@type, 233
indentfirst(gói lệnh), 39 \label, 108, 148, 237
\index, 245 \labelenumi, 149
Index error: \labelitemi, 150
Argument ... too long, 249 \labelitemii, 150
Conflicting entries, 249 \labelitemiii, 150
Extra range..., 249 \labelitemiv, 150
Illegal null field, 249 \labelsep, 151, 152
Inconsistent page..., 249 \labelwidth, 152
Unmatched range closing, \Lambda(Λ), 79
249 \lambda(λ), 79
Unmatched range..., 249 \landscape, 24
\\indexentry, 250 landscape(môi trường), 24, 222
\indexname, 42 \langle(h), 84
\inf(inf), 81 \LaTeX, 13
\infty(∞), 83 LaTeX Error:
R 67
\input, ***NFSS release 1, 133
\int( ), 83 ... allowed only, 131
\intercal(|), 86 ... undefined., 124
\intertext, 110 Bad \line or \vector
\intextsep, 228 argument., 125
intlimits, 113 Bad math environment, 125
\iota(ι), 79 Can be used only, 125
\isodd, 58 Command ... already
\itemindent, 152 defined., 126
itemize(môi trường), 147, 150 Command ... invalid in,
\itemsep, 151 125
Danh mục từ khóa 347

Command ... not defined, Too many columns in, 129


131 Too many math, 133
Command ... not provided, Too many unprocessed, 129
132 Two \LoadClass, 131
Command ... undefined in Two \documentclass or, 131
encoding, 126 Undefined tab position.,
Counter too large., 126 129
Encoding scheme, 132 Unknown option, 131
Environment ... Unknown symbol font, 133
undefined., 126 \< in mid line., 124
File ’...’ not found, 126 \DeclareTextComposite
Float(s) lost., 126 used, 132
Font ... not found., 132 \LoadClass in, 130
Font family, 132 \RequirePackage or, 130
Illegal character in, 127 \begin{...} on input
LaTeX2e command ... in, line, 125
127 \include cannot be
Lonely \item --perhaps, nested., 127
127 \pushtabs and \poptabs,
Math alphabet identifier, 128
132 \usepackage before, 131
Math version ’...’, 132 \verb ended by end, 129
-exp in+, 127 \verb illegal in, 130
Missing \begin{document}, LaTeX Font Warning:
127 ***NFSS release 1, 142
Missing p-arg in, 127 Command ... invalid, 141
No \title given., 128 Command \tracingfonts, 142
No counter ’...’ defined, Encoding ’...’ has, 142
128 Font shape ’...’ in, 142
Not a command name, 133 Font shape ’...’, 142
Not in outer par, 128 LaTeX Warning:
Option clash for, 130 ’h’ float specifier, 138
Page height already, 128 Citation ’...’ on page,
Something’s wrong, 128 138
Suggested extra height, Citation ’...’ undefined,
128 138
Symbol font ’...’, 133 Command ... has, 138
Tab overflow., 129 File ’...’ already
The font size command, 133 exists, 140
There’s no line, 129 Float too large, 138
This NFSS system isn’t, Label ’...’ multiply, 139
133 Label(s) may have, 139
This file needs format, Marginpar on page, 139
131 No \author given, 139
This may be a LaTeX, 129 Optional argument, 139
Too deeply nested., 129 Oval too small, 139
348 LATEX Tra cứu và soạn thảo

Reference ’...’ on, 140 \lesseqqgtr(S), 87


Text page ... contains, \lessgtr(≶), 87
140 \lesssim(.), 87
There were ... labels, 140 letterpaper, 17
There were level, 250
...refrerences, 140 \lfloor(b), 84
Unused global option, 140 \lfoot, 29
Writing file ’...’, 141 \lg(lg), 81
You have requested class, \lhd(), 80
141 \lhead, 29
You have requested \lim(lim), 81
release ’...’, 141 \liminf(lim inf), 81
You have requested, on, \limsup(lim sup), 81
141 \line, 213
\oval, \circle, 139 \linewidth, 19
inputting ’...’ , 138 list(môi trường), 151
\LaTeX3, 14 \listfigurename, 42
latexsym(gói lệnh), 80 \listofexample, 235
\lceil(d), 84 \listoffigure, 236
\ldots(. . .), 89 \listoffigures, 231
\le(≤), 80 \listoftables, 231, 236
\leadsto(;), 81 \listparindent, 151
\left, 84 \listtablename, 42
\Leftarrow(⇐), 81 \ll(), 80
\leftarrow(←), 81 \llcorner(x), 85
\leftarrowtail(), 86 \Lleftarrow(W), 86
\leftharpoondown()), 81 \lll(≪), 87
\leftharpoonup((), 81 \ln(ln), 81
log
\leftleftarrows(⇔), 86
\lneq(6=), 88
\leftmargin, 151 \lneqq(), 88
\leftmark, 30 \lnsim(), 88
\Leftrightarrow(⇔), 81 \log(log), 81
\leftrightarrow(↔), 81 \Longleftarrow(⇐=), 81
\leftrightarrows(), 86 \longleftarrow(←−), 81
\leftrightharpoons( ), 86 \Longleftrightarrow(⇐⇒), 81
\leftrightsquigarrow(!), 86 \longleftrightarrow(←→), 81
\leftthreetimes(h), 86 \longmapsto(7−→), 81
legalpaper, 17 \Longrightarrow(=⇒), 81
\lengtest, 58 \longrightarrow(−→), 81
leqno, 18, 114 longtable(gói lệnh), 189
\leqq(5), 87 longtable(môi trường), 190
\leqslant(6), 87 \looparrowleft("), 86
\lessapprox(/), 87 \looparrowright(#), 86
\lessdot(l), 87 \lozenge(♦), 87
\lesseqgtr(Q), 87 \lrcorner(y), 85
Danh mục từ khóa 349

lscape(gói lệnh), 24, 222 minipage(gói lệnh), 165


\Lsh(), 86 minipage(môi trường), 71, 72
\LTcapwidth, 191, 192 \minitoc, 235
\LTchuksize, 191 minitoc(gói lệnh), 235
\LTchunksize, 192 minitocdepth, 235
\ltimes(n), 86 minitocoff(gói lệnh), 236
\LTleft, 191, 192 minus, 47
\LTpost, 191 mm, 46
\LTpre, 191 \mod( mod ), 83
\LTright, 191, 192 \models(|=), 80
\LTwidth, 192 monochrome, 224
\lvertneqq( ), 88 moreverb(gói lệnh), 161
\mp(∓), 80
\makeatletter, 19 mpfootnote, 50
\makeatother, 19 mpfootnote(số đếm), 165
\makebox, 68 mtcfont, 235
\makeglossary, 254 mtcindent, 235
makeidx(gói lệnh), 246 \m@th, 150
MakeIndex, 242 \mu(µ), 79
\mapsto(7→), 81 multibox(gói lệnh), 217
margin, 104 multicol(gói lệnh), 166
marginbreak, 104 multicols(môi trường), 166
\marginparpush, 21 \multicolsep, 167
\marginparwidth, 21 \multicolumn, 173
\markboth, 26 multiline(môi trường), 111
\markright, 26 \multimap((), 86
math(môi trường), 61 \multiput, 211
\mathbf, 76 \multirow, 196
\mathcal, 76 multirow(gói lệnh), 196
\mathindent, 18, 107 \multirowsetup, 197
\mathnormal, 76, 79 \multlinegap, 111
\mathop, 76 myheadings, 25
\mathrm, 76
\mathsf, 76 \nabla(∇), 83
\mathtt, 76 namelimits, 114
Matrix, 183 \natural(\), 83
matrix(môi trường), 94 \ncong(), 88
\max(max), 81 \nearrow(%), 81
MaxMatrixCols, 94 \neg(¬), 83
\mbox, 68, 82, 110 \neq(6=), 80
\measuredangle(]), 87 \newboolean, 59
\medskip, 49 \newcolumntype, 180
Metafont, 14 \newcommand, 52
\mho(0), 83, 87 \newcounter, 50
\mid(|), 80 \newenvironment, 63
\min(min), 81 \newlength, 48
350 LATEX Tra cứu và soạn thảo

\newpage, 31 \ntriangleleft(6), 88
\newsavebox, 69 \ntrianglelefteq(5), 88
\newtheorem, 102 \ntriangleright(7), 88
\nexists(@), 87 \ntrianglerighteq(4), 88
\ngeq(), 88 \nu(ν), 79
\ngeqq(), 88 \numberline, 232
\ngeqslant( ), 88 \NumberProgramstrue, 186
\ngtr(≯), 88 \numberwithin, 109
\ni(3), 80 \nutpar, 160
\nLeftarrow(:), 86 \nutshape, 160
\nleftarrow(8), 86 \nVDash(3), 88
\nLeftrightarrow(<), 86 \nvDash(2), 88
\nleftrightarrow(=), 86 \nvdash(0), 88
\nleq(), 88 \nwarrow(-), 81
\nleqq(), 88 \oddsidemargin, 20
\nleqslant(
), 88 \odot( H ), 80
\nless(≮), 88 \oint( ), 83
\nmid(-), 88 \Omega(Ω), 79
\node, 98 \omega(ω), 79
nodvipsname, 224 \ominus( ), 80
\noindent, 49 onecolumn, 17
nointlimits, 113 oneside, 18
nonamelimits, 114 openany, 18
\nopagebreak, 31 openbib, 18
\normalem, 156 openright, 18
\normalsize, 22 \operatorname, 82
nosumlimits, 113 \oplus(⊕), 80
\not, 59, 81 \or, 59
\notag, 108, 239 origin, 221
\notesname, 42 \oslash( ), 80
\notin(/∈), 81 \otimes(⊗), 80
notitlepage, 18 \oval, 215
\nparallel(∦), 88 \Ovalbox, 205
\nprec(⊀), 88 \ovalbox, 205
\npreceq(), 88 \overbrace, 79
\nRightarrow(;), 86 \overbrace(z}|{), 78
\nrightarrow(9), 86 \overleftarrow(← −), 78
\nshortmid(.), 88 \overline, 78
\nshortparallel(/), 88 \overline( ), 78
\nsim(), 88 \overrightarrow(− →), 78
\nsubseteq(*), 88 \overset, 93
\nsucc(), 88
\nsucceq(), 88 page, 50
\nsupseteq(+), 88 page_compositor, 251
\nsupseteqq(#), 88 \pagebreak, 31
Danh mục từ khóa 351

\pagename, 42 \posmulticols, 167


\pagenumbering, 26 postamble, 251
\pageref, 237, 240 \Pr(Pr), 81
\pagestyle, 25 preamble, 251
\paperheight, 21 \prec(≺), 80
\paperwidth, 21 \precapprox(w), 87
paragraph, 34, 50 \preccurlyeq(4), 87
\parallel(k), 80 \preceq(), 80
\parbox, 70, 72, 212 \precnapprox(), 88
\parindent, 31, 49 \precnsim(), 88
\parsep, 151 \precsim(-), 87
\parskip, 31, 47 \preffacename, 42
\part, 39 \prime(0), 83
part, 34, 50 \prod(∏), 83
\partial(∂), 83 program(gói lệnh), 186
\partname, 42 program(môi trường), 186
\partopsep, 151 programbox(môi trường), 186
pb-diagram(gói lệnh), 98 \proofname, 42
pc, 46 \propto(∝), 80
\p@enumi, 148 \protect, 234
\p@enumii, 148 \providecommand, 53
\p@enumiii, 148 \Psi(Ψ), 79
\p@enumiv, 148 \psi(ψ), 79
\permulticols, 167 \ps@style, 27
\perp(⊥), 80 pt, 46
\phantom, 48 \put, 211
\Phi(Φ), 79
\phi(φ), 79 \qquad, 48
\Pi(Π), 79 \quad, 48
\pi(π), 79 quotation(môi trường), 147
picture(môi trường), 209 quote, 251
pincipar(gói lệnh), 158 quote(môi trường), 146
\pitchfork(t), 87
plain, 25, 104 raggedright(môi trường), 146
\plainfootrulewidth, 29 \raisebox, 70
\plainheadrulewidth, 29 \raisetag, 109
plus, 47 range_close, 250
\pm(±), 80 range_open, 250
Pmatrix, 183 \rangle(i), 84
pmatrix(môi trường), 94 \rceil(e), 84
\pmb, 75 \rcomment, 186
\pmod( (mod )), 83 \Re(<), 83
\pod( ()), 83 \ref, 108, 148, 237
portland(gói lệnh), 24 \reflectbox, 220
\portrait, 24 \refname, 42
portrait(môi trường), 24 \refstepcounter, 40, 51
352 LATEX Tra cứu và soạn thảo

\reftextafter, 241 \sec(sec), 81


\reftextbefore, 241 \secdef, 36, 39
\reftexxtcurrent, 241 secnumdepth, 34
\renewcommand, 52 section, 34, 50
\renewenvironment, 63 \sectionmark, 31
reqno, 114 \setboolean, 59
\resizebox, 220 \setcounter, 50
\rfloor(c), 84 \setlength, 46
\rfoot, 29 \setlongtables, 190
\rhd(), 80 \setmarginsrb, 23
rhead, 29 \setminus(\), 80
\rho(ρ), 79 setpage_prefix, 251
\right, 84 setpage_suffix, 251
\Rightarrow(⇒), 81 \setpapersize, 23
\rightarrow(→), 81 setspace(gói lệnh), 157
\rightarrowtail(), 86 \settodepth, 48
\rightharpoondown(+), 81 \settoheight, 48
\rightharpoonup(*), 81 \settowidth, 47
\rightleftarrows(), 86 shadow(gói lệnh), 204
\rightleftharpoons(
), 81, 86 \shadowbox, 205
\rightmargin, 151 \shadowsize, 205
\rightmark, 30 \shapepar, 159
\rightrightarrows(⇒), 86 shapepar(gói lệnh), 159
\rightsquigarrow( ), 86 \sharp(]), 83
\rightthreetimes(i), 86 \shavox, 204
\risingdotseq(:), 87 \shortmid(p), 87
\Roman, 26, 51 \shortparallel(q), 87
\roman, 26, 51 \shortstack, 159
rotate(môi trường), 222 \sideset, 93
\rotatebox, 220 sideways(môi trường), 222
rotating(gói lệnh), 222 \Sigma(Σ), 79
\Rsh(), 86 \sigma(σ), 79
\rtimes(o), 86 \sim(∼), 80
\rule, 46 \simeq('), 80
\sin(sin), 81
\sAppendix, 40 \sinh(sinh), 81
\savebox, 69 \smallfrown(a), 87
\sbox, 69 smallmatrix(môi trường), 95
\sboxrule, 204 \smallsetminus(r), 86
\sboxsep, 204 \smallskip, 49
scale, 220 \smallsmile(`), 87
\scalebox, 219 \smile(^), 80
\scriptscriptstyle, 90 \sout, 156
\scriptstyle, 90 sp, 46
\sdim, 204 spacing, 157
\searrow(&), 81 \spadesuit(♠), 83
Danh mục từ khóa 353

\special, 202 \supseteqq(k), 87


\sphericalangle(^), 87 \supsetneq()), 88
split(môi trường), 112 \supsetneqq(
√ %), 88
\sqcap(u), 80 \surd( ), 83
\sqcup(t), 80 \swarrow(.), 81

\sqrt( ), 78
√ tabbing(môi trường), 184
\sqrt[n]( n ), 78
\tabcolsep, 174, 198
\sqsubset(<), 80, 87
table, 50
\sqsupset(=), 87
\tablecaption, 188
\sqsupseteq(w), 80
\tablefirsthead, 187
\square(), 87 \tablehead, 187
\squarepar, 160 \tablelasttail, 187
\squareshape, 160 \tablename, 42
\starpar, 160 \tableofcontents, 231
\starshape, 160 \tabletail, 187
\stepcounter, 50 tabstop, 162
\strackrel, 92 tabular, 171
subequations(môi trường), 239 tabular*, 171
\subjclassname, 42 tabularx(gói lệnh), 180
subparagraph, 34, 50 tabwindow(môi trường), 158
subsection, 34, 50 \tag*, 108
\Subset(b), 87 \tag, 108, 239
\subset(⊂), 80 \tag*, 239
\subseteq(⊆), 80 \tan(tan), 81
\subseteqq(j), 87 \tanh(tanh), 81
\subsetneq((), 88 \tau(τ), 79
\subsetneqq($), 88 \tbinom, 91
subsubsection, 34, 50 tbtags, 113
\succ(), 80 \TeX, 14
\succapprox(v), 87 TeX Error:
\succcurlyeq(<), 87 Counter too large, 134
\succeq(), 80 Double subscript, 134
\succnapprox(), 88 Double superscript, 134
\succnsim(), 88 Extra alignment, 134
\succsim(%), 87 Font...not loaded, 134
\sum(∑), 83 I can’t find, 135
sumlimits, 113 Illegal parameter, 135
\sup(sup), 81 Illegal unit of, 135
supertabular(gói lệnh), 187 Misplaced alignment, 135
supertabular(môi trường), 187 Missing inserted, 136
supertabular*(môi trường), 188 Missing $ inserted, 136
\suppressfloats, 227 Missing control, 135
\Supset(c), 87 Missing number, 135
\supset(⊃), 80 Not a letter, 136
\supseteq(⊇), 80 Paragraph ended, 136
354 LATEX Tra cứu và soạn thảo

Tex capacity, 136 threeparttable(gói lệnh), 199


Text line contains, 137 \tilde(˜), 78
Undefined control, 137 \times(×), 80
Use of ... doesn’t, 137 titlepage, 18
You can’t use, 137 \to(→), 81
or forgotten $., 134 \tocname, 42
TeX Warning: \top(>), 83
Overfull \hbox ..., 143 \topcaption, 187
Overfull \vbox ..., 143 \topfigrule, 229
Underfull \hbox ..., 143 \topfraction, 228
Underfull \vbox ..., 144 \topmargin, 21
\text, 75, 82 topnumber, 227
\textfloatsep, 228 \topsep, 108, 151
\textfraction, 228 \topskip, 22
\textheight, 19 \totalheight, 69
\textstyle, 90 totalheight, 220
\textwidth, 19 totalnumber, 227
\tfrac, 91 tracingmulticols(số đếm), 169
\tg(tg), 82 trees(gói lệnh), 217
\the, 35, 51 \triangle(4), 83
\thechapter, 35 \triangledown(O), 87
\theenumi, 148 \trianglelefteq(E), 87
\theenumii, 148 \triangleq(,), 87
\theenumiii, 148 \triangleright(.), 80
\theenumiv, 148 \trianglerighteq(D), 87
\theequation, 109 trim, 221
\thefootnote, 56, 165, 199 true, 47, 59
theglossary(môi trường), 255 turn(môi trường), 222
theindex(môi trường), 244, 255 \turnbox, 222
\thempfootnote, 165, 199 twocolumn, 17
theorem(gói lệnh), 103 \twoheadleftarrow(), 86
\theorembodyfont, 104 \twoheadrightarrow(), 86
\theoremheaderfont, 105 twoside, 18
\theoremstyle, 104
\thepart, 35 \ulcorner(p), 85
\therefore(∴), 87 ulem(gói lệnh), 156
\thesection, 35 \ULforem, 156
\thesubsection, 35 \uline, 156
\thesubsubsection, 35 unbalance(số đếm), 168
\Theta(Θ), 79 \unboldmath, 77
\theta(θ), 79 \underbrace, 79
\thickapprox(≈), 87 \underbrace(|{z}), 78
\thicklines, 205
\thicksim(∼), 87 \underleftarrow( ), 78
←−
\thinlines, 205 \underline, 78
\thispagestyle, 25 \underline( ), 78
Danh mục từ khóa 355

\underrightarrow( ), 78 \vee(∨), 80


\underset, 93 \veebar(Y), 86
\unlhd(), 80 verbatim(gói lệnh), 161
\unskip, 153 verbatim(môi trường), 160
\Uparrow(⇑), 81, 84 verbatimtab(môi trường), 161
\uparrow(↑), 81, 84 verbatimwrite(môi trường), 161,
\Updownarrow(m), 81, 84 163
\updownarrow(l), 81, 84 verse(môi trường), 147
\upharpoonleft(), 86 \vfill, 49
\upharpoonright(), 86 viewport, 221
\uplus(]), 80 \vline, 173
\Upsilon(Υ), 79 Vmatrix(môi trường), 94
\upsilon(υ), 79 vmatrix(môi trường), 94
\upuparrows(), 86 vpage(gói lệnh), 22
\urcorner(q), 85 \vpageref, 240
\usebox, 70 \vref, 240
\usecounter, 155 \vspace, 49
usenames, 224 \vspace*, 49
\usepackage, 17 \Vvdash(), 87
\uwave, 156 \whiledo, 57
\widehat( b ), 78
\vadjust, 159 \widetilde( e ), 78
\value, 51 \width, 69
\varepsilon(ε), 79 width, 220
varioref(gói lệnh), 240 window(môi trường), 158
\varkappa(κ ), 85 \wp(wp), 83
\varnothing(∅), 87 \wr(o), 80
\varphi(ϕ), 79
\varpi(v), 79 \Xi(Ξ), 79
\varpropto(∝), 87 \xi(ξ), 79
\varrho($), 79 \xout, 156
\varsigma(ς), 79 xr(gói lệnh), 241
\varsubsetneqq(&), 88 \xspace, 157
\varsupsetneq(!), 88 xspace(gói lệnh), 157
\varsupsetneqq('), 88
\vartheta(ϑ), 79 \zeta(ζ), 79
\vartriangle(M), 87
\vartriangleleft(C), 87
\vartriangleright(B), 87
\Vdash( ), 87
\vDash(), 87
\vdash(`), 80
.
\vdots(..), 89
→), 78
\vec(−
\vector, 215
356 LATEX Tra cứu và soạn thảo

You might also like