Ulysses 简中求效的折腾

《如何用 iPhone 进行高效的学习?| Matrix 精选》一文,我介绍了我的工作流的使用流程。因为是第一次投稿也没有想太多就是非常系统地写出了我如何用我的 iOS 设备进行课外课程的学习,学校里面的学习我是用不到手机的,但是我确实对课外知识感兴趣,因为你不懂的东西有很多这时候你就需要借助互联网了。以至于年终终结竟然没有什么可以多说的,因为我可以说的差不多都说完了,但是机器人提示我说可以分享我这一年通过折腾所享受到了哪些效率的提升,于是就有了此文。


盼望的寒假终于来了,应朋友要求和自己比较有兴趣的原因,第一天整理了一个单元的电化学化学笔记后我就去休息了,与其说是休息不如说是用 iOS 版的 Ulysses 再检查一下文中也没有什么写地不好的地方,作为一个强迫症患者,我确实有点忍不了没有下标而全部使用阿拉伯数字的化学式,大家可以脑补一下化学式后面全是跟着一样高度的数字的效果。我本来是打算用 ChemDraw Professional 来画的但是如果那样的话效率至少降低 200% 于是果断放弃了。然后我又有一个原则:能简单的东西就不要把它搞复杂。总不能说我为了整理一个单元的笔记还要去使用 MS Word 来编辑吧,而且两者相比注定是 Ulysses 的学习成本比较低。此处没有黑微软的意思,我所有的软件除了社交类基本上都是一个类型只用一个,有了 Ulysses 就不会再去考虑 MS Word 了,所以这就注定我必须在 Ulysses 上做一番折腾。

于是我想起来少数派上有朋友貌似发过这样的文章谈到过这个问题,就找到了:简中求效:Markdown 遇上 LaTeX,文中提到了可以使用 LaTeX 来实现这些看似异想天开的想法,因为在此之前我认为在 Ulysses 这样的 Markdown 编辑器里面就不应该有这么奇怪的东西出现吧?但是我的想法很快就被颠覆了。当我将四行 Raw Source Block 放到文章开头,并且再把作者提供的神奇公式输入到文章中,神奇的事发生了,它真的显示了我预期的效果。下面是一张官方效果图。

放在文章开头四行的 Raw Source Block

<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath:[['$','$']]}});
</script>
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>

但是由于 LaTeX 默认宏中没有用于化学的标记,所以我搜索了一下得到了这条结果:How do I get MathJax to enable the mhchem extension in ipython notebook,最后一个回答解决了这个问题,所以除了刚才加入的四行 Raw Source Block 以外,如果你想用 Ulysses 来输入一些与化学有关的标记的你就需要再添加一个 mhchem 套件,添加也非常简单,将下面四行 Raw Source Block 加在声明后面就行了。

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
TeX: {extensions: ["mhchem.js"]}
});
</script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script>

于是一个用于化学文章写作的环境就准备好了,接下来说说它该如何使用。在我的化学笔记中主要有三个地方需要用到化学标记:化合物,离子团,化学方程式。接下来就简要介绍一下这三个的具体公式。

  • 化合物

在原始的 Markdown 编辑器想要用化学式来体现硫酸铜的话我们大概会这样子输入:CuSO4,但是当 Ulysses + MathJax + mhchem 就有了无限的可能,我们可以把最后那个 4 变成下标,输入:~$CuSO_{4}$~,就完成了。

前面的 ~$ 和后面的 $~ 用于声明要使用 mhchem 这个宏,它会在生成 HTML 的时候告诉 Ulysses:这里面输入的东西是化学式,你要用 mhchem 来解释它。接着输入字母就是我们正常输入的 CuSO 然后一个下横线代表后面接着的东西应该是下标显示的,{} 没有太大实际意义仅用于将后面的数字 4 包起来,于是我们就构造出了一个硫酸铜带下标的化学式了,注意要求全英文输入效果如图。

以此类推我再给出几个比较常见的化学式帮助大家理解一下:

氢氧化钠:~$NaOH$~  硫酸:~$H_{2}SO4$~  氧气:~$O_{2}$~ 水:~$H_{2}O$~
  • 离子团

金属离子或者离子团也是我经常需要输入的东西,但是 Fe2+ Fe3+ 这样打出来的离子效果总是不能令我很满意,于是 mhchem 的作者又很贴心地为我们加入了上标功能,公式与化合物类似差了一个符号,比如我想输入三价铁离子应该是:~$Fe^{3+}$~。你会发现其实就是把下横线换成了^,在TeX排版时,该字符表示上标。下图是我实际使用过程中的输入内容和 HTML 预览效果。还有一些上下都带角标的离子团比如硫酸根它是这样输入的~${SO_{4}^{2-}$~, 本质就是两种标记符号一起用的效果。

  • 化学方程式

化学方程式的本质就是上述所说的两种公式的化合物,区别在于中间的连接符号。试了一下现在的情况是如果反应可以完全进行用英文输入法输入等号即可,关键在于可逆号和反应条件。参看了这篇文章:【LaTeX】用 mhchem 写化学公式 但是由于作者可能是使用 Windows 环境所以实际输入的内容可能有所不同。在 Ulysses 中如果你想输入氢气加水氧气点燃生产水的方程式你应该是这样输入:

$\ce{2H_{2} + O_{2} ->T[燃烧] 2~$H_{2}O$~} $

又或者是合成氨的化学方程式,这是一个可逆反应而且要高温高压催化剂。

$\ce{N2 + 3H_{2} <=>T[高温、加压][催化剂] 2NH3}$

在化学方程式中开头变成了:~$\ce{,结尾是:}$,中间化合物使用的公式基本不变。若要声明反应条件先输入使用的符号比如:「 -> 」或者「 <=> 」,然后接上一个大写字母「 T 」,中括号里面就可以写反应条件了,如果要求两种或者两种以上的条件可以使用两次中括号使其分布与符号的上下两边。 如果你想使用气标只要在气体后面加上「 ^ 」(气体)或者「 v 」(沉淀)即可,我目前只用了一小部分的化学符号,如想你想了解更多可以参考这里: Chemistry notation using mhchem

当我那天晚上折腾到两点以后睡觉以后打算第二天更新一下文章,发在 Medium 上,可是结果我上传上去以后是这样的。

所有的化合物全没了,剩下一脸懵逼的我不知道如何是好,我试着用 Ulysses 导出 PDF 的功能来试试还是一样的效果,于是我想起了我以前写过的一篇文章:《【少数派】如何使用 Instapaper 保存私密文章》(文章是发在 Medium 上面的如果想看需要翻墙),就去抱着试试看的心态把文章发布到我本地搭建的 Wordpress 博客上,结果发现可以正常显示然后心中顺畅了许多了,最后使用 Safari 自带的导出 PDF 功能导出效果完美。


后记:从 2016 年差不多 9 月份使用到现在,我使用 Ulysses 已经差不多 4 个月了,不得不说这是一个非常值的 Markdown 编辑器,自从有了它 MS Word 也就没有安装的必要了,刚刚开始的时候我以为又扯到 JavaScript 这个我从没接触过的东西会很晦涩,结果一路 Google 下来还算顺利,看似高深的东西只要花上一些时间还是可以折腾好的,因为这两天的折腾我可以节省下太多的时间了写出更多的东西,Markdown 这个东西你只要开始写文章,除了图片以外就不用再去动鼠标了,想想如果用 MS Word 来写 1500 个字符左右的化学式是有多么低效你就知道了,而 Markdown 很简单,你只要输入之前打上几个字符,连排版都可以一起完成了,效率倍升。我看了一下这个 LaTeX 不仅仅是化学,象棋,五线谱,有机化学式,电路图一样通吃,理工科的朋友们或许会对这个感兴趣的。至于要使用那个 Markdown 编辑器可以自己选择,合适自己的才是最好的,只要能支持 LaTeX 就行。但是还是忍不住安利 Ulysses 一下,插一个小故事:写化学方程式的时候我公式给忘记了,但是我曾经做过实验但是给删了,想起来他是有自动备份的,一分钟后我在自动备份文件里面找到了可逆号的公式,不然我可能文章就要延迟发布了。

参考资料: