如何避免 AI 生成無法編譯的 LaTeX 程式碼?

部落格EasyLaTeX 官方發布日期

AI 生成 LaTeX 程式碼時通常不知道你的專案環境,因而拿不到三類資訊:已經載入的套件、當前的編譯引擎、模板自帶的規則。缺這些資訊時,它會呼叫專案裡沒有載入的指令,把數學符號寫進普通文字,或者生成當前引擎不支援的字元。錯誤訊息都指向原始碼裡出問題的那一行,不會提示根因在上下文,排查起來像自己寫錯的一樣。

生成前先把導言區清單固定下來

有效做法是先定一份導言區,連同任務一起給 AI,並寫明「不要新增 \usepackage,只在這個範圍內寫」。下面這份可以直接用:

LaTeX
\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 描述需求時的六條約束

  1. 要完整可編譯示例,不要片段。說清「從 \documentclass 到 \end{document} 全部給出」,片段拼起來最容易丟環境;

  2. 一次只要求一節。寫完編譯成功再要下一節,比一次生成一大段再排錯更容易定位;

  3. 說清引擎和文件類。pdfLaTeX 和 XeLaTeX 對中文、字型、Unicode 的處理不同,這一句能避開一類錯誤訊息;

  4. 貼原始錯誤訊息,帶行號。「編譯失敗了」沒有資訊量,! Undefined control sequence. l.42 \toprule 才有;

  5. 明確禁止它改導言區和全域格式。否則它會順手「最佳化」你的模板,越改越遠;

  6. 改之前留一個能退回的版本。出問題時先回退到上一次能編譯的狀態,比繼續追問更容易確定是哪次改動引入的。

前五條都是在補 AI 缺的上下文,第六條是把改動範圍收住。

參考文獻上也有同類問題:AI 編出來的 citation key 在 .bib 裡並不存在,正文就會顯示 [?],可按 引用完整性檢查 核對。

如果不想每次手抄一遍導言區,可以在 EasyLaTeX 裡保留一份可編譯的基準專案,之後讓 AI 改哪一段就只改哪一段。

如何避免 AI 生成無法編譯的 LaTeX 程式碼? | EasyLaTeX | EasyLaTeX