研究型写作

Markdown转LaTeX论文:模板、引擎与引用后端怎么选

从已有 Markdown 出发,先确定文档类、编译引擎、宏包与字体、引用后端和交叉引用规则,再用 Pandoc 接入目标 LaTeX 工程并完成编译验收。

发布于 2026年4月26日更新于 2026年9月13日8 分钟阅读
Markdown转LaTeX论文:模板、引擎与引用后端怎么选

先说结论:如果已经有一份 Markdown 论文,并且需要沿用期刊、会议或学校提供的 LaTeX 工程,本地使用 Pandoc 生成 LaTeX,再按目标工程的规则编译,通常是更直接的路径。InkFount 适合另一种情况:稿件已经在站内可视编辑器中,目标格式也在当前模板卡片明确支持的范围内。它不是把现有 .md 或任意 .tex 上传后自动改造成投稿工程的转换器。

转换前先确定六项交付契约

不要先运行命令,再根据报错猜要求。至少先确认以下六项:

  1. 最终交付物:需要单个 .tex、完整 LaTeX 工程,还是编译后的 PDF。
  2. 模板与文档类:目标使用标准 article,还是专用文档类(document class)。
  3. 编译引擎:使用 pdfLaTeX、XeLaTeX、LuaLaTeX,还是模板指定的构建工具。
  4. 宏包与字体:工程依赖哪些 .sty、系统字体和数学字体,中文由什么方案处理。
  5. 引用后端:文献由 citeproc 按 CSL 样式排版,还是交给 natbib/BibTeX 或 biblatex/biber。
  6. 结构规则:标题层级、图表题注、公式编号、交叉引用和图片路径如何进入目标工程。

Pandoc 官方手册说明,它主要保存文档结构,但其内部模型不能表达所有格式细节,也不会自动推断页边距等排版要求。因此,“成功生成 .tex”只说明转换程序完成了工作,不代表输出已经符合投稿规范。

先辨认手中的“模板”是哪一种

“模板”可能指两种不同的文件,接入方法不能混用。

含 Pandoc 占位变量的模板

真正供 --template 使用的 Pandoc 模板通常包含 $body$$title$ 等变量,以及 Pandoc 的条件或循环语法。确认文件确实按这种规则编写后,才适合显式传给 --template

pandoc paper.md \
  --to=latex \
  --standalone \
  --template=pandoc-template.tex \
  -o paper.tex

--standalone 会生成带完整头部和正文环境的文档;若没有指定 --template,Pandoc 使用自己的默认 LaTeX 模板。模板变量及版本兼容方式可查阅官方模板说明

期刊或学校提供的普通 LaTeX 工程

另一类“模板”是一个现成工程,可能包含 main.tex.cls.sty.bst、图片目录和构建脚本。它的 main.tex 通常只是普通 LaTeX 主文件,并不含 Pandoc 占位变量,不能因为扩展名是 .tex 就直接作为 --template 使用。

此时更稳妥的思路是保留原有 main.tex\documentclass、前导区和构建命令,只让 Pandoc 在不启用 --standalone 时输出正文片段:

pandoc paper.md \
  --to=latex \
  -o body.tex

然后检查原工程是否已经给出明确的正文接入点,例如某个 \input\include 或模板专用环境。只有接入规则明确时,才能把生成片段放到相应位置。不同工程对摘要、作者信息、章节命令、参考文献和附录的组织方式并不相同;如果没有清楚的插槽,就需要针对该工程单独适配,不能假定一条通用命令适用于所有模板。

这类 body.tex 不是自包含文件;YAML 中的标题、作者和摘要也不会通过 Pandoc 模板自动进入目标主文件,需要按原工程结构另行映射。还要检查片段是否使用了目标前导区未定义的命令、宏包或环境;这些依赖会随正文内容和 Pandoc 版本变化。发现缺口时,应按该工程的约束补齐相应定义或改写生成片段,不能机械复制 Pandoc 默认模板的整套前导区。

citeproc、natbib 与 biblatex 要按目标分流

.bib 只是文献数据来源,不能据此判断最终使用哪种引用后端。

如果希望由 Pandoc 直接排版引用和文献表,可使用 --citeproc --bibliography=ref.bib,并显式提供目标要求的 CSL 文件。若省略 --csl,Pandoc 默认使用 Chicago author-date,这通常不能直接代表学校或期刊规范。

如果目标工程要求 natbib 与 BibTeX,应选择 --natbib,保留由后续 LaTeX/BibTeX 流程处理的引用命令。若工程采用 biblatex,则选择 --biblatex,再按工程说明调用 biber 或相应后端。--natbib--biblatex 都不应与 --citeproc 混用。具体选项边界见Pandoc 引用说明

公式不会默认变成带编号的 equation 环境

Pandoc 的默认映射比许多教程描述得更直接:Markdown 中的行内 TeX 公式会在 LaTeX 输出中写成 \(...\)$$...$$ 展示公式会写成 \[...\],而不是自动变成 equation 环境。\[...\] 本身不提供公式编号或标签。官方数学公式说明对此有明确说明。

如果论文需要公式编号和正文引用,就要在源文档规范、Pandoc 过滤器或目标 LaTeX 工程中明确处理。公式里的自定义命令也不会由转换器自动补齐定义;缺少相应宏包或前导区声明时,生成的源码仍会编译失败。

图表也要区分“识别为结构”和“完成交叉引用”。Pandoc 可以把符合条件的图片识别为 figure,并处理表题,但“如图 2”“见式(3)”这类随顺序更新的编号引用通常还需要额外规则。pandoc-crossrefPandoc Extras列出的外部过滤器,使用前应检查安装和版本兼容;目标工程已有自己的标签方案时,则应服从工程规则。

中文字体和页边距同样不能靠转换器猜测。Pandoc 的 CJKmainfont 变量需要 XeLaTeX 或 LuaLaTeX 及相应宏包,而且所填字体必须真实安装在编译环境中。“SimSun”不是跨平台的通用答案。geometry 可以设置页边距,但专用文档类可能已经控制版心,此时不应再用任意数值覆盖模板要求。

验收要覆盖源码、日志和成稿

生成文件后,至少完成四项检查:

  1. 查看生成的 LaTeX,确认章节、公式、图片、表格和引用没有变成普通文本或落入错误位置。
  2. 使用目标工程原本规定的引擎和构建命令,不自行替换成看似方便的编译方式。
  3. 检查缺失文件、未定义命令、字体错误,以及未解析的文献引用和交叉引用等警告;引用和交叉引用可能需要多轮构建,不能用“编译一次”作为标准。
  4. 打开最终 PDF,核对标题作者、章节层级、字体、页边距、公式、图表题注和文献表,再与正式投稿说明逐项对照。

能够编译、版面看起来正常和符合投稿要求,是三个不同层次的结果。

什么时候选择 InkFount

如果内容已经在 InkFount 的连续可视稿件中,并且当前模板卡片正好支持目标语言和格式,可以使用站内导出路径。快速上手展示了连续可视稿件的工作流。InkFount 当前没有面向用户的源码模式,也不导入 Markdown 或任意 .tex,也不接收用户模板或自定义宏包。

站内稿件可以管理图片、表格、公式及其交叉引用,编号会随内容顺序更新,但复杂公式在不同模板中的呈现仍可能不同。完成稿件和引用检查后,登录用户先选择模板,再选择该模板当前提供的 LaTeX 源代码或 PDF 等格式;页面没有显示的组合不能当作可用能力。对于生成的 LaTeX 工程,只应将其描述为对应模板提供的工程 ZIP;未检查真实产物时,不应枚举其内部文件。InkFount 导出帮助给出了当前流程和限制。

因此,已有 .md 文件且需要保留自定义工程控制权时,选择本地 Pandoc;稿件已在 InkFount、目标格式在当前模板支持范围内时,再选择站内模板导出。先确认输入条件和交付契约,才能避免把“格式转换”误当成“投稿工程已经完成”。

继续阅读

这些相关文章可以帮助你补齐写作流程中的其他环节。

分享:微博

在 InkFount 中实践这套方法

你可以直接在编辑器里搭建提纲、管理参考文献、插入引用,并在导出前完成结构与格式检查。