Trang nhà
Diễn đàn
Diễn đàn
hành động:
thực hiện cho box:
* 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:
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:
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:
* Như đã nói, đây chỉ là "bare". Còn cả ngày để mình nói về \def
"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.
\def\dh{Đại học Sư Phạm}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:
\let\dh\abcKhi đó, 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 % hoặc \let\up=\MakeUppercase
\up {ánh nắng} % cho ra ÁNH NẮNG
* Như đã nói, đây chỉ là "bare". Còn cả ngày để mình nói về \def
hoangoclan:
Cảm ơn bác kyanh rất nhiều, bây giờ thì mọi thứ đã rõ rùi, em sẽ tìm hiểu thêm thông tin trên internet.
Tìm đâu cho xa?Cảm ơn bác kyanh rất nhiều, bây giờ thì mọi thứ đã rõ rùi, em sẽ tìm hiểu thêm thông tin trên internet.
root://component/option,com_simpleboard … /catid,16/
Ai bảo \def chỉ dành cho những ai quan tâm đến lập trình trong TeX not LaTeX.
Nếu bạn muộn biết \def để làm gì thì sẽ tìm thấy ngay câu trả lời: Open and peruse:
\texmf\tex\latex\base\latex.ltx
Bạn sẽ biết được ít ra là vài hay vài chục tác dụng của \def ngay ấy mà. Nhưng thường nhất vẫn là \define.
Nếu bạn muộn biết \def để làm gì thì sẽ tìm thấy ngay câu trả lời: Open and peruse:
\texmf\tex\latex\base\latex.ltx
Bạn sẽ biết được ít ra là vài hay vài chục tác dụng của \def ngay ấy mà. Nhưng thường nhất vẫn là \define.
Long Phan:
Ai bảo \def chỉ dành cho những ai quan tâm đến lập trình trong TeX not LaTeX.
Nếu bạn muộn biết \def để làm gì thì sẽ tìm thấy ngay câu trả lời: Open and peruse:
\texmf\tex\latex\base\latex.ltx
Bạn sẽ biết được ít ra là vài hay vài chục tác dụng của \def ngay ấy mà. Nhưng thường nhất vẫn là \define.

Từ trước tới giờ, mình đã dùng \def để định nghĩa các từ muốn gỏ tắt và nói chung là tốt cả, ví dụ \def\tp{topological space} thì trong văn bản chỉ cẫn gõ \tp \ là được. Nhưng giả sử mình dung \def để định nghĩa lại lệnh thì không thành công. Ví dụ như nếu mình định nghĩa lại lệnh phân số như thế này \def\ps{\dfrac} và trong văn bản, mình dùng là $\ps{1}{2}$ hoặc $\ps12$ đều báo lỗi. Các bạn có thể cho mình biết lý do không? Và hơn nữa, nếu muốn định nghĩa lại lệnh thì làm thế nào? Cảm ơn các bạn Ai bảo \def chỉ dành cho những ai quan tâm đến lập trình trong TeX not LaTeX.
Nếu bạn muộn biết \def để làm gì thì sẽ tìm thấy ngay câu trả lời: Open and peruse:
\texmf\tex\latex\base\latex.ltx
Bạn sẽ biết được ít ra là vài hay vài chục tác dụng của \def ngay ấy mà. Nhưng thường nhất vẫn là \define.
Ví dụ như nếu mình định nghĩa lại lệnh phân số như thế này \def\ps{\dfrac} và trong văn bản, mình dùng là $\ps{1}{2}$ hoặc $\ps12$ đều báo lỗi. Các bạn có thể cho mình biết lý do không? Và hơn nữa, nếu muốn định nghĩa lại lệnh thì làm thế nào?
Chà, mình kô đọc kỹ bài của bác. Bác muốn như vậy không phải là định nghĩa lại lệnh, mà là định nghĩa lệnh mới * Xem lại bài trước: định nghĩa lệnh không có tham số
* Giả sử ta muốn định nghĩa lệnh \phanso, nhận hai tham số. Làm như sau:
\def\phanso#1#2{đây là tham số #1, đây là tham số #2}* ...
Cuong12giaitich:
...giả sử mình dung \def để định nghĩa lại lệnh thì không thành công. Ví dụ như nếu mình định nghĩa lại lệnh phân số như thế này \def\ps{\dfrac} và trong văn bản, mình dùng là $\ps{1}{2}$ hoặc $\ps12$ đều báo lỗi...
Lâu ngày đọc lại... bị lỗi vì lệnh \dfrac chỉ có trong gói amsmath. Nếu dùng như sau thì không bị lỗi gì cả...giả sử mình dung \def để định nghĩa lại lệnh thì không thành công. Ví dụ như nếu mình định nghĩa lại lệnh phân số như thế này \def\ps{\dfrac} và trong văn bản, mình dùng là $\ps{1}{2}$ hoặc $\ps12$ đều báo lỗi...
%\usepackage{amsmath}
\def\ps{\dfrac}
...
$\ps12$ % không bị lỗi nhé ;)