Bài học 15

Lỗi

Bài này sẽ giới thiệu các lỗi biên dịch thường gặp nhất khi sử dụng LaTeX, cũng như cách giải quyết chúng.

Không giống như các hệ thống xử lý văn bản thường gặp khác, LaTeX có một chu trình ‘Sửa/Biên dịch/Xem kết quả’ giống như nhiều ngôn ngữ lập trình, và như trong lập trình thì quá trình biên dịch có thể xảy ra lỗi và người dùng phải xử lý những lỗi này.

Bài này đưa ra một số ví dụ của những lỗi thường gặp nhất trong LaTeX.

Bạn nên sử dụng chức năng chỉnh sửa mã để thử sửa văn bản và kiểm tra xem bạn đã sửa được những lỗi này hay chưa.

Không tìm thấy pdflatex

Khi bắt đầu với LaTeX thì mọi người thường gặp lỗi dạng sau:

'pdflatex' is not recognized as an internal or external command,
operable program or batch file.

trên Windows hay

bash: pdflatex: command not found

trên Linux.

Đây không phải là một lỗi TeX, nó là một lỗi từ hệ điều hành cho thấy TeX chưa được cài đặt đúng cách. Một lỗi thường gặp là việc bạn cài đặt một trình soạn thảo mã nguồn như TeXworks hay TeXShop nhưng không cài đặt một hệ thống TeX như TeX Live hay MiKTeX.

Cấu trúc của một thông báo lỗi TeX

\documentclass{article}
\usepackage[T1]{fontenc}

\newcommand\mycommand{\textbold{hmmm}}

\begin{document}

My command is used here \mycommand.

\end{document}

Tệp này tạo ra một thông báo lỗi như sau trong tệp log:

! Undefined control sequence.
\mycommand ->\textbold 
                       {hmmm}
l.8 My command is used here \mycommand
                                      .
? 

Chú ý rằng TeX không phát hiện lỗi tại điểm mà lệnh được định nghĩa, và trên thực tế, nếu \mycommand được định nghĩa nhưng không được sử dụng, quá trình biên dịch sẽ không có lỗi gì cả. Vì thế, mặc dù lỗi được phát hiện ở dòng 8, lỗi ‘thực’ lại nằm ở việc định nghĩa \mycommand tại dòng 4. Do đó, việc đọc toàn bộ thông báo lỗi là một việc quan trọng.

Chú ý rằng một số trình sửa mã nguồn hiện những bản ‘tóm tắt’ của thông báo lỗi. Những tóm tắt này có thể dễ gây hiểu nhầm, ví dụ như

line 8: undefined command: ...\mycommand

vì nó làm cho ta tưởng rằng \mycommand không được định nghĩa.

Ngoặc nhọn không khớp

\documentclass{article}
\usepackage[T1]{fontenc}

\usepackage[leqno}{amsmath}

\begin{document}

\end{document}

Ở đây, lỗi là một dấu đóng ngoặc nhọn } được dùng để kết thúc một đối số không bắt buộc. Ngoặc nhọn này không khớp với bất kỳ ký tự mở ngoặc nhọn { nào, do đó nó sinh lỗi trong quá trình LaTeX xử lý các đối số, và bạn nhận được một lỗi internal không rõ ràng lắm:

! Argument of \@fileswith@ptions has an extra }.

Mặc dù thông báo lỗi không giúp ích được nhiều, hai dòng kế tiếp có cho ta thấy vị trí của lỗi bằng việc sử dụng ký tự xuống dòng tại điểm lỗi:

l.4 \usepackage[leqno}
                      {amsmath}

Không tìm thấy tệp

\documentclass{article}
\usepackage[T1]{fontenc}

\usepackage{amsmathz}

\begin{document}

\end{document}

Tệp này sinh ra lỗi sau

! LaTeX Error: File `amsmathz.sty' not found.

Chú ý rằng lỗi này có thể được gây ra bởi hai lý do khác nhau: một lỗi đánh máy như ở ví dụ này (có thể sửa được bằng cách sửa tên gói lệnh), hay việc tệp cần tìm đang thật sự bị thiếu và cần phải được cài đặt đúng cách.

Dòng trống trong các môi trường toán

\documentclass{article}
\usepackage[T1]{fontenc}

\begin{document}

Some text
\begin{equation}

  1=2

\end{equation}

\end{document}

cho ta một lỗi khá tối nghĩa:

! Missing $ inserted.

Nhưng việc sửa lỗi khá đơn giản. Các môi trường toán không được chứa các dòng trống, do vậy những dòng trống này cần phải được xóa đi.

Bài tập

Thử sửa các lỗi trong các ví dụ trên.

Tạo ra một văn bản nhỏ với những lỗi khác nhau và ghi nhớ cấu trúc những thông báo lỗi bạn nhận được.