前言

因为平时会看一些文献,需要摘抄里面的公式做笔记,但是公式又多又长的时候,用手打latex就不是那么香了。而且有时候还会记不住latex语法,这可真是太为难胖虎我了。所以,像手打latex公式这么机械化的事情当然是要交给专门的工具去做啦,自己只用把心思放在学(zou)习(shen)上就好了。

本着折腾不止的精神,索性就自己做一个呗,而且还免费,而且的而且只需要有一些coding基础就可以完成,so easy的好不好。ps:这里使用的是python。pss:即便你是编程小白,我也都把代码贴出来了,基本上可以开盖即用。

【工具功能】:摁下相应的快捷键,截取文档公式,等一会儿会儿,latex公式就在你的剪贴板里了。就问香不香?终于不用手打了。


大致思路

  1. 先截屏,截取文献中的公式;
  2. 对截图进行OCR识别,得到latex公式,就可以放进自己的markdown文档里面,就大功告成了。
    (是不是很简单,全剧终 )

其实,要在macOS自带的自动化工具「Automator」里面实现这个「OCR公式识别工具」也是这样的思路,不过得先准备OCR公式识别的API,并写好python脚本。


API准备

1. API准备

这里使用的是mathpix,可以去官网申请API:


Mathpix Snipmathpix.com


自己制作一个Spring Boot Starter 自己制作一个笔盖_python


每个月有好多次的免费额度,如果是个人使用的话,完全够用,也不用花钱,省下一笔巨款 。

2. OCR 公式识别python脚本

按照官方文档调用API,写识别公式的python脚本。

官方文档docs.mathpix.com


当然,你也可以使用我写好的脚本,将你的 app_idapp_key 填写到对应位置。


#!/usr/bin/env python
import sys
import base64
import requests
import json
import os
from argparse import ArgumentParser, RawDescriptionHelpFormatter
import pyperclip


def sendPic(file_path):

  image_uri = "data:image/jpg;base64," + base64.b64encode(open(file_path, "rb").read()).decode()
  headers = {"app_id": "YourAppId", 
              "app_key": "YourAppKey",
              "Content-type": "application/json"}
  r = requests.post("https://api.mathpix.com/v3/text",
              data=json.dumps({'src': image_uri, "format": ["latex_simplified"]}),
              headers=headers)

  res = json.dumps(json.loads(r.text), indent=4, sort_keys=True)

  return eval(res)["latex_styled"]




if __name__ == "__main__":
  parser = ArgumentParser(description=__doc__, formatter_class=RawDescriptionHelpFormatter)
  parser.add_argument("-i", dest="image", type=str, default=None, help="path to image file. Default None to use clipboard")
  args = parser.parse_args()
  image = args.image

  try:
    res = sendPic(image)
    print(res)
    pyperclip.copy(res)
  except Exception as e:
    pass



用Automator制作workflow

  1. 先新建一个项目,这里选择「快速操作」:


自己制作一个Spring Boot Starter 自己制作一个笔盖_从截图里面识别数字_02


2. 然后,按照之前所说的,先获取截图:


自己制作一个Spring Boot Starter 自己制作一个笔盖_从截图里面识别数字_03


3. 正常情况下,这个时候将截图传给刚才写好的python程序:

使用命令行启动刚才的python程序;此时的截图名为“Desktop.png”,通过命令行参数-i 传给python程序;不过,需要注意的是这个截图的路径不是“Desktop.png”,应该在前面加上你的用户路径。


自己制作一个Spring Boot Starter 自己制作一个笔盖_从截图里面识别数字_04


4. 测试:点击右上角的「运行」试试看这个workflow有没有问题。如果没有问题的话,你的截图里面的公式就已经在剪贴板里了。当然,你也可以在「运行shell脚本」后面加一个「显示通知」组件作为提示,不然,网络不好的时候,你也不知道什么时候能调用完API。

5. 设置快捷键:如果测试完毕都没有问题,可以在「系统设置-键盘-快捷键-服务」里面,找到刚才的workflow,并添加快捷键。


自己制作一个Spring Boot Starter 自己制作一个笔盖_从截图里面识别数字_05