Cách ít lỗi nhất là lưu tệp ở mã UTF-8, biên dịch bằng XeLaTeX hoặc LuaLaTeX, dùng gói fontspec với một phông có đủ chữ tiếng Việt và gói babel với tuỳ chọn vietnamese. Nếu mẫu bắt buộc pdfLaTeX, dùng bảng mã T5 của bộ vntex.
Phần lớn lỗi dấu tiếng Việt trong LaTeX không do LaTeX mà do ba thứ quanh nó: bộ gõ sinh ký tự tổ hợp, phông chữ thiếu dấu, hoặc chọn nhầm trình biên dịch so với phần đầu tệp. Bài này cho phần đầu tệp mẫu cho từng trường hợp và cách đọc thông báo lỗi.
Nên biên dịch bằng XeLaTeX, LuaLaTeX hay pdfLaTeX?
Ba trình biên dịch đều in được tiếng Việt, khác nhau ở cách xử lý phông và mức tương thích với mẫu của nhà xuất bản.
| Trình biên dịch | Phông chữ | Hợp khi | Điểm cần lưu ý |
|---|---|---|---|
| XeLaTeX | Dùng phông OpenType, TrueType có trong hệ thống qua fontspec | Luận án, giáo trình, tài liệu tiếng Việt là chính | Một số mẫu của nhà xuất bản không chạy được |
| LuaLaTeX | Như XeLaTeX, thêm khả năng lập trình bằng Lua | Như XeLaTeX; tài liệu lớn, nhiều tuỳ biến | Biên dịch chậm hơn pdfLaTeX |
| pdfLaTeX | Phông Type 1 theo bảng mã, tiếng Việt cần bảng mã T5 | Bài nộp tạp chí mà mẫu chỉ hỗ trợ pdfLaTeX | Ít lựa chọn phông có dấu tiếng Việt |
Trên Overleaf, trình biên dịch chọn trong phần thiết lập (Settings) của dự án, mục Compiler. Chọn sai trình biên dịch so với phần đầu tệp là lỗi phổ biến nhất: tệp dùng fontspec mà biên dịch bằng pdfLaTeX sẽ dừng ngay với thông báo gói này cần XeTeX hoặc LuaTeX.
Phần đầu tệp mẫu cho từng trường hợp
XeLaTeX hoặc LuaLaTeX
Đây là cách nên dùng cho tài liệu tiếng Việt là chính:
\documentclass[12pt]{article}\usepackage{fontspec}\setmainfont{TeX Gyre Termes}\usepackage[vietnamese]{babel}
TeX Gyre Termes là phông kiểu Times có sẵn trong TeX Live và trên Overleaf, có đủ chữ tiếng Việt. Muốn dùng phông khác, đổi tên trong \setmainfont; trước đó kiểm phông có đủ dấu theo cách ở mục sau.
pdfLaTeX
Khi mẫu bắt buộc pdfLaTeX, phần đầu tối thiểu là:
\usepackage[T5]{fontenc}\usepackage[utf8]{inputenc}\usepackage[vietnamese]{babel}
Bảng mã T5 do bộ vntex cung cấp, có trong TeX Live đầy đủ và trên Overleaf. Từ năm 2018 LaTeX mặc định đọc tệp nguồn là UTF-8 nên dòng inputenc không còn bắt buộc, nhưng giữ lại cũng không hại và giúp tệp chạy với bản TeX cũ. Phông mặc định khi dùng T5 là phông Computer Modern có dấu của vntex.
Tài liệu song ngữ
Nếu bài chủ yếu tiếng Anh, chỉ có tên riêng hoặc vài đoạn tiếng Việt, khai cả hai ngôn ngữ, ngôn ngữ chính đặt cuối: \usepackage[vietnamese,english]{babel}. Đoạn tiếng Việt bọc trong môi trường otherlanguage với tham số vietnamese để tiêu đề tự sinh và quy tắc ngắt dòng đổi theo.
Bộ gõ: chọn Unicode dựng sẵn, không chọn tổ hợp
Bộ gõ tiếng Việt như Unikey, EVKey có hai kiểu Unicode: dựng sẵn (mỗi chữ có dấu là một ký tự) và tổ hợp (chữ cái gốc cộng ký tự dấu đứng riêng). LaTeX với bảng mã T5 chỉ xử lý dạng dựng sẵn; XeLaTeX xử lý được dạng tổ hợp nhưng dấu có thể đặt lệch hoặc chồng lên nhau tuỳ phông. Đặt bộ gõ ở bảng mã Unicode (dựng sẵn) là xong phần lớn vấn đề.
Văn bản dán từ PDF, từ trang web hoặc từ tên tệp trên máy Mac đôi khi ở dạng tổ hợp dù bạn không gõ. Dấu hiệu nhận biết: chữ trông đúng trong trình soạn nhưng biên dịch ra dấu lệch, hoặc tìm kiếm chữ đó trong tệp không ra. Cách sửa là chuẩn hoá văn bản về dạng NFC; nhiều trình soạn có lệnh này, hoặc dùng chức năng chuyển mã của Unikey cho đoạn văn đã dán.
Kiểm phông có đủ chữ tiếng Việt trước khi dùng
Vì sao phải kiểm
Phông đẹp trên Word chưa chắc có đủ các chữ như ẳ, ỡ, ự. Với XeLaTeX, thiếu chữ không làm biên dịch dừng: chữ thiếu chỉ biến mất khỏi PDF, và nhật ký ghi một dòng cảnh báo dễ bị bỏ qua. Bạn có thể nộp bài mà mất chữ không hay.
Cách kiểm
Biên dịch một trang thử có câu chứa đủ nguyên âm có dấu, ví dụ một đoạn ngắn gồm các chữ ă, â, ê, ô, ơ, ư, đ với đủ năm dấu. Sau đó mở tệp nhật ký (log) và tìm cụm Missing character. Không có dòng nào là phông đạt. Trên Overleaf, xem nhật ký đầy đủ qua nút xem log thô (raw logs) cạnh nút biên dịch.
Phông nên thử
Các phông có sẵn trong TeX Live như họ TeX Gyre (Termes, Pagella, Heros), Libertinus, và họ Noto đều có tiếng Việt. Phông thương mại cài trên máy cá nhân dùng được với XeLaTeX cài tại máy, nhưng Overleaf không có những phông đó trừ khi bạn tải tệp phông lên dự án và được phép về bản quyền.
Thông báo lỗi hay gặp và cách sửa
| Thông báo hoặc hiện tượng | Nguyên nhân thường gặp | Cách sửa |
|---|---|---|
Unicode character ... not set up for use with LaTeX | Biên dịch pdfLaTeX mà thiếu bảng mã T5 | Thêm \usepackage[T5]{fontenc} hoặc chuyển sang XeLaTeX |
Missing character: There is no ... in font ... | Phông đang dùng thiếu chữ tiếng Việt | Đổi phông có đủ chữ, kiểm lại bằng trang thử |
Gói fontspec báo cần XeTeX hoặc LuaTeX | Trình biên dịch đang là pdfLaTeX | Đổi Compiler sang XeLaTeX hoặc LuaLaTeX |
| Dấu lệch, chồng lên chữ | Văn bản ở dạng Unicode tổ hợp | Chuẩn hoá về dạng dựng sẵn (NFC) |
| Tiêu đề tự sinh vẫn là Contents, Chapter | Thiếu babel tiếng Việt hoặc ngôn ngữ chính đặt sai | Khai vietnamese và đặt ngôn ngữ chính ở cuối danh sách |
| Chữ có dấu trong tài liệu tham khảo bị hỏng | BibTeX cổ điển xử lý UTF-8 kém | Dùng biblatex với biber |
Những việc không cần làm nữa
Không cần gõ dấu bằng lệnh. Cách viết kiểu dùng lệnh dấu cho từng chữ là di sản từ thời chưa có UTF-8; nó làm tệp nguồn khó đọc, khó sửa và không cần thiết với các bản TeX hiện nay.
Không cần các bảng mã cũ như VISCII hay TCVN3. Tệp nguồn nên luôn là UTF-8. Nếu nhận tài liệu cũ ở bảng mã khác, chuyển mã một lần rồi lưu lại ở UTF-8.
Không cần cài thêm gói tiếng Việt trên Overleaf. Overleaf có sẵn TeX Live đầy đủ, gồm vntex, babel tiếng Việt và các phông TeX Gyre; chỉ cần khai trong phần đầu tệp.
Khoảng trắng, dấu ngoặc kép và ngắt dòng trong văn bản Việt
Tiếng Việt viết theo âm tiết cách nhau bằng khoảng trắng, nên LaTeX gần như luôn ngắt dòng ở khoảng trắng và hiếm khi phải ngắt giữa âm tiết. Nếu thấy một âm tiết bị cắt đôi bằng gạch nối ở cuối dòng, kiểm lại ngôn ngữ chính đã khai đúng tiếng Việt chưa; khai sai ngôn ngữ thì LaTeX áp quy tắc ngắt từ của tiếng Anh lên chữ Việt.
Giữa số và đơn vị, giữa chữ “Hình”, “Bảng” và số thứ tự, dùng dấu ngã ~ (khoảng trắng không ngắt) để hai phần không bị tách ra hai dòng: Hình~\ref{fig:a}, 25~kg. Với XeLaTeX và LuaLaTeX, dấu ngoặc kép cong “ ” gõ thẳng từ bàn phím là được; với pdfLaTeX, cách quen thuộc là gõ hai dấu huyền mở và hai dấu nháy đơn đóng, LaTeX sẽ in thành ngoặc kép cong.
Tình huống: giáo trình cũ soạn bằng phông TCVN3 cần đưa sang LaTeX
Một bộ môn muốn chuyển giáo trình soạn từ lâu trên Word với phông .VnTime sang LaTeX. Dán thẳng văn bản vào trình soạn sẽ ra chuỗi ký tự lạ, vì văn bản lưu theo bảng mã TCVN3 chứ không phải Unicode. Bước đầu tiên là chuyển mã toàn bộ tài liệu trên Word sang Unicode dựng sẵn bằng công cụ chuyển mã của bộ gõ (ví dụ chức năng chuyển mã của Unikey, chọn bảng mã nguồn TCVN3 và bảng mã đích Unicode), lưu thành bản mới, kiểm vài trang, rồi mới đưa sang LaTeX.
Công thức toán soạn bằng công cụ của Word không chuyển tự động được; phải gõ lại bằng cú pháp LaTeX hoặc dùng công cụ chuyển đổi rồi soát từng công thức. Kế hoạch thực tế là chuyển phần chữ trước, gõ lại công thức theo từng chương, và giữ bản Word gốc để đối chiếu.
Trình tự kiểm một dự án mới trong năm phút
Trước khi viết chương đầu tiên, chạy đủ năm bước để không phát hiện lỗi dấu khi đã viết hàng chục trang:
- Đặt trình biên dịch khớp với phần đầu tệp (XeLaTeX nếu dùng
fontspec). - Biên dịch một trang thử chứa đủ nguyên âm có dấu, chữ đ, chữ in hoa có dấu.
- Tìm
Missing charactertrong nhật ký; không có thì phông đạt. - Chèn thử một trích dẫn tài liệu tiếng Việt có tên tác giả có dấu, biên dịch cả phần tài liệu tham khảo.
- Sao chép một đoạn từ PDF ra trình soạn văn bản; chữ dán ra đúng dấu nghĩa là PDF tìm kiếm được.
Câu hỏi thường gặp
Overleaf có hỗ trợ tiếng Việt không?
Có. Overleaf chạy TeX Live đầy đủ, gồm bộ vntex, babel tiếng Việt và nhiều phông có dấu. Bạn chỉ cần khai phần đầu tệp đúng và chọn trình biên dịch tương ứng trong phần thiết lập của dự án.
Có dùng được Times New Roman trong LaTeX không?
Được, với XeLaTeX hoặc LuaLaTeX cài trên máy có phông Times New Roman, qua lệnh setmainfont. Trên Overleaf, phông này không có sẵn; TeX Gyre Termes là phông kiểu Times có đủ chữ tiếng Việt và thường được dùng thay.
Bài nộp tạp chí quốc tế có tên tác giả tiếng Việt thì dùng cách nào?
Giữ đúng trình biên dịch mà mẫu của tạp chí yêu cầu, thường là pdfLaTeX. Thêm bảng mã T5 nếu mẫu cho phép thêm gói; nếu không, hỏi toà soạn cách họ xử lý ký tự đặc biệt trong tên.
Vì sao PDF xuất ra không tìm được chữ tiếng Việt?
Thường do văn bản nguồn ở dạng Unicode tổ hợp, hoặc phông thiếu bảng ánh xạ ký tự. Chuẩn hoá văn bản về dạng dựng sẵn và dùng phông OpenType có đủ chữ với XeLaTeX là khắc phục được phần lớn trường hợp.
Có cần gói vietnam nếu đã dùng babel?
Với pdfLaTeX, babel tiếng Việt kết hợp bảng mã T5 là đủ cho hầu hết tài liệu; gói vietnam của vntex là một cách khai khác cho cùng mục đích. Với XeLaTeX và LuaLaTeX thì không cần gói vietnam.