从读法学院那会儿开始,一直到正式工作,我发现本领域人士多具扫地僧气质:并不挑剔工具。以存储法律条文为例,大多数人的选择大概 Word 文档即 PDF 文件。存在并不说明合理,只是修修补补能够凑合过。
透过波利亚放大器1,不难发现,问题变成了:如何存储常用参考文件,同时兼顾浏览、检索以及重新编辑。对于喜欢研究效率工具的读者来说,现成的答案已经摆在眼前,那就是 Markdown。
本文以《中华人民共和国民法典》(下称《民法典》)为例,展示如何将网上格式参差不齐的文本快速转换为清爽的 Markdown,不仅打破浏览、检索和编辑的不可能三角,稍加拓展,还能使用强大的浏览器功能与插件。
为什么是 Markdown
在法律或者其他古老而严肃的领域引入一种新潮工具,容易被贴上锤子综合症的标签。但我愿意冒这个险,因为传统的 Word 文档和 PDF 已经糟糕到严重耽误工作的程度。
参考文件最根本的要求,就是又快又准,这两点其实是一枚硬币的正反面。使用 PDF 时。准确率几乎是零分,盖凡是换行之处,关键词检索就会失效(只有屈指可数的专业搜索工具才能克服这一点儿,您通常需要为此花费上千元),如果我不得不浏览一份 PDF 文件,为了保住我的饭碗,唯一选择就是从头到尾通读几遍,没法仰赖搜索。不值得信赖的搜索准确率,当然把 PDF 在浏览速度方面的优势消磨殆尽。
Word 恰好相反。这次虽然不用担心换行问题,可是难跨文件搜索,大多数自动化工具也无法处理这种私有格式,在实际工作中,我发现多数人只能挨个打开 Word 文档,一个一个搜索或者通读。这一次,速度又成了短板。
还有一个问题,就是能否编辑。PDF 文件几乎不可能重新编辑(除非你愿意再掏一大笔钱),而那些专业数据库软件更不会给你编辑权限。偏偏参考资料这东西,往往是收录速度赶不上变化速度,比如《民法典》生效后,不少旧文件因为与之抵触,实际上已经失效了,但是国内几个权威数据库中,部分旧文件仍然显示有效。把编辑的权力让渡出去、完全相信数据库,显然非常危险。
一言以蔽之,在浏览、搜索和编辑之间,存在着一个不可能三角。绝大多数工具、方法和文件格式都像途经百慕大的飞机一样,在其中迷失。
所幸柳暗花明。读书和工作时,我发现上了年纪的教授和老律师、老法官,似乎都很喜欢直接打开网页浏览法律法规。这种朴素的选择并非个例,其背后很可能有原因。我也试着直接前往有关部门官网查看文件,很快意识到,浏览器很可能是不可能三角的突破口:浏览速度飞快(打开五十个个网页和五十个 Word 文档,那可不是一个概念),搜素精度极高(可以配合高级搜索语法),并且原始数据也可以自行编辑。
当然,上来就用 HTML,未免夸张了一些。在实际动手之前,不妨继续往后推理:网页与传统文档的本质区别在于,前者具有明确的浏览和编辑两个模式,在浏览模式下,雷达图的阴影迅速占领两角;而在编辑模式中,不可能三角的剩余一角也被占据了。其实从一开始就没有什么不可能,只不过我们习惯性把不同场景混在一块,多数格式和软件又不区分模式,进一步加剧一叶障目。
顺着浏览和编辑分开的逻辑,很快可以找到更简单、更轻量的存储格式:Markdown。顺予指出,Markdown 本来就是 HTML 的简化版,你随时可以把 Markdown 展开——就像日本纸花一样——成 HTML,然后使用本文第三节中的高级功能。
制作干净的 Markdown 版《民法典》
网上公布的参考文件,往往不是出自专业排版人士之手,直接拷贝下来之后观感很差,一般都要稍加修整。本文既然讨论 Markdown,接下来的排版流程及其自动化,当然以此为目标。
以《民法典》为例。大多数网页在换行以及空格上非常粗糙,绝大多数网站都会用两个空格当作段落前面的缩进,而换行则完全看心情,甚至随机使用硬回车和软回车,并且很可能连续换行。在网页上看着并无大碍的内容,复制到文本编辑器里后往往原形毕露。我先写了一段简单的正则表达式 ^\s+|\s+$
2,可以把段落前后的多余空格删掉,并且把每一段之间的空行统一为一行(此标准为所有 Markdown 编辑器公认)。
随后,主要的排版工作就是在每章每节前面加上标题层级符号 #
3。法律类文件还有条款序号,要求较高的话,也可以将“第几条”这样的文字加粗。这些操作我都写成了自动化动作,其核心是通用的 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 出发,前往下一站。