Flynote: taking notes on the fly

本文 is long overdue. 打算写这篇文章已经很久了,最近有几个同学问我这是什么编辑器。我终于又下定决心把这篇文章写完。 本文主要介绍在课堂(讲座)上面实时做笔记的工具。废话,课堂上面做笔记还能不是实时的?做课堂笔记还有其他工具?不就是直接手抄黑板?

本文就是介绍手抄黑板之外的做笔记工具,选入本文的工具的标准如下。

  • 跨平台是必须的。我非常讨厌 macos only。不知道这是不是 macos 开发者的傲慢或偏见,连用 electron 开发的软件都能做到 macos only,我真是服了。
  • 手机、平板软件几乎是不予考虑的,原因是手机、平板本身效率低下。所以,你可能会像我一样天天背着个笔记本。
  • 最好是 free as in speech and free as in beer.
  • 插入数学公式反人类的是不予考虑的,不能插入数学公式更是反反反人类。
  • 最好要易于分享,易于协作。
  • reliability,如果是在线服务,必须要值得信赖,不要像 google 那种搞两天就跑路。
  • portability,文本文件是普世性。差一点的是 html 文件和 pdf 文件。搞个专用的二进制文件格式就没意思了,换一台电脑没装专用软件根本看不到任何信息。
  • 最后要能跟上黑板,要能够做实时笔记(实际上这个是老师说了算)。

所以很多优秀的笔记应用都没有选入本文,比如说quip.

我现在用的是 emacs + auctex。

Table of Contents

handwritting

很早以前又一次下定决心,重新做人,好好听课,好好做笔记。于是找了一些 connell 笔记的模板,打印了出来,估计用不完了。

img_0321-2.jpg

手写是最自然的,感觉是最好的,想写就写,便于思维。最近上一个讨论班, w 老师 说当年另一位 w 老师去美国当博士后,放在 x 所的笔记都没有整理,后来弄丢了(那还是八几年),那些笔记本来可以搞个大新闻的,结果被人截胡了。你想不想造成这样的人间惨案?不想的话,接着往下看。

Compressing and enhancing hand-written notes

现在手机上面有很多软件能够将照片处理成扫描的效果,比如 camscanner(好像我的 pixi 上面都装过这个),比如 office lens。事实上现在用这些软件“扫描”出来的图片可能比真正扫描仪扫的照片效果还要好。

kinldeOfficeLens.jpg

问题是手机扫描 does not scale,主要并不是能不能批量转换成类似扫描出来的效果的图片的问题。主要是拍原图的时候你需要防手抖,光线好,角度棒等等,拍个照片都难以一次拍好,何况拍个用来扫描的。有些图片效果比另外的图片效果好一些,作为一个强迫症,你肯定要弄到一样好为止,结果这张图片效果反而比另外一张图片效果更好了,然后依此循环。上面的软件用来偶尔扫描一两页纸还可以,但是你要扫描一门课程的笔记的话,那就是找虐。所以你可能还是需要便携式的扫描仪。

扫描完成后记得保存成 pdf 或者上传到 evernote,onenote。保存成pdf 之后可以用一些 nitro pdf, abby 之类的软件进行一次 ocr。这些软件事实上会把 pdf 文件分成两层,一层就是原来的图片,你看到的就是这一层,另外一层就是 ocr 得出来的文字,这一层是隐形的。你可能有时候会发现一些明明是扫描的 pdf 文件,还能复制上面的文字,事实上你复制的就是下面那层的文字。弄完之后就可以搜索了,不然光是扫描的图片没法搜索。上传到 evernote 或者是 onenote 你就不要管了。它们会自动 ocr,你直接搜索关键词就能搜到相关图片。免费的解决方案The 3 Best Free OCR Tools to Convert Your Files Back Into Editable Documents.

做的笔记最后总是要拍照保存到电脑上的,还是直接拍黑板吧。

Onenote

Onenote 确实是个神器,如果你没有意识到的话,可以先看下这两个视频。Ultimate Student Guide To Using Microsoft Surface 3 and Surface Pro 3Ultimate Student Guide To Using Microsoft Surface Pro 4 and Surface Book。我只看了第一个视频,第二个视频是第一个的更新。另一个教程OneNote 101: Take More Creative and More Organized Notes with Microsoft OneNote. 如果你希望买个带笔的 Windows 平板或笔记本的话,可以参考这个链接 List of Windows 10 tablets and convertibles with stylus。上个帖子的作者也做了一个详细参数对比。 Surface Pro 确实是个 game changer。我买 Surface Pro 的时候想要买一个带笔的平板电脑选择还是不多。现在苹果出 ipad pro 都已经很久了,相信苹果本来也是不想推出这种类型的产品的,相信苹果推出这种类型产品也没想过攻城略地,只不过想要继续 lock down 已有用户。总之竞争是好事。现在高校里会发光的都不是金子了,是苹果的logo了。傻逼微软应该好好推广一下 onenote。反正我当初就是因为 onenote 才买的 surface的。这是我在还拥有 surface 的时候做的一次笔记,现在已经不知道这写的是啥了。

Bildschirmfoto2017-04-18um22.51.43.png

Onenote tips

  • 你其实也可以在 word 里面像使用 latex 那样打公式,启用的快捷键是 alt+=。你再也不用傻逼一样的一个一个找希腊字母了。
  • 另外在 word 和 onenote 的桌面版里,你可以直接粘贴 mathml 代码。这里有个 latex 转换成 mathml 的网站。MathToWeb Online 这里有一个 latex 到 word 公式的转换器(chrome 插件).
  • uwp 版本的 Onenote 可以识别公式
  • ink 不止是一个图片那么简单。ink 保存的信息远远不止你看到的那一层图片。
  • 公式写完之后就可以搜索了,自动 ocr。你可以输入关键词搜索一下,应该是能搜到你写的东西的,当然前提是你的字迹要没我的好看。
  • 你以前写的东西可以通过 office lens 扫描上传到 onenote,上传完就可以搜索了。

Onenote 优点

其他普通优点我不说了

  • 免费
  • office lens
  • 几乎跨平台(几乎的意思是不支持 Linux)
  • 手写支持
  • ocr 支持
  • 搜索非常方便
  • stuff notebook 共享起来爽得很

Onenote 缺点

  • 同步据说很慢
  • 只是几乎跨平台 (意思是不支持 Linux)
  • 输入数学公式还是需要折腾
  • 比起 ipad pro,surface pro 还是太贵,微软凭什么跟苹果比?
  • school notebook 要 office 365

Onenote alternatives

如果你使用的是 Linux,或者你就是不想用 onenote,你可以尝试一下下面的软件。xournal Nebo

ipad pro

另外如果你用的是 ipad pro,可以参考下面的。 ipad pro 真是垃圾(当我说这个的时候,我没有用过,欢迎喷我),我不是针对苹果,我是说所有的平板,所有的手机都是垃圾。但是有人也能把它变废为宝,见iPad Pro 和它的学术养成记iPad Pro 学术指南。这丝毫不影响我觉得 iPad 就是个垃圾。

Sony DPT-RP1

第一代是 DPT-S1,在我有限的生命里,我仅看到过一个人使用这东西。第一代最低的时候 amazon 上的价格似乎是 500 美元。差一点就冲动了,不要问我怎么冷静下来的,我只是没钱。第二代已经发布了. Sony’s new superthin E Ink tablet costs just $700.

Latex

Real Time LaTeX? [duplicate]

有很多人喜欢 live-texing,做了一些很有意思的笔记。比如Chao Li’s homepageEvan Chen。做笔记还可能出书,张寿武的pubulication的第一项就是他给 Faltings 做的笔记 Lectures on the Arithmetic Riemann-Roch Theorem。我在好多书的前言里看到作者感谢 Loring Tu 做的笔记。我怀疑 Differential Forms in Algebraic Topology 就是 based on Tu 上课的时候做的笔记。这两个励志故事告诉了我们,你要给大牛做笔记。

有一些人写过在课堂上用 latex 实时做笔记的建议Advice on real-time TeXing, A Live-TeXing Experiment, How to take lecture notes with LaTeX. 你可以参考一下他们的文章。

overleaf or sharelatex

很早以前我是用的 overleaf,推荐latex 初学者使用这个。初学者遇到的最大沮丧之一就是,搞了半天没法打出中文。用overleaf,sharelatex之类的就不要管这些问题了,直接输入中文就行。overleaf 安装宏包起来不折腾,因为你根本不需要安装,直接 usepackage 就够了。因为 overleaf 可以不要注册使用,所以我没选择 sharelatex

overleaf 优点

  • 历史版本
  • git
  • 协作 共享 方便
  • 不折腾

overleaf 缺点

使用这些在线服务的问题在于

  • 严重依赖于网络,有时候断网重连发现,你刚才敲的少了一部分。编译完之后你发现光标又跳到前面去了,打了一段之后才发现放错位置了。
  • 编辑器不够强大,比如说你要插入一个定理,你首先需要输入 \begin{ 然后 tab 可能会出现 theorem,但是问题是你可能会插入很多其他自定义的环境,比如说 claim,这时候 overleaf 就无能为力了。在普通的编辑文字上,相比emacs 之类的专门文本编辑器,overleaf也差太远了。
  • 免费用户限制较多

texmacs

Texmacs is inspired by tex and emacs。我是被这句话吸引的,结果发现这东西即不像 tex 也不像 emacs。

texmacs 优点

  • 所见即所得
  • 有很多goodies,比如,插入希腊字母很方便
  • tex 半兼容 上手成本低
  • 和 lisp 集成

texmacs 缺点

  • 卡卡卡
  • 生态系统没 tex 好。 各个出版商都搞的是 tex 模板 texmacs 毕竟不是 tex。tex在线编译啦,格式转换都是要甩 texmacs 几条街,更重要的是 ctan 里边多少包啊。画图啊,计算各种都有。在线编译 tex 的服务很多了。在线编辑 texmacs 的一个也没有。估计也不会有。
  • 编辑器太差
  • 用文本编辑器来写 texmacs 好像是找虐
  • 和 tex 只是半兼容,很多tex 上的东西没有相对应的,比如说要自定义个定理环境就很麻烦,我看了官方 manual 没找到答案

jupyter

搞大数据的现在很多都在用jupyter。我做课堂笔记用这个不直接用 markdown + mathjax 的原因是,这东西可以分很多部分,可以命题一个部分,证明一个部分,另外计算什么根本不费劲了。如果你希望只使用 markdown,推荐leanote, wiz note.

jupyter 优点

  • markdown 简单到不能再简单了,那就是纯文本了。
  • jupyter 可以和各种语言交互
  • 一个笔记本,可以分很多部分
  • 不止是课堂笔记,也有很多人在做大数据笔记
  • 转换格式很方便,nbviewer
  • jupyterhub

jupyter 缺点

  • 定义section 用 几号标题优点 low 啊
  • 而且定理 命题 证明 编号 手打 有点烦
  • 引用就更不用说了

同步方案

jupyter alternatives

R Markdown

tiddlywiki

个人 wiki 才是真正适合的知识管理的方式。用 latex 打出来的课堂笔记是个孤岛。你不能和其他知识串联起来。个人 wiki 的话,你可以将自己所有知识都放到里面。latex 的优势是能够生成一个完整的独立的文档。 个人 wiki 的优势是大杂烩,你个人的整个知识库,不止是一门课程,一次讲座,你可以把所有知识都放在一起管理。Gowers 也被推销使用了tiddlywiki 是一个能够把所有东西都保存成一个 html 文件的个人 wiki 软件。

tiddlywiki 优点

  • 跨平台,世界上 portability 第二好的文件格式 html,还有哪太计算机打不开 html 文件?你根本不需要安装其他软件就能使用 tiddlywiki。
  • 单文件,你可以把所有东西都放到一个 html 文件统一管理。
  • 服务器版本。
  • 因为是网页文件,所以共享、协作都很方便。
  • 便携性很好
  • 知识库 personal wiki 比 latex 只搞一个文件 好

tiddlywiki 缺点

成也萧何,败也萧何。

  • 网页应用的局限性,不够轻量。自动保存还需要装一个 firefox 插件
  • 桌面版似乎很久没有维护了
  • 单文件管理有时候也不太好,文件体积太大,同步一次也要烦得要死。
  • 即使是用服务器版本,启用 nginx 最大的压缩,网页依旧很大。

Captured’cran_2016-12-04_19-47-30.png

instiki

instiki 是另一个服务器个人 wiki 程序。这个和其他相比,对数学是原生支持的。nlab 也用的是这个。

  • 服务器版本
  • 需要维护
  • 协作方便

Vimwiki

待更新。

org mode

待更新。

emacs auctex

下面可能出现 Emacs Key Notation。简单来说,C=Ctrl,M=Alt,C-x=Ctrl+x,RET=Return

emacs as a generic editor

所有从入门到放弃的 emacs 用户都会说,人生苦短,我用 sublime text,我用 atom,我用 visual studio code。所有从入门到不放弃的 emacs 用户都说,我真希望自己能够早一点使用 emacs。这两个事实表明了,第一 emacs 入门不容易,第二 emacs 早入门好。

编辑器是一个你需要如此经常接触的软件以至于像学习 emacs 一样的巨大投资总体衡量起来也是很有益的。何况,emacs 不只是一个编辑器。熟悉掌握 emacs 对写文章,写代码,写其他一切都很有帮助。 emacs 能够大大提升你的创作效率,emacs 能够改变你的思维方式。Learning emacs is a life changing experience. ruby 创始人 Yukihiro Matsumoto 就有过一个非常感人的演讲,How Emacs changed my life

emacs 是一个“操作系统”,你可以在这个操作系统上看视频,浏览网页,回复邮件,你完全可以“生活”在 emacs 的世界。这个操作系统有一些非常有用的工具,这些工具可能是其他地方完全没法找到,找到的也完全没法比拟的。比如说 org-mode,org-mode可以说是 gtd 领域神器,而且是一个非常厉害的笔记工具,再比如说 magit。

Emacs 的知名用户很多,你会发现很多计算机领域的大牛都用它。Famous Emacs Users (that are not famous for using Emacs)

Why emacs?

作为一个通用文本编辑器, emacs 有何优势?

跨平台之类的就不说了。

  • 一切都是文本,选项是文本,所以搜索非常方便。现在你可以搜索菜单选项了。你只需要回忆一下你曾经为了找某个菜单花费了多少时间就可以意识到,一切都是文本的好处。

fileHistory.gif

如果你看不清的话,请点击原视频。上图是我的最近打开文件列表,我可以搜索最近打开的文件,搜索到之后回车就能打开该文件了。最近打开的文件多了,找到真正想要打开的并不容易。

  • 一切都是 lisp 函数。lisp 函数又可以轻松调用, M-x,或者是设置好快捷键。你可以极大限度地扩展 emacs。
  • emacs 的包很多,比如我这篇文章的目录就是由 markdown-toc 生成的。emacs 的插件可以做一切事情。你也可以自己用 lisp 写插件。
  • 另外值得一提的是emacs 的交互方式。交互方式是真正的交互,它不要求你一次记住正确的请求,它会在你输入的时候反馈已知信息的结果,以便进一步筛选结果的,你只需要记住少量的关键信息就行了。

interactiveemacs.gif

如果你看不清的话,请点击原视频。上图一开始我按下 C-x,下方的被称为 Minibuffer 的小窗口提示我再按下某某某键盘会调用某个 lisp 函数。这个是 which key 这个插件提供的功能,这个插件非常有用,有了它,妈妈再也不用担心我记不住快捷键了。C-x C-m 和 M-x 是一样的。 按下 M-x 之后,我可以调用 lisp 函数。可以看到 emacs 会自动补全命令,我并不需要完整输入 package-remove 这个函数。在输入的过程中,我可以看到动态地看到 emacs 找到的结果。 emacs 还有很多其他特色功能,自己去探索吧。

为什么学习 emacs 会这么值?假如你已经熟悉了 emacs,那么使用 emacs 来编辑 latex 文件就是 bonus。假如你暂时对于 emacs 还不熟悉,你发现学会使用 emacs 编辑 latex 之后,你已经掌握了一个强大的 ide 的很多功能。总之,emacs的一个巨大优势在于,它能干很多事情,它不止是一个 latex 编辑器,不止是一个 python ide,它是更多。你不需要先学会使用某个 python ide,再学会使用某个latex 编辑器,你学会使用 emacs 就够了。

上面是推销 emacs 作为一个通用文本编辑器。下面推销 emacs 作为一个 latex 文档编辑器。

emacs as a latex editor

作为一个 latex 文档编辑器, emacs 有何优势?

  • pdf tools,如上所述,emacs是一个操作系统,你可以在emacs里浏览网页,看视频,你也可以在 emacs里看 pdf 文档。pdf-tools 是我 在 Windows 下 pdf 阅读的避难所。 Windows 上有很多 pdf 阅读器,我需要一个可以自动切边,支持夜晚模式的pdf 阅读器,所有这些 pdf 阅读器竟然不支持这两个最简单的功能。最后竟然发现我只能用 cygwin 安装 emacs,在 emacs上 运行 pdf-tools。
  • 分屏。据说,emacs在很早的时候是唯一提供窗口管理的文本编辑器,那时候emacs 可是酷得不行,当然现在也很酷。C-x 2 上下两块, C-x 3 左右两块,你可以创建更多的板块。对于编辑latex来说,你可以左边是 latex 文本文件编辑窗口,右边是生成 pdf 文档阅读窗口。

2017-04-18-100953_1364x721_scrot.png

  • auctex 预览 latex 公式。 _^ 上升下降效果。
  • flycheck 即时发现文档错误。
  • 快捷方式,我暂时没有发现哪一个编辑器对于latex的快捷方式有这么顺手的,比如说你需要插入一个新的定理环境,最开始你可能会跟我一样一个个敲
\begin{theorem}
\end{theorem}

后来聪明的我学会了先复制一下这段文字,一个问题是默认的剪切版只保留了最后的那一份拷贝,你写的时候会有很多东西需要复制,所以你又要重新复制一下上面的,这样一个相当 trivial 的插入定理的任务也变得不那么 trivial 了。在 emacs 里你可以直接 C-c C-e 然后输入 theorem 搞定。你也许会告诉我,这个功能很多编辑器都有类似功能。但是加入我现在需要输入一个自定义的环境,比如说remark。其他编辑器很可能就无能为力了。

  • kill ring,上面说到了你可能会有很多东西需要复制,此时记住剪切版就很重要了。kill ring 可以让你粘贴已经被覆盖的剪切版上的内容。
  • 键盘宏,在很多时候,你想要迅速输入以前输入过的内容,你会选择复制粘贴。但是即使有了上面所说的 kill ring,你要找到想要复制的内容还是要好一定的时间的。而且每一次新的复制都会覆盖原来的内容,所以用复制粘贴并不是太爽。emacs 的键盘宏可以让重复上面输入的一系列键盘指令。而且你可以给你定义的宏命名。命名完之后你可以直接运行这些不同的宏,你也可保存它们,使得下次开机或换台电脑还是可用。
  • abbrev mode 缩写模式,空格一下,喀擦一声,自动帮你把你定义的缩写改成长语句。
  • yasnippet yasnippet 可以给你所在的 major mode 定义模板。举个例子来说,下面是我的一份专门用来做课堂笔记的模板。
# -*- mode: snippet -*-
# name: new lecture notes
# key: nln
# --
\documentclass[12pt]{article}
\usepackage{../templates/notesfather}
\title{$1}
\author{XX}
\date{`(format-time-string "%a, %d %b %Y %T %z")`}

\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage

$2

\end{document}

$1, $2 是我需要根据实际情况更改的东西。我只需要更改模板的 $1到我需要的标题,$2到我要打的内容。这个模板可以自动输入现在的时间,使我免于每次手动输入时间。你可以定义很多这样的模板,比如说,老师要手推公式了,你可以准备一份对齐公式中的项的模板。

使用教程

言归正传,如果你以前没有使用过 emacs,首先你需要照着 emacs 的官方教程来一遍,不管教程上的有些任务是多么的trivial。打开 emacs,按下C-h t即可进入教程。做完之后,保存官方cheatsheet,先浏览一遍,虽然肯定记不住具体的快捷键是什么,但是可以记住哪个位置可以迅速找到你需要执行任务的快捷键。现在你就可以开始写文章了。写文章过程中有很多快捷键忘记了,你就打开cheatsheet再看一遍,要反覆看,反复练,还有一个 Emacs Newbie Key Reference 也推荐你多参考。你写的过程中会有很多需要重复执行的繁琐任务,这个时候就不要忘记了,你永远都会有更加 elegent 的方式来执行这种重复的繁琐任务。这时候要勤于搜索,你会发现很多堪称 life-saver 的技巧或者插件。更新:有人说学习 emacs 分为三个部分,学习编辑器,学习插件系统,以及学习elisp。上面大体就是学习了前两部分。

下面的网址让我获益很多。

另外mastering emacs 的作者出了一本同名的书,看评价似乎很不错,可以看看(更新,我看了,是很不错,推荐)。Sacha Chua 的一张图片也很不错。

How-to-Learn-Emacs-v2-Large.png

auctex emacs 安装

tex 和 emacs

先安装 texlive 或者 MiKTeX,Windows 记得要设置好环境变量 PATH(安装程序应该会自动帮你设置好)。 再安装 emacs。我推荐你使用下面这两种 emacs bundles。Vincent Goulet Emacs bundle, Aquamacs

因为官方的 emacs 可能有些地方需要折腾。不要花时间折腾了,如果你使用官方的 emacs,尤其是如果你用的是 windows版本的 emacs,刚开始使用 emacs 的时候 可能会碰到一些坑,比如说默认不带 gnutls、libjpeg。为什么我的 emacs 打不开 https 网页,看不到图片?作为一个新手,你会感到非常受挫。我推荐你使用上面的两个 emacs buddle,他们都集成了一些常用的功能,比如说 auctex,理论上应该是到手就能用了的(如果你安装好了 texlive 或者 miktex,并且设置好了环境变量 PATH)。我在使用 windows 的时候用的是 Cygwin 下的 emacs。cygwin emacs 有一个好处,能够安装 pdf-tools 插件,这样 emacs 就可以化身为 pdf 阅读器了。

上面说了 使用官方的 emacs 会踩到坑,你需要 gnutls 支持才能安装包。实在不行你就用国内的 http 源吧。把下面的代码加入到你的 init.el (这个文件的位置在下面)。

(setq package-archives '(("gnu"   . "http://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")
    ("melpa" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")
    ("melpa-stable" . "http://mirrors.tuna.tsinghua.edu.cn/elpa/melpa-stable/")))

插件

安装 flycheck smartparens browse-kill-ring which-key

打开 emacs 执行如下操作,即可安装上述插件

M-x package-install RET which-key RET
M-x package-install RET smartparens RET
M-x package-install RET flycheck RET
M-x package-install RET browse-kill-ring RET
M-x package-install RET yasnippet RET

编辑 init.el 以启用上述插件。init.el 的路径如下,如果文件夹不存在,就新建一个。

  • *nix: ~/.emacs.d/init.el
  • Windows: C:\Users\你的用户名\.emacs.d\init.el

添加如下内容到 init.el 以启用上面的插件。

(global-flycheck-mode)
(which-key-mode)
(smartparens-global-mode t)
(browse-kill-ring-default-keybindings)
(yas-global-mode 1)

(可选)安装 pdf-tools

(可选,建议安装)安装 starter kit

建议

  • 保存一份LATEX Mathematical SymbolsThe Comprehensive LaTeX Symbol List以及AUCTEX Reference Card,这样就不要天天 google 了。
  • 不要吝啬换行。公式打多了难免出现错误。怎么样迅速找到错误才是重点,当你某一行的字数过多,你很难快速找到错误。
  • 最常见的错误往往是 { } $ 漏掉了。更坑的是这种遗漏的错误提示经常是有些莫名其妙的。所以最好使用 smartparens。
  • 要多用 tab,要作死的用tab。原因有两个,第一这样效率会高一点,第二是这样不会出错。我以前经常把 \lambda 打成 \lamdba,输入时间+查错时间+更正时间 $\gg$ 手指移动到 tab 键的时间。
  • 要多使用更加 emacs 的快捷键。比如说 上下左右方向键,要换成 ctrl+p n b f,方向键太远了,你敲这些键手要脱离原来位置很远,重新打字又要回来。其他的跳过单词,跳到行首,行尾之类的也经常用。
  • 要多使用Useful shortcuts or key bindings or predefined commands for emacs+AUCTeX
  • 你可以搞一些缩写,比如定义\newcommand{\st}{such that }\newcommand{\ie}{\emph{i.e.} }。或者使用Abbrev Mode,更或者用 autokey 之类的软件。
  • 同一个课程里面经常使用的语句最好定义 keyboard macros,给这些宏命名,这样输入比复制粘贴快很多。
  • 经常用到的,但是每次用到可能稍有差别的要用 yasnippet 新建一些 snippet。
  • 可以保存一些 minimum working example 放到本地,免得每次上课要 google,严重打乱你的工作流。
  • 有些常用的符号要定义几个新的命令,比如
\newcommand{\avg}[1]{\left< #1 \right>} % for average
\renewcommand{\d}[2]{\frac{d #1}{d #2}} % for derivatives
\renewcommand{\dd}[2]{\frac{d^2 #1}{d #2^2}} % for double derivatives
\newcommand{\pd}[2]{\frac{\partial #1}{\partial #2}} % for partial derivatives
  • 不同的课程要定义一些不同命令,比如说代数几何、复几何里边 \newcommand{\OO}{\mathcal{O}} 这个是不可或缺的,手打 \mathcal{O} 就能累死你。几何课{\mathrm{vol}}就能累死你,物理课,打\frac{1}{2}就能累死你。
  • 模块化自定义的东西,把自己定义的一些命令,用的那些包之类的都保存到一个单独的文件,\usepackage{../templates/notesfather},这样复用和修改都方便很多。
  • 碰到符号不知道怎么打出来可以使用DetexifyHow to look up a symbol or identify a math symbol or character?Classify
  • 另外几乎所有的网站上面显示数学公式都是用的 mathjax,你可以在数学公式上右击查看 tex 源代码,亦见How to convert PDF to (La)TeX?
  • 有人建议使用 latexmk 监视文件变化,然后自动编译。我建议你使用 emacs 自带的 run-with-timer。把下面这个加入到你的 init.el。每隔60秒钟,自动编译一次。
(add-hook 'LaTeX-mode-hook 'my-LaTeX-mode-config)

(defun my-LaTeX-compile ()
    (interactive)
    (save-buffer)
    (TeX-command "LaTeX" 'TeX-master-file))

(defun my-LaTeX-mode-config ()
    (smartparens-mode 1)
    (run-with-timer 10 60 'my-LaTeX-compile))
  • 编译不通过的地方先注释掉。可以加一个 FIXME,等到有时间了再搜索 FIXME
  • 图片什么的复杂东西,不要即时画,加个 todo 到文档里边,使用上面的 FIXME,或见How to add todo notes?
  • 对于老师留的练习什么的,你可以定义一个 excercise 环境,然后使用一个新的 theorem style,How to produce theorems in which the color of heading and body of the theorem my differ?,使得excercise的文字都是红色的。
  • 可以一个 tex 文件记录一堂课,再使用 \input{lecture09}
  • 一定要做死地复制那些可能会复用的符号,选择的是时候可以使用 smartparens 快速选择括号内的文字。然后 browser kill ring C-s 搜索前面的符号,快速输入,或者使用下面的 parcerllite 之类的工具。还有比如说几何分析课里边的 Let $M$ be a complete Riemanian manifold with $\Ric \geq 0$ 这类的每个定理都会使用的也要先复制一下。
  • 你也可以使用 parcellite,或者其他类似的剪切版工具,这样不止是 emacs 能使用。

parcellite.gif

如果你看不清的话,请点击原视频。更新:我现在在使用 CopyQ,更加强大。

  • 可以用 git 之类的版本控制系统。What are the most common mistakes that beginners of (La)TeX and Friends make? 中有人说 Not using version management for your document.

  • 一个关于 vi 和 emacs 的笑话是,vi 不然会让小拇指痛。一开始我也只是一笑置之。用久了之后是真的感到小拇指疼痛。你可以用 xmodmap、Karabiner之类的软件将 caps lock映射到 ctrl。我个人还将右alt映射到了hyper,space映射到了Mode_switch。我用的是垃圾 chromebook,sb Google出的键位残缺品。所以我还把 tab 键映射到了 super,super映射到了ctrl,ctrl映射到了 tab。我用xcape使得单独敲击 Mode_switch 是 space。现在 space+1=!,space+e=esc,space+o=enter,space+b=backspace,space+hjkl=上下左右。总之,映射完之后我手掌根本不需要动了。

My workflow

因为很多任务需要天天重复,所以我写了个简单的脚本,使用效果见视频。是不是感觉很乱不知道我在搞啥子?其实就是做了

workflow.png

cat ~/.i3/config

mode "launcher" {
    bindsym n exec --no-startup-id exec xfce4-terminal -T 'floating fzf live notes files' -e ~/.scripts/noting.sh; mode "default"
}

cat ~/.scripts/noting.sh

#!/bin/bash
if [[ $(uname) == 'Linux' ]]; then
    OPEN=~/.scripts/emacsclientmod
    FOLDER=~/Sync/docs/tex
elif [[ $(uname) == 'Darwin' ]]; then
    OPEN="emacs"
    FOLDER=~/Onedrive/Sync/docs/tex
else
    exit
fi

echo "working directory: $FOLDER"
cd "$FOLDER" || exit

searchFile() {
    IFS=$'\n' out=$(find . -maxdepth 1 -type d | cut -c 3- | grep -v -E '^\.(.*)|^$|templates' | fzf-tmux --select-1 --exit-0 --expect=ctrl-o,ctrl-n)
    key=$(head -1 <<< "$out")
    directory=$(head -2 <<< "$out" | tail -1)
}

preOpenFile() {
    if [ ! -f "$mainFile" ]; then
        cat >"$mainFile" << EOF
\documentclass[12pt]{article}
\usepackage{../templates/notesfather}
\title{$(basename "$directory")}
\author{YI}
\date{$(date -R)}

\begin{document}
\maketitle
\newpage
\tableofcontents
\newpage

\end{document}
EOF
    fi

    if [ ! -f "$currentFile" ]; then
        cat >"$currentFile" << EOF
%%% Local Variables:
%%% mode: latex
%%% TeX-master: "$directory"
%%% End:
EOF
        sed -i -e "/\\\end{document}/{i\\\\\input{$(date +%F).tex}" -e ':a;n;ba}' "$directory/$directory.tex"
    fi
}

openFile() {
    (i3-msg workspace 0:noting && i3-msg append_layout ~/.i3/workspace-noting.json &)
    (nohup ${OPEN} "$currentFile" >~/nohup.out 2>&1 &)
    sleep 10
}

gitpush() {
    title2="$(basename "$directory")"
    export title="$title2"
    sxhkd -c ~/.config/sxhkd/notesGit >~/nohup.out 1>&1
}

searchFile
if [ -n "$out" ]; then
    if [ 'ctrl-n' = "$key" ]; then
        directory="$(zenity  --title 'Create a new folder' --entry --text 'Please type in the name of the folder')"
        mkdir -p "$directory"
    fi
    mainFile="$directory/$directory.tex"
    currentFile="$directory/$(date +%F).tex"
    echo "directory: $directory"
    echo "currentFile: $currentFile"
    preOpenFile
    openFile
    gitpush
else
    exit
fi

cat ~/.config/sxhkd/notesGit

super + ctrl + p
    ~/.scripts/notesGit.sh $title

cat ~/.scripts/notesGit.sh

#!/bin/bash
title=$1
if zenity --question --title "git push"  --text   "push $title to remote git repo?"; then
    error="$(echo 'git add . && git commit -m "auto push: notes of $title on $(date +%F)" && git push' | bash 2>&1 > /dev/null)"
    if [[ $? -ne 0 ]]; then
        notify-send -u critical -t 3000 "push $1 error" "$error"
    else
        notify-send -t 3000 "push $1 success"
    fi
fi
Publié le par v dans «Misc». Mots-clés: Latex, Onenote, Texmacs, org-mode, jupyter, office lens, flynote, emacs, auctex, tiddlywiki, vimwiki, instiki