如何避免 AI 生成無法編譯的 LaTeX 程式碼?
AI 生成 LaTeX 程式碼時通常不知道你的專案環境,因而拿不到三類資訊:已經載入的套件、當前的編譯引擎、模板自帶的規則。缺這些資訊時,它會呼叫專案裡沒有載入的指令,把數學符號寫進普通文字,或者生成當前引擎不支援的字元。錯誤訊息都指向原始碼裡出問題的那一行,不會提示根因在上下文,排查起來像自己寫錯的一樣。
生成前先把導言區清單固定下來
有效做法是先定一份導言區,連同任務一起給 AI,並寫明「不要新增 \usepackage,只在這個範圍內寫」。下面這份可以直接用:
\documentclass[11pt]{article}\usepackage[utf8]{inputenc} % pdfLaTeX 下保留;用 XeLaTeX 時刪掉\usepackage[T1]{fontenc}\usepackage{amsmath,amssymb} % 數學環境與符號\usepackage{graphicx} % \includegraphics\usepackage{booktabs} % \toprule \midrule \bottomrule\usepackage{hyperref} % 超連結,習慣上放最後\begin{document}\section{Method}We minimise the objective\begin{equation}\label{eq:obj} J(\theta) = \frac{1}{n}\sum_{i=1}^{n}\ell\bigl(f(x_i;\theta), y_i\bigr)\end{equation}where $\theta \in \mathbb{R}^{d}$.\begin{table}[htbp] \centering \begin{tabular}{lcc} \toprule Model & Accuracy & F1 \\ \midrule Baseline & 0.812 & 0.794 \\ Ours & 0.867 & 0.851 \\ \bottomrule \end{tabular} \caption{Illustrative results.} \label{tab:results}\end{table}\end{document}這份清單把可用指令限定在已載入的套件內:\toprule 只在載入 booktabs 後可用,\bm 需要 bm,\SI 需要 siunitx。AI 看不到導言區時只能按常見寫法推斷,推斷錯了就觸發 Undefined control sequence. 或 File 'xxx.sty' not found.。
五類常見錯誤訊息的觸發原因與改法
| 錯誤訊息 | 實際觸發原因 | 改法 |
|---|---|---|
| Undefined control sequence. | 用了 \toprule、\bm、\SI 之類,導言區沒有對應套件 | 載入套件,或換成清單內的基礎寫法 |
| File 'xxx.sty' not found. | 套件名拼錯、被編造,或當前環境中沒有該套件 | 刪掉該行,用清單內的套件替代 |
Missing $ inserted. | 數學指令或下標寫在數學模式外 | 使用 \(\alpha\)、\(x^2\);普通文字的百分號另寫成 \% |
| Unicode character θ (U+03B8) not set up for use with LaTeX. | pdfLaTeX 不認 Unicode 數學字元 | 優先改成 \(\theta\);更換引擎時也要配合相應的字型與數學設定 |
Extra alignment tab has been changed to \cr. | tabular 的列數和 & 數量對不上 | 普通行核對列數與分隔符;合併列需另行計數 |
這五類的錯誤訊息都指向原始碼,不會說明根因是缺上下文。其中 % 在 LaTeX 裡是註解符,AI 寫「準確率提升了 12%」時可能漏掉轉義,寫成 \% 才成立。
給 AI 描述需求時的六條約束
-
要完整可編譯示例,不要片段。說清「從
\documentclass到\end{document}全部給出」,片段拼起來最容易丟環境; -
一次只要求一節。寫完編譯成功再要下一節,比一次生成一大段再排錯更容易定位;
-
說清引擎和文件類。pdfLaTeX 和 XeLaTeX 對中文、字型、Unicode 的處理不同,這一句能避開一類錯誤訊息;
-
貼原始錯誤訊息,帶行號。「編譯失敗了」沒有資訊量,
! Undefined control sequence. l.42 \toprule才有; -
明確禁止它改導言區和全域格式。否則它會順手「最佳化」你的模板,越改越遠;
-
改之前留一個能退回的版本。出問題時先回退到上一次能編譯的狀態,比繼續追問更容易確定是哪次改動引入的。
前五條都是在補 AI 缺的上下文,第六條是把改動範圍收住。
參考文獻上也有同類問題:AI 編出來的 citation key 在 .bib 裡並不存在,正文就會顯示 [?],可按 引用完整性檢查 核對。
如果不想每次手抄一遍導言區,可以在 EasyLaTeX 裡保留一份可編譯的基準專案,之後讓 AI 改哪一段就只改哪一段。