这是我的「写作流」Shortcuts。

2020-08-17-My-Publishing-Shortcuts

上一篇文章中,我谈到由于官方编辑器完全不支持 Markdown 语法,我不得不利用 Shortcut 以及公众号 Web API 处理 Markdown 文本的图片,这个 Shortcut 节省了我成吨的操作。

今天讨论如何处理「link」,这个 Shortcut 使用「正则表达式」,它把 Markdown 的 link 转换为 footnote。和上次一样,这么做纯属无奈,我从来没想到我会写这种操作,可是要想干干净净写文章,我们不得不先花时间清理垃圾。

为什么需要转换

Markdown 中,link(链接) 和 footnote(脚注) 是完全不同的东西。

link 的格式是:

 [文字](链接)

下面是一个 link:

[上一篇文章](https://aibooks.net/shortcuts/2020/07/28/iOS-Shortcuts-WebAPI-Upload-Photos.html)

它的作用是注明引用来源。当然,这种「source code」可读性太差,实际输出时,Markdown 编辑器会把它渲染为:

2020-08-17-Link-Preview

点击「上一篇文章」,就会打开对应网页。

footnote 则是注释,它的格式是,首先在正文中插入脚注符号,然后在文末插入对应的注释内容,即:

[^fn]

<!-- 正文其余部分 -->

[^fn]: 注释内容

「fn」叫什么随意,只要两者匹配即可,编辑器会自动改成数字。例如,这样一段话:

> 白云[^1]深处拥雷峰[^2],几树寒梅带血红。<br>
> 斋罢垂垂浑入定,庵前潭影落疏钟[^3]。<br>

<!-- 正文其余部分 -->

[^1]: 雷峰塔下白云庵。
[^2]: 原注:雷峰,又名夕照山。相传道人雷就曾居于此。有塔名雷峰塔,为南屏山支脉,为五代吴越王钱俶时所建,突出于杭州西湖南岸,一九二四年倾塌。(按:钱俶原名钱弘俶,吴越国最后一位君主,因"弘"字犯宋太祖父之名讳,宋后只称钱俶。
[^3]: 分别指三潭印月与南屏晚钟。

[^1]、[^2]、[^3] 都是 footnote。输出效果:

2020-08-17-footnote

点文中小数字,它会跳到文章结尾处的注释:

2020-08-17-footnote-preview

点击的「↩︎」,它会跳回正文。

由上可见,link 和 footnote 不该混为一谈。

然而,公众号编辑器不支持 Markdown,如果要指明引用出处,唯一的办法只能把和注释混合,放在文末。例如,《圣约》的书评,注释是这样:

2020-08-17-Testaments-footnote

3、5、9 这几条本应是 link 而不是 footnote。

因此,发到公众号后台之前,必须把 Markdown 中的 link 转换为 footnote。

转换方法

解决的方法我能想到至少两种。第一种简单直接,写一段 HTML code,然后生成 rich text 即可。例如上面那首诗,HTML 可以这样:

2020-08-17-HTML-sup-example

输出的结果是:

2020-08-17-HTML-sup-result

看起来还是不错的,现在把结果复制到公众号编辑器,应该可以正常显示。

当然了,这种文本手写是不可能的,但其实 HTML 看起来麻烦,实际非常简单,模式千篇一律,可以写一个 Shortcut,无论有多少个脚注,一键转换。

第二种方法是保留 footnote,只把 link 转换成 footnote,然后再生成 rich text,效果差不多,我用的就是这种方法,下面说一下这个 Shortcut 的流程。

Shortcut

现在的问题相当于,如下文本,

[title 1](link1)

Some texts here

[title 2](link2)

More texts here

如何转换为:

[^title 1]

Some texts here

[^title 2]

More texts here

[^title 1]: link1
[^title 2]: link2

直接上完整的 Shortcut:

2020-08-17-Full-Shortcut

解析:

  1. 「[(.*?)]((.*?))」是一段正则表达式,它的作用是匹配文中所有形如 []() 的组合,即 link,无论括号中是什么。
  2. 循环,有多少个 link,就循环多少次。每个循环,执行下面 3-7 步。
  3. 这个正则表达式匹配 [],即文字部分,结果保存在标量「Title」中。
  4. 匹配 (),即网址,结果保存在标量「Link」中。
  5. 原来是 [Title](Link) ,经过重组,变成了[^Title]: Link,即一条 footnote,这是放在文末那一部分。
  6. 把文本中的 [Title](Link) 换成 [\^Title]。
  7. 每次循环结束,更新一下全文,这一步很重要,否则最后得到的结果是没替换过的原始版本。
  8. 这里的「Input」是替换过的文章正文,「Footnote」是一个数组,每一个元素是一条 footnote,它放在文章最后。

Run 这个 Shortcut,输出结果就是上上张图所显示的。另外,截图中最上面的 Text 是我用来测试的,最后要用实际文本替换。

这个 Shortcut 还是很简单的,但同样,它能节省我大量无用操作。无论多少个 link,几秒钟搞定。

下一步

iA Writer、Shortcuts、Working Copy 这几个 app 是我用 iPad 写东西的最重要的工具。Working Copy 还没说过,它是 iOS 的 GitHub 客户端,自从 GitHub 私有仓库免费之后,我就把我所有的文本都保存在 GitHub 了。没有 Working Copy,要 Push/Pull,就只能用 GitHub API(和上一篇传图的道理类似),有了 Working Copy,一切都很简单了,操作 Git 的文件,就像普通文件夹,复制、粘贴等等,非常方便。更妙的是,Working Copy 和 Shortcuts 集成非常好,我可以用它去「Git」一张图片,重命名,然后把图片改成 iA Writer 的 Content Block 语法,再打开 iA Writer 粘贴进去,这一切操作只要一个 Shortcut 就自动搞定,这是后话。

另外,关于定制主题,上次我说:

如果嫌样式不好看,可以自己修改 HTML,然后写一个脚本,以后每篇文章都做同样修改。如果不会写,可以用前面提到的在线转换工具,再去后台粘贴。

以及

前面说过,这些工具无非就是应用一套定义好的 HTML + CSS。因此,更好的 DIY 方式是,自己定义一个公众号专用主题,iA Writer 以及 Ulysses 等编辑器都支持自定义主题模版

后来我发现,其实解决办法非常简单,写一段 CSS,放在每篇文章最前面就可以了,也是一个 Shortcut 搞定。

这样,有了上一篇,本文,以及我接下来要说的 Working Copy,CSS 模版,这四篇文章差不多能完整说明的我的「写作流」了。

最后,有人可能要说,写文章不就是写字吗?为什么要搞的这么麻烦呢?

这是对「效率」的误解,我所做的,不过是把重复的工作自动化而已。这样做的根本目的是,你可以只关注内容,而不必在意格式。试想那些第三方编辑器,你每写一篇文章,都要把排版所做的所有工作重复再做一遍,这不才是最麻烦的吗?如果一键搞定标题、图片、链接、颜色、行距、等等,岂不才是最效率的方法?这样你能够把最重要的精力放在文字上。

当然,方法有很多,效率也有高低,我的方法只是依照我的习惯(我只用 iPad,不用电脑,偏爱 Shortcut,并用 GitHub 管理)。

希望我的文章抛砖引玉,促使你思考自己的方法。