Grey

全部学习内容汇总: GitHub - GreyZhang/g_org: my learning trip for org-mode

1856_emacs_calc使用介绍与故事

calc是emacs内置的一个计算器,可以提供多种计算表达方式并且可以支持org-mode中的表格功能。

主题由来介绍

我是因为想要了解org-mode的表格功能才来做calc的了解的,本来我的想法是简单浏览一下就过去。不过,一个简单的入门说明以及开发背后的信息故事让我觉得这段技术文档写得荡气回肠,因此还是把这部分信息做了一个整理。

资料整理过程说明

关于org-mode的表格相关文档链接: The Spreadsheet (The Org Manual)

上面这部分资料我还没有完全看完,因为calc是什么我还不是很熟悉,因此暂且还是先转头了解calc了。

GNU Emacs Calc Manual

上面这个链接是calc的手册,我这一次参考的主要是第一个章节的部分。

资料分析

1856_emacs_calc使用介绍与故事_编辑器

  • 这个功能实现了HP-28、48系列计算器的很多功能。
  • 支持任意精度的浮点类型。
  • 支持符号运算
  • 支持调用GNUPLOT来绘制图形,这个软件如何用,后面可以做一个简单了解在判断是否需要掌握。
  • HP-28/48我并不熟悉,去查了一下其实是一种便携式的计算器。具体的一个效果如下:

1856_emacs_calc使用介绍与故事_python_02

1856_emacs_calc使用介绍与故事_html_03

  • 后面章节中的教程部分,有多达70多个例子。描述的风格是偏向于时间操作的。从掌握一个工具的角度考虑,这部分其实是值得研究理解的。首先看看calc可以做什么,哪些可以用于我自己的需求场景,针对可以用于我自己需要的部分做针对性的练习。之后,处理类似的问题应该就可以从容应对。
  • 至于参考手册,使用方式可以按照查询的方式来使用。不过,手册覆盖的内容应该是要有一定的了解。

1856_emacs_calc使用介绍与故事_编辑器_04

  • 我为了能够有更好的文档阅读体验,通过自己的工具把html的信息转成了pdf以离线查看。其实,emacs的内部是有一个内置的calc文档的。可以通过C-x * t来打开教程的手册,也能够进行不同章节以及层级的跳转。
  • 在emacs的源代码中是有TEX的源代码的,可以通过源代码生成pdf文档。这个过程略微麻烦,倒不如我直接从html网页提取来的干脆了。

1856_emacs_calc使用介绍与故事_python_05

  • 这是calc支持的几种操作模式,主要是三种方式,第一种是照搬了惠普计算器的RPN模式;第二种是代数表达式的模式;第三种类似图形界面。
  • 关于什么是RPN,我还找了一份资料来看了下。其实就是惠普的计算器操作模式,逆向波兰标记方法。下面的链接中有介绍,也有一个可以在线体验的计算器。
  1. 链接: Reverse Polish Notation (RPN) Calculator

1856_emacs_calc使用介绍与故事_emacs_06



  1. Polish Notation (RPN) provides the quickest way to enter data in a calculator because it eliminates the need for parenthesis. It was made mainstream by HP when they implemented it in their famous programmable calculators. It is also very simple to code into a computer program. This is a simple online RPN calculator for you to try out. It's written in Javascript

How to use it

Unlike with a traditional calculator, you enter the parameters first, than the operator. For example, to calculate '20+50': type '20' -> Press Enter -> '50' -> Press '+'

  • The 'C' key deletes the input line.
  • The 'AC' key deletes the whole stack.
  • Use the 'POP' key to remove the last value entered and shift the stack down, and the 'SWAP' key to swap the last two elements.

1856_emacs_calc使用介绍与故事_html_07

  • calc提供了单位转换的功能
  • 还提供了日期计算的功能。
  • 关于这两个功能,感觉我大概率用不到。如果需要类似的功能,或许我大概率会使用python来处理一下。除非我是在org-mode中使用表格处理。不过,即使是使用表格处理,大概率也可能是直接使用 org-babel 的功能直接处理掉。

1856_emacs_calc使用介绍与故事_emacs_08

  • calc的标准接口模式其实就是RPN模式(可能用过HP计算器的会对此情有独钟,但是我觉得这种输入方式脱离了自然表达的流畅)

1856_emacs_calc使用介绍与故事_emacs_09

  • 如果退出之后,重新进入calc不会保持之前的对话模式。不过,也有对应的方法可以实现保存的效果。
  • 这里也额外提到了其他的calc的关闭方式。

1856_emacs_calc使用介绍与故事_编辑器_10

  • 快速计算的模式可以提供比较直接的代数运算表达处理,我试了也支持符号运算。
  • 相比之下,我觉得这个可能会是一个比较实用的功能。其他的功能,由于操作的便捷性以及处理效率等方面,可能不会是我在自己工作流中的选择方案。

1856_emacs_calc使用介绍与故事_emacs_11

  • 这是前面提到的第三种接口模式,用文本的方式实现了一个类似图形的计算器,而且可以使用鼠标操作。
  • 这种方式足够新颖也足够神奇,但是想要快速融合到自己的工作流中肯定得费费心思。想来想去,总觉得不如临时切入到python之中处理。

1856_emacs_calc使用介绍与故事_编辑器_12

  • 很多作品的设计驱动,最初其实都是来自于满足自我的需求。

1856_emacs_calc使用介绍与故事_编辑器_13

  • 很多时候,软件设计的灵魂就是算法甚至说是数学理论。更不用说计算机设计本身,从这里看得出来作者这方面的功力深厚。

1856_emacs_calc使用介绍与故事_python_14

  • 这是让我觉得比较有意思的一段描述。很多时候,设计源自于生活。当然,也可能是生活中看到的其他人的设计。最初,我也搞不清为什么作者会考虑照搬一个HP的计算器,难道是他自己使用过这样的计算器用着很顺手?原来,这个创意来自于看到了朋友的计算器。

1856_emacs_calc使用介绍与故事_编辑器_15

  • 一个好汉三个帮,calc的实现背后,也有数学高手的支持。

1856_emacs_calc使用介绍与故事_html_16

  • 在参考的资料中,出现了高德纳老爷子的TAOCP第二卷。看起来,这部巨著能够催生无限的力量,以后我也一定要把我自己买的翻一下。
  • 最后两部分的着色部分,让我有些吃惊。前面作者讲过,设计calc只是为了填补自己时间的空档期,希望能够占用两周的时间。而且,开发的时候他似乎对emacs lisp等并没有什么了解。看到前面的说明,我以为这个项目的开发肯定是时间巨长无比的。没想到,作者还是在两周内完成了这样的功能。而这里提到了一份emacs lisp的教程,并且还提到了RMS的emacs能够提供的帮助。然而,我终究还是怀疑。或许,这里两周完成的只是一个基本的操作版本,不然,需要耗费几百页来说明用法的一个工具,2周的时间做完那的确是神级的生产力了。

小结

以上就是对于calc初步的认识,设计的过程以及背后的故事十分有趣。本以为对calc的了解会是一看即过的,但是这种有趣的事情以及功能,还是值得整理到自己的笔记系统之中的。