最近开始用有道云笔记,发现其markdown数学公式的写法实在毒瘤。别人都是:
$$
$$
他是:
```math
```
无奈之下写了一个脚本。实现起来很简单,用正则替换一下就行。
# -*- coding: utf-8 -*-
import argparse
import re
import pyperclip
parser = argparse.ArgumentParser(
description='将有道云笔记Markdown和正常Markdown的进行互相转换(数学公式的格式)')
parser.add_argument('--type', default='m2y', choices=['y2m', 'm2y'],
help='转换类型, m2y: md -> youdao; y2m: youdao -> md')
parser.add_argument(
'--in', dest='input', help='转换后的 markdown 的输入文件;不填则自动读取剪贴板')
parser.add_argument(
'--out', dest='output', help='转换后的 markdown 的输出文件;不填则自动写入剪贴板')
args = parser.parse_args()
def main():
y2m_pat_block = r'```math((.|\n)*?)```'
y2m_pat_inline = r'`\$(.*?)\$`'
m2y_pat_block = r'\$\$((.|\n)*?)\$\$'
m2y_pat_inline = r'(?<!`)\$(.*?)\$(?!`)'
src_content = ''
if args.input:
with open(args.input, encoding='utf-8') as f:
src_content = f.read()
else:
src_content = pyperclip.paste()
if args.type == 'y2m':
des_content = re.sub(y2m_pat_block, r'$$\1$$', src_content)
des_content = re.sub(y2m_pat_inline, r'$\1$', des_content)
else:
des_content = re.sub(m2y_pat_block, r'```math\1```', src_content)
des_content = re.sub(m2y_pat_inline, r'`$\1$`', des_content)
if args.output:
with open(args.output, 'w', encoding='utf-8') as f:
f.write(des_content)
else:
pyperclip.copy(des_content)
if __name__ == '__main__':
main()
再写个 bat 脚本
@echo off
:: 注意改成自己本机的 py 路径
set py=D:\Software\Enviroment\Miniconda3\python.exe
call %py% %~dp0\YouDaoMD.py %*
放到环境变量中,就可以用了
D:\Data\SrcCode\Python\Toy\杂项脚本>youdaocvt --help
usage: YouDaoMD.py [-h] [--type {y2m,m2y}] [--in INPUT] [--out OUTPUT]
将有道云笔记Markdown和正常Markdown的进行互相转换(数学公式的格式)
optional arguments:
-h, --help show this help message and exit
--type {y2m,m2y} 转换类型, m2y: md -> youdao; y2m: youdao -> md
--in INPUT 转换后的 markdown 的输入文件;不填则自动读取剪贴板
--out OUTPUT 转换后的 markdown 的输出文件;不填则自动写入剪贴板