Markdown 和其他格式的相互转换
# 100.Markdown 和其他格式的相互转换
使用 Markdown 后,偶尔会遇到和其他格式相互转换的需求。
Markdown 转为其他格式是非常方便的。但将 PDF、epub 等电子书转为 Markdown 就有点复杂了,本文就介绍一些转换技巧,和几个格式转换工具。
# 先了解下 Pandoc
Pandoc 是一个开源项目,号称文档格式转换的瑞士军刀。
# Pandoc 的历史(了解即可)
Pandoc 是一个基于 GPL (opens new window) 协议开源的免费 命令行软件,由加州大学伯克利分校哲学系教授 John MacFarlane (opens new window) 使用 Haskell (opens new window) 语言开发,目前另一位核心开发者是来自德国的 Albert Krewinkel (opens new window)。截止 2022 年 12 月 10 日,Pandoc 的 GitHub (opens new window) 仓库拥有超过 27,000 个 Star,3,000 次 Fork。
根据 John MacFarlane 教授的 介绍 (opens new window),Pandoc 这个名称是一个组合单词:Pan (opens new window) 是希腊神话里的牧神,指的是一切掌管树林、田地和羊群的神,doc 则是 document 的缩写,意为文档。因此从字面意思来看,可以说 Pandoc 是一个「无所不能的文档转换利器」 (universal markup converter),而它的确也拥有名副其实的功能。
# Pandoc 的安装
Pandoc 的官网详细介绍了在各个操作系统上的 安装方法 (opens new window),以 Windows 为例,直接去其 GitHub 的发行页面 (opens new window)下载即可:
安装完成之后,在命令行输入 pandoc --version
,如果输出以下或类似的信息,则意味着安装成功:
pandoc.exe 2.13
Compiled with pandoc-types 1.22, texmath 0.12.2, skylighting 0.10.5,
citeproc 0.3.0.9, ipynb 0.1.0.1
User data directory: C:\Users\peterjxl\AppData\Roaming\pandoc
Copyright (C) 2006-2021 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.
2
3
4
5
6
7
# Pandoc 的基本使用方式
Pandoc 的基本使用方式如下:
pandoc [options] [input-file]…
例如,将一个 TXT 文件转换为 HTML 文件:
pandoc -f markdown input.txt -t html -o output.html
同理,将 Markdown 转为其他格式,其他格式转为 Markdown,也是同样的用这样的指令来完成。
# Typora 与 Pandoc
在 Typora 的菜单上,可以看到导出选项,支持 PDF、HTML、图片、Word 等等:
其实,Typora 是基于 Pandoc 的功能来完成格式转换的,其原理是调用电脑上的 Pandoc,如果没有安装的话,则导出会失败:
在安装完 Pandoc 后,就可以完成 Markdown 到其他格式的转换啦~
PS:如果安装 Pandoc 后,Typora 仍无法调用 Pandoc,可以考虑重启 Typora 或电脑。
# PDF、Word、epub 转 Markdown
# 原理
Pandoc 除了能将 Markdown 转为其他格式之外,也支持其他格式转为 Markdown。
例如,Typora 也有导入的选项:
转换方式:
- 如果是 PDF 文件,请先转换为 Word 文档,这个大部分 PDF 编辑器都支持(例如 WPS、 PDF XChange Editor (opens new window))
- 如果是 epub、mobi 等电子书格式,也可以用 Calibre (opens new window) 来转换为 Word 文档
- 如果是 Word 文档,可以直接导入到 Typora
# 图片问题
Pandoc 只能完成格式的转换,并不能解决图片的问题。如果 Word 里有图片,则导入 Markdown 后图片会失效:
那么,如何去提取这些图片呢?其实这些文件就在 .docx 文件里。我们修改下该文件的后缀名为 zip:
然后解压,就能看到一个 media 文件夹,而里面就有相关的图片:
将该文件夹放到和 Markdown 文件同个目录,即可正常读取到图片。
导入后,由于 Word 文档的问题,图片信息可能会带有很多后缀,例如下图的 {width=......}
:
我们可以通过正则表达式,批量去掉这些无用信息(一般编辑器都自带查找和替换的功能):
\{width.*\}
# 其他工具
PanWriter (opens new window):一个基于 Pandoc 的 Markdown 编辑器,能够通过 GUI 的方式实现 Pandoc 的部分文档转换功能。
Marker (opens new window):一个开源的命令行工具,将 PDF、EPUB、MOBI 文档转成 Markdown 文件,必要时会进行 OCR(文字识别)。