让 AI 根据已有格式继续写 LaTeX?

博客EasyLaTeX发布于

让 AI 续写却格式走样时:先交给它格式定义的来源

格式的定义集中在文件开头那一段:字号、行距、编号与引用样式由 \documentclass 和 \usepackage 选项决定,项目还会定义自己的命令。这些都不在正文里,只贴正文时,AI 只能按通用写法补内容。

下面这份 main.tex 与同目录的 refs.bib 合起来可以直接编译。导言区定义了术语命令 \method,正文里的 Convergence 小节是要交给 AI 的样板:

main.tex:

\documentclass[11pt]{article}
\usepackage{amsmath,booktabs}
\usepackage[backend=biber]{biblatex}
\addbibresource{refs.bib}
\newcommand{\method}[1]{\textsc{#1}}
\begin{document}
\section{Convergence}\label{sec:convergence}
We use \method{gradient descent}; see~\cite{knuth1984}.
This subsection demonstrates the project's notation.
\printbibliography
\end{document}

refs.bib:

@book{knuth1984,
  author = {Donald E. Knuth},
  title = {The TeXbook},
  publisher = {Addison-Wesley},
  year = {1984}
}
@book{lamport1994,
  author = {Leslie Lamport},
  title = {LaTeX: A Document Preparation System},
  edition = {2},
  publisher = {Addison-Wesley},
  year = {1994}
}

样板里的 \method{...}、\cite{...}、\label{sec:...} 就是格式的样本。

只贴一段正文不够时:连同同类型小节一起给出

「请保持格式一致」没有可对照的对象。要续写小节,就给一个已排好的小节;要续写表格,就给一个已排好的表格环境。

项目用 booktabs 的三线表时,把已有的表格连同 \toprule / \midrule / \bottomrule 一起贴过去,续写的表格才会沿用同一套线型与列宽写法:

\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}

提交续写请求时:写明可用命令、标签前缀与 key 范围

把下面这份请求模板连同样板源码一起提交:

按给出的样板续写一个小节,只输出新增内容。
保留文档类、导言区和现有宏定义。
只使用已提供的命令与引用键,不添加新的宏包。
新标签使用 sec: 前缀,不与已有标签重复。
不确定的术语、数据或引用先标记待确认,不自行补全。

.bib 的 key 列表也一并给出,或说明「只用已出现过的 key」。看不到列表时,生成的引用可能指向不存在的条目,表现为 Citation '...' undefined 与 PDF 中的 [?]。

续写完成后:编译一次再核对命令、标签与引用

续写结果接回项目后先编译一次。日志里出现未定义命令或未定义引用,说明生成内容用了上下文之外的名字。核对三处:

  1. 命令:把续写部分里的 \ 命令与导言区清单对一遍,未定义的删掉或替换;

  2. 标签:\ref 指向的对象有没有对应的 \label,前缀是否与项目规则一致;

  3. 引用:\cite 的 key 是否都在 .bib 中,改动过 .bib 时在平台重新编译,并等待参考文献处理完成。

排版本身对不对,日志不会提示。字号、缩进、编号样式这类偏差靠新旧两段对照:把续写部分与样板小节放在同一页比较,层级不一致时先检查新增内容是否遵守模板,不要让 AI 改动全局导言区,不要在结果里手工补 \vspace。

常见偏差与处理

报错触发原因处理
! Undefined control sequence. \method使用了上下文里没有的项目自定义命令把导言区的命令定义一起提供,再核对命令清单
LaTeX Warning: Citation 'x' undefinedkey 由生成时编造,.bib 中没有提交请求时附上 key 列表;在 .bib 中检索该 key
LaTeX Warning: Reference 'fig:x' undefined\ref 指向的标签未定义,或前缀与项目规则不符按前缀规则补 \label,完整编译一次
! LaTeX Error: Environment tabularx undefined.续写内容换了项目里未加载的宏包在导言区补该宏包,或要求沿用已有的表格写法
Overfull \hbox (30.0pt too wide) in paragraph生成的表格或公式超出栏宽收窄列宽或减少列数;双栏模板里更常见

相关阅读:安全修改、减少编译错误、复用代码。

总结

  • 先给格式来源:文档类、导言区与自定义命令决定新内容的样子,正文里看不到;

  • 给同类型样板:续写小节就给已排好的小节,续写表格就给已排好的表格;

  • 请求里写边界:可用命令、标签前缀、key 范围一次说清;

  • 接回后编译核对:未定义的命令与引用看日志,排版偏差靠新旧两段对照。

续写的内容接回项目后,把整个目录导入 EasyLaTeX 编辑器,编译一次,日志中可以查看有没有未定义的命令与引用。