如何避免 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 改哪一段就只改哪一段。