Professional Documents
Culture Documents
LATEX
VỚI GÓI LỆNH
VÀ PHẦN MỀM CÔNG CỤ
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
7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
1.1 Giá trị mặc định cho thông số trang văn bản . . . . . . . . . . 21
1.2 Tên trong LATEX . . . . . . . . . . . . . . . . . . . . . . . . . . 42
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.
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.
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.
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
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
• 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.
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.
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.
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ú
\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.
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
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ú
là
\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.
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.
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:
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.
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:
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.
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.
Trang Trang
lẻ 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
\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:
Trang Trang
lẻ chẵn
\thepage \thepage
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
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
Lệnh trong các lớp văn bản này được phân theo thứ bậc như sau:
Những lệnh cho các đoạn tự động thực hiện một trong các thao tác:
Tất cả việc thực hiện trên được thể hiện trong bảng
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}.
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.
<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.
<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
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.
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
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.
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.
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
của LATEX.
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
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
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
• 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.
2.2. Số đếm
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.
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:
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
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ả.
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.
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:
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
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 .
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
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
\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
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.}
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}.
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.
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
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}}
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.
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
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
\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.
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
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.
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.
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.
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ũ
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
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 .
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.
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
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}\]
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
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
7 8 : 2
\[\overline{\overline{a}^2+\underline{xy}
+\overline{\overline{z}}}\] a2 + xy + z
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 }
αβγ
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
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
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)
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)}\]
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 (θ )
∑ ∑ \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
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
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
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
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.\]
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
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
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
≮ \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
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}$$
\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
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}$$
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
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
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
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
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}\]
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}\]
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}\]
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}\] Γ ∆
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
1α
A −−−→ B −−−→ C
β2
x
ρ1 y
ρ2 ρ3
y
γ3
D ←−−− E −−−→ F
δ4
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
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
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>}
<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
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)
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.
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
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
7 8
\begin{hequa}
106 Chương 3. Văn bản toán học
: 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
7 8
\begin{goiy}
Nội dung không in nghiêng, môi trường \verb!goiy!.
\end{goiy}
: 2
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
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.
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.
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.
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.
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
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
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)
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)
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}
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
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
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.
R
chọn là mặc định trong gói lệnh này:
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
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
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
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
R
chúng ta nhấn một trong các phím sau:
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.
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.
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
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.
? _
& %
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}.
l.9 \end{itemize}
? _
& %
4.2. Các loại lỗi điển hình trong LATEX 123
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 }.
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.
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
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
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ú.
’...’
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.
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.
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
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
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.
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.
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.
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
Đ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
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
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
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}
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
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}.
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
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
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
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
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
\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]
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
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
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
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Ú Ý 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
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ẻ}}
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
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
7 8 : 2
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
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
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ả.
7 8 : 2
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}
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.
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}
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}
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}
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
\@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.
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
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}
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
• 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.
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
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
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
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ó 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
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
<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
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à
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
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.
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.
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
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
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.
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
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.
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}$$
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
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
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
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
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}
R
Những lệnh mới trong môi trường supertabular gồm:
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.
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
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
R
sách bảng.
\newpage cho phép ngắt trang và bảng tại đây.
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
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à ==#==#==#.
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.
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
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*}
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
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
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:
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.
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.
\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)
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).
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ẽ
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$}$$
α+β+γ = π
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:
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.
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)
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í:
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ẽ
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}
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ẽ
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}
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ẽ
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 8 : 2
\begin{center}
\includegraphics{hoa}
\end{center}
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}}}
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.
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ẽ
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}{%
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.
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.
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
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.
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ố.
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.
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
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.
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
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.
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
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.
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}}
R
Những lệnh thông số của gói lệnh này được tóm tắt như sau:
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.
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.
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}
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}).
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}.
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}}
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}.
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
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.
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
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
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 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 (")
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
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.
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.
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
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
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
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
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.
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
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
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ụ
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.
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}
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.
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
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.
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.
\begin{document}
\chapter{Sử dụng gói lệnh index}
Chương 1
Sử dụng gói lệnh index
Thích Ca, 1
& %
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.
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
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.
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.
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
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.
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
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.
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.
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):
• 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:
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:
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:
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
đượ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.
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
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
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.
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
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.
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.
để 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.
−
→
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
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 đó:
Đặ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.
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.
đâ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.
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
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
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
R
hiện trên màn hình lật để lựa chọn và cài đặt:
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.
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.
thành tệp *.dvi hiện trên màn hình cho ta đánh giá.
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
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ẽ
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ẽ.
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.
Trên Menu Edit còn một số chức năng chỉnh sửa quan trọng sau:
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.
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.
Để 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.
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
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
Đâ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}
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/.
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.
• Đố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.
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
\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
\noindent {\bf Câu 4.} Đánh số trang và làm tiêu đề chạy ở trên
và
ở 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.
\big(\int_{\partial B(x,\epsilon)}udS\big)dr.
\end{align*}
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 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
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}
\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ư}
\end{letter}
\end{document}
: 2
20/01/2004
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
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ư
Cũng như một văn bản bình thường khác cấu trúc của lớp slides
là
\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à
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
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.
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
Meaningful precept.
& %
& %
' '
$ $
• tell me • tell me
& %
& %
316 Chương 12. Các lớp văn bản
\setlength{\parsep}{0pt}
\let\makelabel\descriptionlabel }}
{\endlist}
\makeatother
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
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
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
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
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
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
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 ữ ử ự ỳ ý
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 ú û ü ý þ
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 ú û ü ý þ
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
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
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
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
[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
\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
\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
\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
\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