利用alfred workflow实现markdown数学公式格式规范化

部署运行你感兴趣的模型镜像

众所周知,各种LLM使用的markdown格式和笔记软件的存在一些区别。其中最让人头疼的就是用括号和方括号的latex环境。笔者用alfred实现了一个workflow,实现了格式规范化。

期望功能:选中给定文本后,在alfred中输入"remove" keyword,即可将该文本里面的"\ (, \ )“和”\ [,\ ]“替换为”$“和”$$". 额外附加了一个去除多个空行的功能。

细节:使用python实现格式规范化,但是用applescript调用剪贴板。中间利用文件传递信息,因为基于文本传输会有各种转义的奇奇怪怪的问题(比如说在bash里面echo会自动转义"\t"等特殊字符,但是在latex里面显然"\text"之类的东西会用到,所以必须要用printf %s )。

实现:

  1. 在alfred里面创建keyword块:用keyword remove唤起,设置为no argument
  2. 在某个固定的地方新建一个python文件“markdown_processor.py”和一个txt文件“string_storage.txt”。打开python文件,输入下面的代码:
import re


def process_string(input_str):
    # 处理连续的空行
    lines = input_str.split('\n')
    processed_lines = []
    prev_empty = False

    for line in lines:
        current_empty = (line.strip() == '')
        if current_empty:
            if not prev_empty:
                processed_lines.append('')
                prev_empty = True
        else:
            processed_lines.append(line)
            prev_empty = False

    # 重新组合处理后的文本
    processed = '\n'.join(processed_lines)

    # 处理符号替换
    processed = re.sub(
        r'\\([\[\]()])',
        lambda m: '$$' if m.group(1) in ['[', ']'] else '$',
        processed
    )

    return processed

if __name__ == '__main__':
    location='string_storage.txt'
    # 读取时保留所有特殊字符
    with open(location, 'r', encoding='utf-8') as f:
        data = f.read()  # 保留原始内容包括\t等符号

    processed_data = process_string(data)

    # 写入时保持原有编码和格式
    with open(location, 'w', encoding='utf-8', newline='') as f:
        f.write(processed_data)  # 禁止自动转换换行符
  1. 把这个块链接到一个applescript块,然后输入下面的applescript代码,把其中的xxx改成刚才保存python文件的路径
on run
	tell application "System Events" to keystroke "c" using command down
	
	delay 0.1

    -- 获取剪贴板内容(保留原始格式)
    set clipText to getClipboard()
    
    -- 定义文件路径
    set storagePath to quoted form of "xxx/string_storage.txt"
    set pyScriptPath to quoted form of "xxx/markdown_processor.py"
    
    try
        -- 安全写入文件(禁用转义解释)
        do shell script "printf %s " & quoted form of clipText & " > " & storagePath
        
        -- 执行Python处理
        do shell script "/usr/bin/python3 " & pyScriptPath
        
        -- 读取处理结果
        set processedText to do shell script "cat " & storagePath & " | LC_ALL=C tr -d '\r'"
        
        -- 写回剪贴板(保留原始转义符)
        set the clipboard to processedText

		tell application "System Events" to keystroke "v" using command down
        
    on error errMsg
        display dialog "处理失败:" & errMsg buttons {"OK"} default button 1
    end try

end run

-- 安全获取剪贴板内容的函数
on getClipboard()
    try
        return (the clipboard as «class utf8») as text
    on error
        return ""
    end try
end getClipboard

然后测试一下即可。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值