(本文中使用的Word版本为Word 2016)
我读论文、看书、上课的笔记,基本是用Word写的,相比LaTeX,目前在这些场合Word仍然有难以替代的优势:
- 编写速度、编译延迟、屏幕占用(一边代码一边显示要占2个窗口)。这些因素使得编写阶段LaTeX的时间、空间和注意力成本比Word更高。要想上课时用LaTeX做笔记并且跟上老师,反正我是做不到的。
2. Word能方便地插入图片、表格。文字的笔记里面有一些图表的话肯定是非常有益的。LaTeX是能画一些精美的图表,但做笔记又不是出书写论文,自己能看懂就行,而且我也没那功夫去画。我笔记里的图主要包括自己画的草图(用数位板或iPad)、论文的截图、黑板的照片,直接粘贴到Word里非常方便。
3. 对理工科学生而言,Word最大的软肋可能就是公式又难打又难看了。用Word自带的公式编辑器,或者MathType打公式需要频繁的键鼠切换,的确会累死人。我目前用的是一个叫Aurora的插件,基本能解决这个问题。
Aurora插件输入
Aurora插件输出
(当然OneNote其实也有这些优势,但它没有一个固定的文字框架,各种框图位置需要自己调整,我用不惯,OneNote我主要用来画草图)
总而言之,只有给别人看的东西我才会用LaTeX写,给自己看的东西我真不追求那点美观。下面进入正题。笔记和代码的一个共同特点是,它们都能用树状结构描述。代码的树状结构不必多说,大家写的时候就能感受到,而从编译原理的角度看,在句法层面一个代码文件就是一颗语法生成树的果实。而笔记同样如此。各种分级标题、序号(像1. 1.3 1.3.4这样的),其实都暗含树状结构。我个人的感受是,做笔记时,如果有主动套用这种树状结构的意识,有利于使自己思路清晰,使笔记结构清楚,可读性强。
有可能是因为接触编程后受到了影响,也有可能是我本来就习惯于这样思考,总之我从大一开始做笔记时就会有意地使用明显的树状结构。所谓“明显的树状结构”包括以下几个特点: 1.不仅在形式上,而且在内容上也是以树状结构组织的,子节点的内容围绕父节点内容展开。2.每个节点言语简短,少用完整句子,多用名词性短语,因为如果使用大段的句子,就看不出树状结构了。3. 使用一定的文字格式在视觉上突出树状结构。
在做笔记的时候,做到前2点对我来说都不难。但在读笔记的时候,要想还原当时做笔记时的结构,仅靠内容判断是不够的,第3点显得尤其重要。这就类似于如果一段Python代码如果隐藏了缩进量,我们大概还是能看出来代码的意思,但是会费力得多。
最开始,受到C/C++和Java的启发,我是这样体现我的笔记的结构的:
C/C++/Java风格的笔记
但这样其实并不容易看出树状结构,因为括号匹配对人眼来说并不是一件容易的事,尤其是存在大量同类括号时。并且右括号要占掉1行空间,会使得1页内能显示的有效笔记行数下降。
后来,我接触了HTML,那时做的笔记大概长这个样子:
HTML风格的笔记
这个确实能看出很强的结构,但写起来很累。。。基本上写1~2页就会放弃。
直到我开始用Python,才发现Python风格的巨大优势:
Python风格的笔记,缩进用空格实现
Python语言用缩进体现代码的树状结构,不仅写起来方便,阅读时也能直观地看出这种树状结构。同样,Python风格的笔记,又好写,又好读。如果不是经常需要插入一些图片表、公式,我甚至一度考虑直接用IDE做笔记。不过,在Word里面,要想方便自如地用Python风格记笔记,仍然有几个问题需要解决。
首先,如何控制缩进量?最直接的想法是用空格或Tab。这会面临以下几个问题: 1.在缩进量很大时,为了缩进你要敲很多个空格或Tab。2. 用回车新建一段时,Word默认情况下并不会自动帮你把光标放到和上一段一样的缩进,你还得敲同样多的空格或Tab。3.当你的文字长度超过页面宽度,Word自动给你放到下面一行时,这一行也是没有缩进的,特别难看:
Word自动换行时没有缩进量
而我们希望的应该是这样的:
希望的情形
(有人习惯于段首缩进2格,但我不建议在Python风格的文本中使用首行缩进)
为什么空格和TAB不奏效?在Python IDE中,新建的行(对应Word中的段落,都是通过回车来新建)会自动继承上一行的缩进量。其实在Word中的段落也是这样的,只不过用空格或TAB做不到。空格是一种伪缩进,在Word看来,空格和能显示的字符没有区别,其实并没有缩进,自然也就不能帮你对齐了。而Tab默认情况下只是首行缩进,而Word的段落继承的是上一段的缩进量,而非首行缩进量(注意2个概念的区别)。
Word有3种缩进——缩进、首行缩进、悬挂缩进,TAB默认增加首行缩进
因此,要实现Python风格的文本,我们仅需设置段落的缩进,而非首行缩进/悬挂缩进就行了。然而,遗憾的是,对于段落的缩进这么实用的功能,Word并没有像Tab和Shift+Tab那样的快捷键,需要我们自己设置。设置方法为如下:
点击“文件”
点击“选项”
依次点击“自定义功能区”“自定义”
左侧框中选择“所有命令”,右侧框中找到“IncreaseIndent”。可以看到默认快捷键为空,设置新快捷键(这里设为Ctrl+D)。
左侧框中选择“所有命令”,右侧框中找到“DecreaseIndent”。可以看到默认快捷键为空,设置新快捷键(这里设为Ctrl+Shift+D)。
打开字体设置命令(FormatFont)的默认快捷键也是Ctrl+D,这个命令一般并不常用。为了避免快捷键冲突,我们将其删去。
完成设定之后,我们就能方便地用快捷键Ctrl+(Shift+)D键盘控制方便增加(减少)缩进量,且另起一段时缩进量会自动继承上一段的缩进量。有了这些Python IDE十分相似的特性,就能方便地在Word中像写Python一样记笔记啦!
Python风格的笔记,缩进用快捷键实现。在课上记录,足以跟上老师讲课。
最后,Word默认缩进2个字符,这个缩进量有点大,会导致每行的长度变短,而且比较难看。这个我们可以通过修改默认制表位来解决:
将默认制表位从“2字符”改为“1字符”