Emacs 用于科学

作者:Joey Bernard

我通常报道用于实际计算以促进科学知识进步的软件包,但这次我将探索科学计算领域中一个稍微特别的工具。

Emacs 是一个文本编辑器,几乎拥有操作系统的所有功能。 一系列增强功能和配置设置捆绑在一起,以 scimax 的名称提供。 作为 Emacs 用户,我很惊讶之前从未听说过它。 这个项目已经开发了一段时间,但最近开始受到更广泛的关注。

然而,在安装它之前,您需要安装最新版本的 Emacs 以获得所有必要的功能。 与我的大多数文章一样,我假设您正在使用基于 Debian 的发行版。 您可以使用每日快照软件包安装 Emacs,该软件包可在官方 launchpad 存档中找到。 使用以下命令安装它


sudo add-apt-repository ppa:ubuntu-elisp/ppa
sudo update
sudo install emacs-snapshot

这将确保您拥有最新和最好的版本。

安装完成后,继续安装 scimax 代码本身。 您可以使用以下命令从主 GitHub 存储库中获取它


git clone https://github.com/jkitchin/scimax.git

使用以下命令启动它


emacs-snapshot -q -l path/to/scimax/init.el

第一次执行此操作时,Emacs 将会进行大量活动,下载并安装您需要的全套额外软件包,以便 scimax 代码具有所有必需的依赖项。

当您最终安装完所有内容并启动 scimax 时,您将在 Emacs 会话中看到几个新的菜单项。

图 1. 您将在 Emacs 窗口顶部看到几个新的菜单项条目。

scimax 所有工作的真正驱动需求是使研究更易于重现,并以最小的额外开销处理研究文档。

由于您希望在 Emacs 中使用有组织的文档,因此 scimax 的基础构建在 org-mode 之上。 Org-mode 本身可能是一个您会希望研究的强大工具。 Scimax 采用这个强大的核心,并通过一系列快捷方式使其更易于使用。

由于 org-mode 的强大功能,如果您至少学习如何使用此软件包的主要部分的基础知识,那将是非常值得的。 Org-mode 有自己的标记语法,而 scimax 添加了一层快捷方式,使编写更容易。

除了常规的 org-mode 标记语法之外,scimax 还使包含 LaTeX 部分以实现更高级的文本布局变得更容易。 科学领域的许多人都熟悉 LaTeX。 对于那些不熟悉的人来说,LaTeX 是一个文档布局程序,您可以在其中编写文本并为 LaTeX 引擎包含布局指令。 想法是将文本与文本的格式分离。

如果您的研究包含图形图像,scimax 添加了一些额外的功能,通过使用 imagemagick 软件包中的外部程序,使图像缩放和呈现比 org-mode 默认值更好。

由于 org-mode 被设计为 Emacs 的文档结构化软件包,因此它允许将您的文本导出为许多其他格式。 此外,由于它将格式与实际文本分离,因此它可以应用于许多不同的文档结构,例如文章、书籍或网页。

Scimax 使用 ox-manuscript Emacs 软件包来处理导出为高质量文档格式。 当您需要以 PDF 等格式生成科学报告或文章的最终版本时,这非常有用。

文档中的书目参考通过 bibtex 条目处理。

到目前为止,我快速概述了通过 scimax 提供的文档管理、组织和格式化工具,但 Emacs 和 org-mode 具有更多功能。 您可以通过几种不同的方式与外部世界互动。 第一种是通过电子邮件。 您可以抓取文本的选择或整个缓冲区,并在 Emacs 中发出 org-mime 命令,以指示它发送基于 HTML 的电子邮件。 根据您的系统,您可能需要额外的配置才能使其按预期工作。

与外部世界互动的另一种方式是通过 Google 搜索。 作为一名经常写作的人,我无法低估在写作时打开 Google 窗口以验证某些事实或陈述的需求。 使用 scimax,google-this Emacs 软件包会被安装,并在您工作时可用。 这使您可以根据特定的文本选择或整个缓冲区的内容,立即从您正在处理的文档中启动 Google 搜索。

除了与外部世界通信之外,与外部工具的另一种强大交互是通过 org-mode 运行外部程序并将其输出插入到文档sections的能力。 这一功能使可重复研究的梦想成为现实。 您确实需要勤奋并将其付诸实践,但您不再有借口说这是不可能的。 想法是,在 org-mode 文档中,您可以定义一个代码块,该代码块进行一些计算或生成一些图形。 然后,您可以让 org-mode 触发此块,以便可以通过外部引擎运行它,并将结果拉回并作为原始位置的显示文本插入。

scimax 中配置的默认引擎是 Python,这绝对是一个好的起点。 通过更多配置,您可以添加对其他几种语言的支持。 这里的强大之处在于,您始终可以返回到生成某些结果或某些图形的原始代码并重新创建它。 越来越多的科学期刊要求这种程度的可重复性,因此将其作为文章内容的一部分直接意味着您永远不会丢失它。

我想介绍的最后一件事是如何组织 scimax 帮助您完成的所有工作。 最高级别的组织是设置项目的能力。 项目本质上是一个目录,其中包含给定项目的所有关联文件。 这些项目由 Emacs projectile 软件包处理。 此软件包允许您在项目之间移动、在项目中查找文件或在给定项目中执行全面搜索。

Projectile 假设这些项目目录位于某种版本控制系统下,例如 Git。 幸运的是,scimax 包含 magit Emacs 软件包,它添加了许多额外的功能,使您可以直接从 Emacs 与当前文件所属的 Git 存储库进行交互。 您可以创建或克隆存储库、暂存和提交更改、管理版本之间的差异,甚至处理推送到远程存储库和从远程存储库拉取。 除了对 Git 存储库的显式控制之外,scimax 还包括 org-mode 的扩展,以处理跟踪更改以及在 org-mode 文档中插入编辑标记。

将所有这些组织工作放在一起,scimax 提供了创建和使用科学笔记本的能力。 一系列以 nb- 开头的命令允许您包装所有组织功能,以创建、管理和存档这些笔记本。 现在,您没有理由不开始以可重复的方式记录您的所有科学研究——除了可能的学习曲线。 但是,正如俗话所说,没有什么值得做的事情是容易的,我认为这绝对值得做,至少对某些人来说是这样。

加载 Disqus 评论