整理一下个人在学习生活中的工作流,根据个人实际需求和实践不断调整更新。

代码编辑

分析一下我目前的需求,我目前需要大量编写如下类型的文件:

  • 文档语言
    • LaTeX
    • Markdown
  • 编程语言
    • C/C++
    • Python
    • MATLAB
    • ...

目前采用的方案如下:

  • VSCode:作为绝对的主力编辑器,只需要进行一些配置就可以支持绝大部分语言;(VSCode的配置需要及时备份)
  • MATLAB:这比较特殊,还是需要使用MATLAB自身的IDE,因为VSCode的插件太拉了;
  • Typora:对于Markdown的轻量级使用,Typora也是一个非常好的选择,比VSCode更加方便。

至于各种编程语言的具体配置,这里就不列出了,比较麻烦。

文献阅读

实际包括两类需求:文献管理、文献阅读与笔记,全部可以依赖Zotero完成

  • 文献管理:
    • Zotero的文献数据库比手动维护文献存储的文件夹方便得多,它可以自动给添加的PDF重命名,提供期刊信息等;
    • Zotero的数据存储依赖坚果云的webdav服务,免费版已经足够使用了。
  • 文献阅读与笔记:
    • Zotero对于文献阅读非常友好,只需要配置一些插件即可,例如翻译插件和参考文献插件等;
    • 使用better-notes插件,在提供笔记模板之后,Zotero可以自动生成Markdown格式的阅读笔记,比较方便;
    • 后续更专门的整理笔记则需要转移到基于LaTeX的学习笔记中。

在测试使用了一段时间,发现Zotero存在很多潜在问题,因此决定尽量简化使用方式:

  • 分类:对文献进行基本分类
  • 标签:(这部分内容的机制比较直观可靠)
    • 主标签:TODO代表待整理,⭐NOTE代表文献条目有对应的阅读笔记,🚩MAIN NOTE代表独立条目的笔记
    • #标签:代表文献中的关键内容,可以有很多
    • /标签:代表阅读状态,包括/unread/readingreading
  • 笔记:(依赖Better Notes插件)
    • 依赖个人模板自动生成阅读笔记
    • 轻度使用Better Notes提供的双链笔记机制
    • 笔记尽量留在Zotero内部(双向同步功能不稳定,不太可靠),重要笔记单独整理并使用LaTeX重写,不使用导出后的双向同步机制(不太稳定)

除此之外,由插件提供的附近功能尽量不要使用,因为很容易出问题,例如条目关联,阅读进度数据等。

学习笔记

与大部分人不同,对于通常办公需要的office三件套几乎不需要使用,我完全不关心Word和PPT中的各种模板和配置。

分析一下我目前的需求:

  • 需要大量使用LaTeX做数学笔记,基于markdown或者富文本的笔记软件都是不适合的:
    • 富文本笔记的导出和转换都很麻烦
    • 富文本和markdown对于LaTeX公式的支持都是远远不够的
  • 要求数据保存在本地,并且便于迁移,这一点决定了任何非本地的笔记软件也是不可接受的。(之前重度使用印象笔记来拍照记录上课的手写笔记,但是现在那些笔记的导出非常困难,就放在那儿吧)

因此,实际上当前的所有主流笔记软件(印象笔记,Notion,OneNote等)都不适合,也包括很多人重度使用的Obsidian。 我被迫选择在本地使用文件夹组织管理LaTeX笔记,使用VSCode编辑。

考虑到笔记的特点和数据安全性,需要基于Git仓库进行版本管理和备份,只使用单个主分支进行开发,使用USTC LUG提供的GitLab服务进行远程备份(私有仓库),提交信息使用英文,在重要节点使用标签标记。

使用LaTeX做笔记有一个天然的问题:必须准备合适的模板才能做到开箱即用。目前个人整理了四种模板分别对应不同类型的笔记:

  • SimpleNote:笔记模板
  • SimpleBook:书籍模板
  • SimpleBeamer:Beamer模板
  • SimpleReport:课程实验报告模板

都放在Github上的仓库SimpleLaTeX中,主要使用的是Note和Beamer。

在本地使用一个文件夹管理所有的LaTeX笔记和Markdown笔记,例如~/Notes

为了支持笔记文件夹的使用,目前手撸了一个类似于git的命令行管理工具,暂时起名为next,负责笔记文件夹的创建和信息查询:

  • next create ...:创建一个新笔记,具体行为是根据选择的模板类型,从URL拉取对应文件到目标文件夹中,顺便生成.info文件;
  • next index ...:展示所有笔记信息,具体行为是遍历所有的.info文件,获取所有笔记的关键信息,并模仿git log的格式在命令行中展示。

除了LaTeX和Markdown,Jupyter Notebook也是一个不错的选择,它具有如下优势:

  • 导出为HTML和PDF都非常方便,例如可以生成静态网页部署在网站上,如果部署了Jupyter服务器,还可以在线执行代码片段;
  • 在Github的仓库中支持直接渲染展示(比LaTeX的查看更方便)
  • 在支持Markdown的同时,还支持嵌入图片和代码片段等资源。

但是考虑到目前学习笔记管理不宜过于复杂,决定不予采用。

备份与同步

分析一下我目前的需求,有两类需求:

  • 第一类是基于网盘的备份:例如pdf资源,图片视频资源等。
  • 第二类是基于Git的备份:对应那些适合采用git备份的文本资源,例如学习笔记,各种项目代码,脚本等;

先考虑网盘备份,目前的各种商业网盘都不太同满足我的需求:

  • 国外的网盘有网络访问问题,而且付费版太贵了,例如Dropbox和Onedrive;
  • 国内的网盘有数据安全问题,这一点也是不可接收的,例如百度网盘,腾讯云盘。

因此自己又在服务器上搭建了一个Cloudreve网盘,供个人使用,但是它的备份机制是我自己写的Python定时备份脚本,感觉还是不太可靠,最终还是选择付费的100G Onedrive吧。

目前关于云盘的所有使用详情如下:

  • 大部分情况:Onedrive(100G基础版)
  • Zotero的数据存储:坚果云(免费版)
  • 网上获得的各种资料(备考资料,软件资料等):百度网盘
  • 早期手机上的大量相册和视频:百度网盘(加密)

电脑桌面的很多垃圾最近终于被我清理完成了,顺便用Onedrive把桌面文档同步备份一下。(百度的同步空间非常垃圾,用是不可能用的)

下面的内容比较重要,因此采用多平台进行备份:

  • 学术备份(包括与毕业论文和期刊论文相关的文档和代码):打包压缩在三个平台备份(Onedrive + 睿客网 + 百度网盘)
  • 课程资料:Onedrive,打包备份在百度网盘

然后是基于Git仓库的备份,目前的使用分成三种情况:

  • 大部分情况下:使用Github(即使偶尔网络不好连不上也没事)
  • 与学习生活强相关的:考虑到安全性和可靠性,使用USTC LUG提供的GitLab服务 https://git.lug.ustc.edu.cn/
  • (特例)当前的Hexo博客网站仓库以及源码仓库:考虑到隐私性和访问速度,使用云服务器自身搭建远程仓库。