# 为什么，以及如何制作 Markdown 版民法典

> 本文公开全文。

原文：https://utgd.net/article/20536

从读法学院那会儿开始，一直到正式工作，我发现本领域人士多具扫地僧气质：并不挑剔工具。以存储法律条文为例，大多数人的选择大概 Word 文档即 PDF 文件。存在并不说明合理，只是修修补补能够凑合过。

透过波利亚放大器，不难发现，问题变成了：如何存储常用参考文件，同时兼顾浏览、检索以及重新编辑。对于喜欢研究效率工具的读者来说，现成的答案已经摆在眼前，那就是 Markdown。

本文以《中华人民共和国民法典》（下称《民法典》）为例，展示如何将网上格式参差不齐的文本快速转换为清爽的 Markdown，不仅打破浏览、检索和编辑的不可能三角，稍加拓展，还能使用强大的浏览器功能与插件。

- 清理文本格式的自动化动作（LaunchBar 版）

- 转换好格式的《中华人民共和国民法典》成品下载

## 为什么是 Markdown

在法律或者其他古老而严肃的领域引入一种新潮工具，容易被贴上锤子综合症的标签。但我愿意冒这个险，因为传统的 Word 文档和 PDF 已经糟糕到严重耽误工作的程度。

参考文件最根本的要求，就是又快又准，这两点其实是一枚硬币的正反面。使用 PDF 时。准确率几乎是零分，盖凡是换行之处，关键词检索就会失效（只有屈指可数的专业搜索工具才能克服这一点儿，您通常需要为此花费上千元），如果我不得不浏览一份 PDF 文件，为了保住我的饭碗，唯一选择就是从头到尾通读几遍，没法仰赖搜索。不值得信赖的搜索准确率，当然把 PDF 在浏览速度方面的优势消磨殆尽。

Word 恰好相反。这次虽然不用担心换行问题，可是难跨文件搜索，大多数自动化工具也无法处理这种私有格式，在实际工作中，我发现多数人只能挨个打开 Word 文档，一个一个搜索或者通读。这一次，速度又成了短板。

还有一个问题，就是能否编辑。PDF 文件几乎不可能重新编辑（除非你愿意再掏一大笔钱），而那些专业数据库软件更不会给你编辑权限。偏偏参考资料这东西，往往是收录速度赶不上变化速度，比如《民法典》生效后，不少旧文件因为与之抵触，实际上已经失效了，但是国内几个权威数据库中，部分旧文件仍然显示有效。把编辑的权力让渡出去、完全相信数据库，显然非常危险。

一言以蔽之，在浏览、搜索和编辑之间，存在着一个不可能三角。绝大多数工具、方法和文件格式都像途经百慕大的飞机一样，在其中迷失。

所幸柳暗花明。读书和工作时，我发现上了年纪的教授和老律师、老法官，似乎都很喜欢直接打开网页浏览法律法规。这种朴素的选择并非个例，其背后很可能有原因。我也试着直接前往有关部门官网查看文件，很快意识到，浏览器很可能是不可能三角的突破口：浏览速度飞快（打开五十个个网页和五十个 Word 文档，那可不是一个概念），搜素精度极高（可以配合高级搜索语法），并且原始数据也可以自行编辑。

当然，上来就用 HTML，未免夸张了一些。在实际动手之前，不妨继续往后推理：网页与传统文档的本质区别在于，前者具有明确的浏览和编辑两个模式，在浏览模式下，雷达图的阴影迅速占领两角；而在编辑模式中，不可能三角的剩余一角也被占据了。其实从一开始就没有什么不可能，只不过我们习惯性把不同场景混在一块，多数格式和软件又不区分模式，进一步加剧一叶障目。

顺着浏览和编辑分开的逻辑，很快可以找到更简单、更轻量的存储格式：Markdown。顺予指出，Markdown 本来就是 HTML 的简化版，你随时可以把 Markdown 展开——就像日本纸花一样——成 HTML，然后使用本文第三节中的高级功能。

## 制作干净的 Markdown 版《民法典》

网上公布的参考文件，往往不是出自专业排版人士之手，直接拷贝下来之后观感很差，一般都要稍加修整。本文既然讨论 Markdown，接下来的排版流程及其自动化，当然以此为目标。

以《民法典》为例。大多数网页在换行以及空格上非常粗糙，绝大多数网站都会用两个空格当作段落前面的缩进，而换行则完全看心情，甚至随机使用硬回车和软回车，并且很可能连续换行。在网页上看着并无大碍的内容，复制到文本编辑器里后往往原形毕露。我先写了一段简单的正则表达式 ^\\s\+\|\\s\+$，可以把段落前后的多余空格删掉，并且把每一段之间的空行统一为一行（此标准为所有 Markdown 编辑器公认）。

随后，主要的排版工作就是在每章每节前面加上标题层级符号 \#。法律类文件还有条款序号，要求较高的话，也可以将“第几条”这样的文字加粗。这些操作我都写成了自动化动作，其核心是通用的 Shell 脚本，可以移植到常见自动化工具中。不过只能保证处理大多数法律法规类文件，对于其他领域的参考资料，我没有任何发言权。

简单处理过后的文本，已经带有层级和样式，此时至少不输给 Word 文档。稍微懂一点 CSS 技术的读者，还可以自行配置主题，尽量按照公文的风格渲染 Markdown 文件。这里不仅有美学方面的考量，也有实用主义理由。Markdown 毕竟是一种偏 Geek 的格式，多数编辑器的渲染效果也过于时髦，大片空白、巨型字体、往死里撑的行距，这些都不适合浏览大段法律文本。恐怕政府官网上的朴素排版，才最恰当。

到此为止，不可能三角早已烟消云散；而熟练使用命令行或 DEVONthink 的读者，更是能够轻松跨文件搜索——而且可以配上高级搜索语法。可本文并不谈这些，这是我（以及其他作者）在另外文章中的议题；现在，让我们把目光移回 HTML。

## 一些基于 HTML 的拓展操作

Markdown 本身只是雪花的结晶核，具体能够生长出怎样的景色，还是要看配合的浏览工具。站在纯文本格式的十字路口，往下主要由两条分叉的小径：一条仍然沿着 Markdown 往下走，不可避免要走向 Marked 2、DEVONthink 乃至 FoxTrot 等专业工具；另一条路则兜兜转转又绕回来网页的方向上。我本人在两个方面都有所探索，管见以为，在目的地同样是罗马的前提下，宽敞的坦途——HTML——或许更好。

只需要将 Markdown 格式转换为司空见惯的 HTML，许多高级 Markdown 工具才拥有的功能，就可以在多数浏览器中完成。毕竟，各个浏览器发展多年，其功能集和插件库恐怕已经远超任何“知识管理”工具，完全足够用来浏览 HTML 版的参考文件。

### 导出 HTML

第一步是把 Markdown 格式转换成 HTML。这并不意味着我们放弃了 Markdown，只是在需要干重活、脏活、累活时候（临时）生成网页文件，方便引入一些繁重的功能。详言之：

- 绝大多数 Markdown 文件根本不需要转换成 HTML。一般来说，参考文件旨在供查询，而非通读、精读，比如说翻开一部关于个人所得税的部门规章，我想要的可能只是一个数字，那么使用任何 Markdown 工具都无所谓，有时甚至只是按空格键瞥一眼（Quick Look）。

- 少量篇幅较长且经常使用的文件，可以专门准备 HTML 版本，例如《民法典》。这类文件常常需要全文检索，同时写写画画、做一些标注，不适合用裸 Markdown。

- 介于以上两种情况之间的文件，在确实需要细细咀嚼时，再制作 HTML 即可。

制作 HTML 文件的方法不少。前文已经提到，我喜欢预设排版风格，因此我习惯用 Markdown 编辑器导出 HTML，它们一般可以自己添加 CSS 主题文件（比如 Marked 2）。

当然，免费的命令行工具 Pandoc 也可为之，但是我没有精力在这里用和正文同样的篇幅介绍如此复杂的工具。另一种方法是使用 Shortcuts，它带有一个 Markdown 到 HTML 的转换模块，只需要一个步骤，相信任何能打开这篇文章的读者，都有能力自己做一个格式转换小工具。如果你还需要配上个性化的 CSS 文件，那么可以参考我以前设计的动作。

### 高亮批注

HTML 文件最大的特点之一，就是可以在上面直接批注，把需要强调的文字内容高亮出来，同时不会影响到原始文件——你只需刷新一下网页，这些标记就会归零、复位。

我在 GitHub 上找到了一个网页批注的开源项目，如果你只需要一种颜色，其前半部分已经足够。你可以把原作者提供的脚本塞到 Keyboard Maestro 里，以便用快捷键快速高亮网页。

不过像《民法典》这类篇幅宏大的文本，一种颜色或许不够用。上面推荐的仓库中还有调整颜色的代码，但我看不懂，故自己另写了一套。这里展示效果，只是展示一种可能，暂时我也没有开源的打算。

### 生成可搜索的目录

另一类进阶功能是搜索和导航。参考文件，尤其是法律法规类的，往往会分章甚至分节，如果没有合适的导航工具，全靠鼠标滚轮上下翻动，那种辛苦可想而而知。

我曾边写过一款目录工具，可为结构规整的网页生成目录，不仅能点击到达对应位置，还可以搜索目录标题。Markdown 恰恰已经带有层级标记，由此转成而来 HTML 也带有标题记号，很容易配合目录工具使用。像《民法典》这样的长篇文本，单单浏览目录也很化力气，此时搜索就有必要。

话说回来，其实我也为 Markdown 文件编写了目录插件（文章见此）。和上一节一样，我也没有半点要推销什么东西的意思，我只是编写了一些工具，它们可以解决一些具体问题。

## 小结

从 Word 文档或 PDF 到 Markdown，是出于零基思考路径的合理归宿，找到了浏览、检索和编辑之间的平衡点。而 Markdown 作为一种通用格式，又可以轻易转换为 HTML，并享受浏览器的丰富功能集和软件库。

我目前主要和法律法规类文件打交道，不敢妄议其他行业；我不知道以后有没有更好的选择，也不清楚会不会接触完全不同类型的文件。但如果有的话，大概率还是可以从 Markdown 出发，前往下一站。

---

[前往标准阅读页](https://utgd.net/article/20536?audience=web)
