Pandoc 从入门到精通,你也可以学会这一个文本转换利器

Pandoc是一个强大的文档转换工具,支持Markdown到docx等多种格式转换。它具有丰富的自定义选项和扩展功能,如表格、脚注、文献引用等。Pandoc不仅限于文件转换,还能处理文本,如转换引号、处理东亚文字换行。通过命令行接口和扩展,用户可以实现复杂的文档处理任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pandoc 简介

如果你需要在不同的文件格式之间相互转换,多半听说或使用过文档转换的瑞士军刀——Pandoc。事实上,不仅人类知道 Pandoc,最近很火的人工智能 ChatGPT 也知道「将 Markdown 转换为 docx」,首选方案是使用 Pandoc。

如何「将 Markdown 转换为 docx」,ChatGPT 回答使用 Pandoc,并给出了转换命令

Pandoc 是一个基于 GPL 协议开源的免费命令行软件 ,由加州大学伯克利分校哲学系教授  John MacFarlane使用  Haskell语言开发,目前另一位核心开发者是来自德国的Albert Krewinkel 。截止 2022 年 12 月 10 日,Pandoc 的 GitHub 仓库拥有超过 27,000 个 Star,3,000 次 Fork。

根据 John MacFarlane 教授的介绍 ,Pandoc 这个名称是一个组合单词: Pan是希腊神话里的牧神,指的是一切掌管树林、田地和羊群的神,doc 则是 document 的缩写,意为文档。因此从字面意思来看,可以说 Pandoc 是一个「无所不能的文档转换利器」 (universal markup converter),而它的确也拥有名副其实的功能。

作为一个始于 2006 年的个人项目,经过 16 年的发展,现在的 Pandoc 已经变得非常庞杂,拥有相当丰富的功能,可以实现 几十种 文件格式的转换,各种调整细节的选项也不计其数,除了基础的文档转换功能外,还能通过 Lua、Python 等脚本语言实现高度自定义的文档转换,甚至成为其他很多现代文档工具的依赖,例如R Markdown、Quarto​。正因如此,它的功能非常复杂,仅PDF 版使用手册  就超过了 150 页。一方面,这使得 Pandoc 上手门槛比较高,容易劝退新手,但另一方面,丰富的功能也让它具有极强的可玩性和无限的可能性,甚至可以不仅限用于文档格式转换,还能实现一些「意料之外」的功能。

Pandoc 作为一个命令行工具,一个经常围绕它的问题是:为什么没有图形化界面(GUI
)?这是因为图形化应用虽然更加容易上手,但缺点也很明显——难以排列下数量庞大的参数。事实上,对于拥有大量参数的软件,命令行界面的易用性其实要优于图形化界面,这一点可以在网友设计的 OpenSSL GUI
 中看出来。

如果命令行工具 OpenSSL 拥有图形化界面,将会是如此复杂的样子

当然,如果你非常偏爱图形化应用,可以使用  PanWriter
 ——一个基于 Pandoc 的 Markdown 编辑器,能够通过 GUI 的方式实现 Pandoc 的部分文档转换功能。

需要指出的是,Pandoc 不仅仅是一个文档转换工具,还包括了它定义的一系列标准,而 Pandoc’s Markdown
 就是这样的标准之一。众所周知,诞生于 2004 年的 标准 Markdown
 有不少局限性,这导致后来的 Markdown 方言
 层出不穷,而在这些 Markdown 方言中,Pandoc’s Markdown 作为少有的「业界良心」,可以说是最为规范、功能最全面的,它主要包括了以下扩展语法:

  • 表格:简单表格、多行表格、网格表、管道表格
  • 列表:多种多样的有序列表和无序列表
  • 行块:以 | 开头,可用于诗歌等特殊文体的排版
  • 脚注:包括常规脚注和行内脚注
  • 文献引用:在 Markdown 中引用文献,支持 BibTeX 等多种引文格式
  • 数学公式:用 $ 或 $$ 包裹数学公式
  • 支持混合使用 LaTeX 和 HTML 语法

在强大的 Pandoc’s Markdown 加持下,我们几乎可以在 Markdown 中完成任何类型的写作,并使用 Pandoc 将其转换为其他文件格式。在写作时,我们只需要思考下一句该写什么,而不用考虑写作本身之外的其他因素,正如 Pandoc 邮件讨论组中的网友 Michael Thompson
 所说:

In Markdown – not to put too fine a point on it – the writer is only ever faced with one question, and it is the right one: what the next sentence should be.

在 Markdown 中——直言不讳地说——作者只会面对一个问题,而且是正确的问题:下一句应该写什么。

安装 Pandoc 与使用方法

Pandoc 的官网详细介绍了在各个操作系统上的 安装方法
,你可以根据自己使用的操作系统下载安装包进行安装,或者下载源代码 自行编译
。当然,也可以使用包管理器进行安装。例如,在 Windows 上使用 Chocolatey
 安装:

choco install pandoc

在 macOS 上使用 Homebrew
 安装:

brew install pandoc

在 Linux 上使用 APT
 安装:

sudo apt-get install pandoc

安装完成之后,在终端中输入 pandoc --version,如果输出以下或类似的信息,则意味着安装成功:

pandoc 2.19.2
Compiled with pandoc-types 1.22.2.1, texmath 0.12.5.2, skylighting 0.13,
citeproc 0.8.0.1, ipynb 0.2, hslua 2.2.1
Scripting engine: Lua 5.4
User data directory: /Users/username/.local/share/pandoc
Copyright (C) 2006-2022 John MacFarlane. Web:  https://pandoc.org
This is free software; see the source for copying conditions. There is no
warranty, not even for merchantability or fitness for a particular purpose.

Pandoc 的基本使用方式如下:

pandoc [options] [input-file]…

例如,将一个 TXT 文件转换为 HTML 文件:

pandoc -f markdown input.txt -t html -o output.html

上面这行命令中,-f markdown 表示
 输入文件的格式为 Markdown,也可以写作 --from=markdown-r markdown 或 --read=markdown-t html 表示
 输出文件格式为 HTML,也可以写作 --to=html-w html 或 --write=html。输入文件为 input.txt-o output.html 也可以写作 --output=output.html,表示
 将输出写入到一个 HTML 文件中,命名为 output.html

需要注意的是,在命令行中明确指出输入或输出的文件格式不是必须的,因为 Pandoc 可以根据文件扩展名 推测出
 文件格式,例如,它会将 .txt.md.markdown 等扩展名视为 Markdown,将 .html 视为 HTML。而如果输入文件没有扩展名,则会被当作 Markdown,如果输出文件没有扩展名,则会被当作 HTML。因此,上面这行命令可以简写为:

pandoc input.txt -o output.html

不只能处理文件

很多教程都会强调 Pandoc 的「输入文件」和「输出文件」,尽管这本身没有问题,但却在一定程度上限制了 Pandoc 的功能,让新手觉得它只能处理文件。然而事实上并非如此,与大部分命令行工具一样,Pandoc 的输入和输出也可以是 stdin
(标准输入)或 stdout
(标准输出),而不只是文件。

Pandoc 用户手册
 指出,如果没有指定输入文件,Pandoc 会从 stdin 读入,如果没有指定输出文件,则输出为 stdout,也就是直接显示在终端中,例如执行下面这行简单的命令:

echo 'hello world' | pandoc

通过 管道操作
 | 将 echo 命令的输出结果传递给 pandoc。由于这里没有指定输入和输出文件,Pandoc 默认会将输入当作 Markdown,将输出当作 HTML,因此输出如下结果,并显示在终端中:

<p>hello world</p>

标准输入和标准输出意味着可以使用 Pandoc 结合其他命令行工具一起使用。假设你得到一个文本文件 input.txt,它的文件编码不是 UTF-8,但 Pandoc 默认使用 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChatGPT4.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值