id =
521, parent = 0, thread =
521, catid =
24, locked = 0, moved = 0,
userid =
kyanh, ip = 222.252.246.68, time = 2005/12/15 (1134645258) ,
subject =
\\def là gì (phần 1, bare), hits = 6319, karma = 0+0-,
* Gọi là phần 1, vì nói về
\def thì nó cả ngày vẫn chưa hết!
"bare" để chỉ các macro không có tham số
*
\def dùng để định nghĩa một macro mới. Cũng giống như
\newcommand. Nhưng
\def bỏ qua hoàn toàn lệnh trước đó, còn
\newcommand thì sẽ báo lỗi khi lệnh đã có rồi (khi ấy, phải dùng
\renewcommand). Người dùng
\LaTeX được khuyến cáo dùng
\newcommand thay vì
\def, nhưng thường thì ta dùng
\def cho nhanh. Mỗi cái có ưu và nhược điểm riêng.
Với mã trên, ta có một macro mới, gọi là
\dh. Mỗi lần gọi
\dh\ (chú ý có \ theo sau), ta có ngay chuỗi "Đại học Sư Phạm". Việc dùng \ theo sau là rất quan trọng. Nếu dùng
\dh XXX thì sẽ có "Đại học Sư PhamXXX", trong khi
\dh\ XX mới bảo đảm kết quả "Đại học Sư Pham XX".
Nếu dùng
\newcommand:
\providecommand\dh{Đại học Sư Phạm}Lệnh
\providecommand sẽ định nghĩa mới nếu
\dh chưa có. Ngược lại, nếu
\dh đã có rồi, thì lệnh trên sẽ bị bỏ qua.
Như vậy, dùng
\def\dh sẽ chắc chắn bạn thu được kết quả như ý bạn.
* Để khắc phục chuyện phải dùng \ đằng sau mỗi lệnh, ta có thể dùng gói xspace:
\usepackage{xspace}
\def\dh{Đại học Sư Phạm\xspace}Bây giờ thì
\dh XXX thì sẽ có "Đại học Sư Phạm XX". Tại sao? Lệnh
\xspace của gói xspace giúp bạn detect phần theo sau lệnh!
* Để kết thúc bài viết, xin nêu ra đây một dạng định nghĩa dùng
\let: Giả sử ta đã có macro
\abc. Ta cho nó một tên mới như sau:
Khi đó, dùng
\dh cũng như dùng
\abc. Nói "cho một cái tên mới" thực ra không chính xác, vì: sau lệnh trên, nếu ta định nghĩa lại
\abc, thì
\dh vẫn có tác dụng của
\abc cũ. Áp dụng kỹ thuật này để định nghĩa lại các macro mà vẫn sử dụng một phần của engine cũ. Xem ví dụ trong gói lyk,
http://download.viettug.org/mirror1.php?files=lyk-Các bạn dùng bảng mã TCVN3 đều (phải) biết ví dụ sau để tạo các ký tự hoa:
\let\up\MakeUppercase
\up {ánh nắng}
* Như đã nói, đây chỉ là "bare". Còn cả ngày để mình nói về
\def