Obsidian
笔记 · Markdown · 知识管理
本地 Markdown 笔记,适合长期积累和双向链接。
正在打开工具详情…
Markdown、Word、HTML、LaTeX 之间互转。
稿件要在 Markdown 和 Word / PDF 之间切换。
只在一个软件里写到底,从不导出其他格式。
Pandoc 是命令行文档转换工具,常被叫做文档转换界的瑞士军刀,能把 Markdown、Word、HTML、LaTeX、EPUB、reStructuredText 等几十种格式互相转换。它解决的是「同一份稿件要在不同格式之间来回切换,且希望这件事能脚本化重跑」的问题。
它的核心是一套统一的文档模型:先把输入格式解析成抽象语法树,再渲染成目标格式,所以组合数量远多于逐个两两转换;用 Lua 过滤器可以在转换过程中改写内容,模板系统控制输出骨架,内置 citeproc 支持 CSL 引文与参考文献,还能输出 reveal.js 或 Beamer 幻灯片。最常用的就是一条命令:pandoc 输入.md -o 输出.docx,能直接塞进构建脚本或 CI。
代价也要说:它是纯命令行,没有图形界面,参数得记;复杂排版不可能百分百保真,精细的表格、页眉页脚、套既有 Word 模板这类需求转换后仍需人工收拾;导出 PDF 还要另外装引擎,LaTeX 体积大,wkhtmltopdf 或 WeasyPrint 是轻量替代;默认模板处理中文要显式指定字体,否则容易出方块或回退字体。
许可证为 GPL-2.0-or-later,源码在 github.com/jgm/pandoc,安装包从 pandoc.org 获取。它由 Haskell 编写,分发的是单个可执行文件,不需要装运行时;GPL 约束的是再分发,日常用它转自己的文档不受影响。
上手步骤之外的具体做法:常见场景怎么配、命令怎么写、报错怎么处理。
讲清 Pandoc 的输入输出模型、模板机制与引用处理:一条命令完成格式转换,以及那些容易踩的隐式规则。
Pandoc 的核心是「读入一种标记语言,写出另一种」。最简形式:
bashpandoc notes.md -o notes.docx
pandoc notes.md -o notes.html
pandoc notes.md -o notes.pdf --pdf-engine=xelatex不写 -o(或 --output)时,结果直接打到标准输出,所以 pandoc notes.md | pbcopy 能直接把 HTML 塞进剪贴板。
显式指定格式用 -f(from,读入)和 -t(to,写出):
bash# docx 转回 markdown,保留标题层级
pandoc -f docx -t markdown --extract-media=./media notes.docx -o notes.mdPandoc 会猜测输入格式,但中文环境里 .txt、.md 的猜测经常出错,与其猜不如显式写。写 PDF 时 --pdf-engine 必填,否则 Pandoc 只产出中间的 .tex。
-s 与模板不写 -s(--standalone)时,Pandoc 只输出正文片段,没有 <head>、没有标题。生成完整 HTML 文档必须加上它:
bashpandoc notes.md -s --toc --toc-depth=3 -o notes.html--standalone 会去套一个默认模板。想换模板就用 --template,模板里最重要的两个变量是 $body$(正文落点)和 $if(title)$ ... $endif$ 这种条件块。LaTeX 输出的样式靠 --variable=mainfont 传进去:
bashpandoc notes.md -o notes.pdf \
--pdf-engine=xelatex \
--variable mainfont="Noto Serif CJK SC" \
-V lang=zh-CN用 --print-default-template=latex 可以把当前默认模板完整打印出来改,这份模板就是所有 --template 定制的基础。
优先用元数据块——写在文件最开头的 YAML 区域,位置错了会被当成普通段落:
yaml---
title: 三月市场回顾
author: 研究组
date: 2026-03-31
lang: zh-CN
---命令行里也能临时覆盖,用 -M(--metadata)或 -V(--variable)。区别是:-M 接受任意值,值不是字符串时按 YAML 解析;-V 一律当字符串,不做类型推断。日期尤其要注意这一点,用 -M date=2026-03-31 才是日期,用 -V 可能被原样打印。
Pandoc 内置 citeproc,管 @key 语法和参考文献排版:
bashpandoc paper.md -o paper.docx \
--citeproc \
--bibliography=refs.bib \
--csl=chicago-author-date.csl@key 会被替换成引用,文献表自动附在末尾。CSL 样式文件决定引文格式,风格名字要和 --csl 指向的文件对得上。缺 --citeproc 时,@key 会原样留在正文里——这是新手最常遇到的现象。
想改的是外观(页眉、字体、版式),走 --template;想改的是内容(自动加目录标题、转换某种写法),走 --filter,或用 --lua-filter 跑一段 Lua 脚本。两者作用范围完全不同:过滤器看到的是 Pandoc 的 AST,不依赖输出格式,所以跨格式通用;模板只对最终格式负责。