用 Overleaf 写的 LaTeX 论文,交上去的 PDF 里到底躺着什么文字
你在 Overleaf 里写的是 `.tex`,交出去的是 PDF。固定样本说明,文字层同时受编译器和提取器影响:词数会变、断词位置会变、连字在两个工具里出现而在另一个工具里被还原,一句排版正常的话还能被脚注、页码、表格和图题从中间切开。
HumanPen 团队
· 11 分钟
用 LaTeX 写论文,会让 Turnitin 的 AI 写作报告读到不一样的东西吗?
Turnitin 接受 PDF,但这不等于我们知道它的私有提取器看见什么。固定样本中,同一份双栏 pdfTeX 文件经空白归一化后,mutool 和 PyMuPDF 都读出 694 个词,pypdf 读出 692 个。编译器和提取器共同塑造文字流,这一点可以复跑;Turnitin 的真实输入和分数变化不能由此推出。
源码、三份 PDF、九份原始提取文本和计数脚本都保留在证据包里。下面先讲实测,再给一个可以跑在自己论文上的五分钟检查。
我们编译了什么,用什么读的
一个 `.tex` 文件,标准 `article` 类,`twocolumn`,10pt。里面有摘要、四个带编号的章节、行内公式和行间公式、一个 `itemize` 列表、一个带行号的 `algorithm` 环境、一个 `table` 浮动体、一个 caption 写成完整句子的 `figure` 浮动体、一个长到要折行的脚注,以及两处 `\cite`,走编号式参考文献。双栏输出两页,单栏对照输出三页。
编译器:pdfTeX 3.141592653-2.6-1.40.26,TeX Live 2024。读它的三个提取器互不相关:mutool 1.25.6、PyMuPDF 1.26.0、pypdf 6.4.0。
把连续空白都折叠成一个空格后,mutool 和 PyMuPDF 对双栏 pdfTeX 文件都给出 694 个词,pypdf 给出 692 个。三个文字流的大章节顺序相同,但两个词的差距已经足以推翻「不同提取器拿到的是同一个对象」这种省事说法。
双栏的阅读顺序没有乱
关于双栏 PDF,流传最广的一条警告是:提取器会横着扫过两栏,把论文串成一堆错位的句子。这次没有发生。第一栏底部摘要的最后一句,紧接着就是第二栏顶部引言的第一句,整篇顺序完好。
但这句话的适用范围就这么大:一种文档类、一种版式、三个提取器、一台机器。期刊自带的 `.cls`、异常的浮动体位置、边栏,都可能是另一回事。这正是文末那个检查值得花五分钟跑在你自己文件上、而不是相信我们这份文件的原因。
真正断掉的是另一样东西,而它几乎没人讨论。
浮动体、脚注和页码,会切进句子中间
下面是 PyMuPDF 结果里的一段,只折叠空白,两个端点之间没有删字:
"…justification for treating a visually correct page as a reliable 1This footnote is deliberately long enough to wrap onto a second line so that its position in the extracted stream can be observed and compared with nearby prose. 1 Table 1: Primary outcome by condition. Condition Mean SD Control 12.4 3.1 Intervention 18.9 2.7 Figure 1: The framed area is a fixture rather than a reported empirical result. text stream…"
源码里的 `reliable text stream` 是一个连续短语。在这份提取结果里,脚注、一个裸页码、表格标题和单元格、图题,全都落在 `reliable` 和 `text stream` 中间。另一处脚注标记还会贴在前面的标点上,形成 `follows:1`。
引文中第二个 `1` 就是页码。把两页文字流拼起来,它会落在脚注和表格之间,虽然视觉上并不属于任何一段。
这些都不是 PDF 视觉排版损坏,而是这个具名本地提取器返回的顺序。只有先知道提取方法,「上一句」和「下一句」在文字流里才是稳定概念。
断行处拆开的词,从 22 个降到 5 个
LaTeX 可以在断行处加连字符,窄栏会提供更多机会。PyMuPDF 在双栏 pdfTeX 文件里数到 22 处拆词,下面是其中六个:
ex- poses · differ- ences · specifica- tions · observa- tions · justifica- tion · partici- pants
然后把同一份源码改成单栏,只改文档类选项。PyMuPDF 得到 678 个归一化词元和 5 处拆词:`or- dinary`、`extrac- tion`、`jus- tification`、`partici- pants`、`par- ticular`。
同一份源码,只换一个版式选项,断词集合就变了。这是一份样本,不是所有期刊文档类的定律,但足以说明应该检查编译后的文件。对中文作者还要分开看:中文正文按字断行,不会出现这种拉丁词拆分;英文摘要、关键词、参考文献题名、期刊名和正文里的英文术语仍会。
换一个编译器,字符本身就变了
第三次编译,同一份源码、同样双栏,改用 XeLaTeX。纸面上的字一个没变。
pdfLaTeX 文件在三个工具里都没有暴露 `ff`、`fi`、`fl`、`ffi`、`ffl` 这些连字码位。XeLaTeX 文件则出现了提取器分歧:PyMuPDF 和 pypdf 都读到六个含连字的词元,`affiliated`、`affiliation`、`difficult`、`efficiency`、`insufficient`、`office`;mutool 把它们还原成普通字母,所以计数是 0。拿 `efficiency` 做朴素字符串检索,在一份文字流里命中,在另一份里会漏掉。这六个连字只属于这一个 XeLaTeX 构建,不能外推成「中文 LaTeX 都如此」:Overleaf 的中文指南还列出 LuaLaTeX 和 pdfLaTeX 配 `CJKutf8` 的路线,`ctex` 也不能当作 XeLaTeX 的同义词。中文作者要检查的是自己实际选的引擎和字体。
公式从另一个方向说明问题。pdfTeX 文件里的求和号被 mutool 读成 Unicode 替换字符,被 PyMuPDF 和 pypdf 读成大写 `X`;XeLaTeX 文件里,三个工具都给出了真正的 `∑`。编译器和提取器都参与了结果。
本轮引用的 Turnitin 页面没有说明它使用哪种提取器,也没有描述这些转换;我们同样不声称上面任何一条会改变分数。能核的结论更窄:文字层是编译产物,而不同提取器也可能从同一份 PDF 暴露出不同字符。
官方对这种形状的论文说过什么
官方文档里有四段话直接落在这种形状的论文上。那几页上还有别的内容,这里只挑与 LaTeX 提交有关的四条。
格式是被接受的。 Turnitin 关于 AI 写作报告的文件要求页列的是 `.docx, .pdf, .txt, .rtf`。这只能证明 PDF 可以被处理,不能证明它走哪条提取链。Turnitin 能检测 PDF 里的 AI 吗把有文档支持的部分讲全了。
只有散文进入统计。 FAQ 对分析范围的定义是合格文本(qualifying text):
"This qualifying text includes only prose sentences, meaning that we only analyze blocks of text that are written in standard grammatical sentences and do not include other types of writing such as lists, bullet points (short non-sentence structures), or other non-sentence structures."
真正要紧的是后面那一句:这个百分比「不一定是整份提交的百分比」。你的 `itemize` 条目不是句子,`algorithm` 的行号不是句子,一行表格单元格也不是。Turnitin 怎么处理数学公式和非散文内容讲了满篇公式的论文会怎样。但反过来要注意:`\caption` 如果写成一个完整的语法句子——大多数人就是这么写图题的——它在文字流里看上去和正文散文一模一样。
参考文献被整体排除。 2023 年 8 月 9 日的一条更新说明写道,一个「偶尔会给参考文献里的条目标上 AI 高亮」的缺陷已修复,并且「Bibliographies are now excluded when processing the AI writing report」;同一条还写着,已有的提交必须重新提交才会按新规则重跑。官方没有公开的是:在一份被拍平的文字流里,参考文献部分是怎么被识别出来的。我们的提取结果也给不出线索——`References` 就是一个普通的词,后面跟着 `[1] J. Smith, "A study of things," Journal of Testing, vol. 4, no. 2, pp. 100–110, 2019.`,中间没有任何边界标记。两个方向的推论都别当依据用。那些排除项到底管到哪儿分清了哪些有文档、哪些没有。
短文档的行为不一样。 FAQ 说,只有几百词的文档里预测会「mostly 'all or nothing'」,混合内容有可能被整体判成 AI 生成。一篇六页、一半是公式的会议论文,里面真正的合格散文可能没多少。短文档与全有全无讲了机制。语言范围也要单独核:当前公开名单是英语、西班牙语、日语和现代标准阿拉伯语,中文不在其中;非英语提交怎么办专门解释这条边界。
到读者手里时,引用命令只剩一个方括号和一个数字
`\cite{smith2019,jones2020}` 在提取结果里就是四个字符 `[1, 2]`。`\ref{sec:method}` 就是 `2`。`\label` 什么都没留下。章节标题的编号和标题被拆开,`2 Method` 直接接在上一句后面;而前文那句交叉引用 `Section 2 describes the method.` 读起来就是一句夹了个游离数字的散文。
所以,一切建立在「改引用格式」上的打算,都在对一个不存在的东西动手。提取出来的文字里没有「引用」这个对象,只有方括号和数字;Turnitin 公开的那套计算流程里,也没有哪一步会点到引用。具体有哪几种改法、以及它们各自为什么无处着力,Turnitin 为什么标了我的参考文献逐条列过。
五分钟自查,跑在你自己的论文上
上面那些工具你一个都不需要。用任意阅读器打开编译好的 PDF,全选,粘进纯文本编辑器。这只是又一种提取路径,不是 Turnitin 的代理,但它能暴露你实际提交的文字层里有没有明显问题。
按这个顺序读:
- 被劈开的词。 搜「连字符 + 换行」。每一处命中,都是一个不再成立的词。
- 浮动体落在哪。 找一个表格标题,读它前后各一句。如果标题和单元格落进了一个段落中间,那就是这一段现在的阅读顺序。
- 图题表题。 如果 caption 是完整句子,它看上去就是散文,因为它本来就是。
- 公式。 在粘贴出来的文本里读一条行间公式。你看到什么,提取器就拿到了什么。字符缺了或错了,说明的是字体嵌入,不是你的代数。
- 参考文献从哪开始。 看看纯文本里有没有任何东西标出参考文献的起点。我们那份里没有。
- 你的姓名和单位。 它们也在文字层里。如果投的是双盲,这一条比上面任何一条都重要。
如果你的 `.tex` 在 Git 或 Overleaf 里,这件事按大修改次数做,不要留到最后一次。至于 Overleaf 里的写作历史能不能当写作过程的记录用,Word、Google Docs 和 Overleaf 的版本历史各存在哪儿写了免费版的保留规则和对应的做法,比大多数人以为的要具体。
如果句子终归要改
对 LaTeX 论文,答案朴素且正确:改源码,重新编译,永远不要去改 PDF。句子活在 `.tex` 里,其余都是它的渲染结果。
麻烦的是链条不止于 PDF 的情况。导师可能要 Word 版开修订,期刊或学位论文格式审查可能要求 `.docx`,也可能有人把一份基于编译后 PDF 的 AI 写作报告发回来,问你打算改哪几段。此时同一篇论文已经有两种格式。
如果最后得到的是英文 DOCX,HumanPen 可以把改写限制在你手动选中的段落,或者 Turnitin、iThenticate 报告匹配到的段落。Humanize 当前只处理英文,也不把 `.tex` 或编译后的 PDF 当作可编辑源文件。先确认段落级范围,继续把 LaTeX 源码当母版,下载后再核对转换稿。符合条件时可以免费继续降 AI。
常见问题
要不要直接交 `.tex` 而不是 PDF? 要求交什么就交什么。`.tex` 是带标记的纯文本,里面每一条命令都会以字面字符的形式出现,对任何读者(人或机器)都不是一个更干净的版本。
公式会抬高我的 AI 率吗? 公式不是散文句子,按官方定义就在合格文本之外。围着它的解释性句子在里面。一篇以公式为主的论文,那个百分比是在页面很小的一部分上算出来的。
双栏本身有问题吗? 这份样本的大章节顺序没有乱。PyMuPDF 在双栏版数到 22 处断行拆词,单栏版是 5 处;这是这份文档类的实测,不是所有期刊模板的定律。
学校要 Word 版,我是用 LaTeX 写的。 那你多了一道转换,而编号、交叉引用和引用字段最容易在这一道断掉。转换只做一次、尽量晚做,检查时按对象类型逐项过,别只看前两页。
中文论文用 LaTeX 写,上面这些还成立吗? 拉丁词断行只影响英文摘要、关键词、参考文献和英文术语。连字结果要按你实际使用的引擎和字体检查:Overleaf 同时列出 XeLaTeX、LuaLaTeX 和 pdfLaTeX + `CJKutf8`,本次只测了 XeLaTeX。浮动体、页码和引用数字仍值得在实际 PDF 里检查。
继续阅读