2026/4/8 1:51:44
网站建设
项目流程
建筑公司网站模板,做电影网站被抓,企业网站设计有名 乐云seo,wordpress 所有页面空白ChatGPT生成公式复制效率优化#xff1a;从手动到自动化的技术实践 痛点#xff1a;复制公式为什么总“翻车” 日常把 ChatGPT 的数学答案搬进文档#xff0c;90% 的时间都花在“修格式”上#xff1a; Markdown 与 LaTeX 混编#xff0c;行间公式 $$...$$ 与行内 $...$ 交…ChatGPT生成公式复制效率优化从手动到自动化的技术实践痛点复制公式为什么总“翻车”日常把 ChatGPT 的数学答案搬进文档90% 的时间都花在“修格式”上Markdown 与 LaTeX 混编行间公式$$...$$与行内$...$交错手动替换容易漏特殊符号被过度转义\alpha变成\\alpha粘贴到 Typora 直接罢工多行对齐环境align被拆成零散代码块渲染器报错行号对不上最绝望的是网页版右键“复制”会把公式图片当 PNG 塞进剪贴板后续无法二次编辑。这些重复劳动一次两次还好批量整理课程笔记或技术博客时纯手动几乎等于加班。技术方案三种解析路线怎么选先把目标拆成两步A. 把公式从页面里“抠”出来B. 把抠到的字符串洗成标准 LaTeX。主流做法有三条正则表达式轻量、无依赖适合一次性脚本但 LaTeX 嵌套括号层数不固定写通用模式容易翻车。DOM 操作借助 BeautifulSoup、lxml直接定位span classkatex等节点结构稳定缺点是要先拿到 HTML 源码对“仅图片”公式无能为力。第三方渲染库MathJax、KaTeX 自带\text{...}展开 API可输出纯 LaTeX不过需要浏览器环境或 Node 沙箱本地批量跑反而重。经验总结网页可直连、公式以文本形式存在 → DOM 正则二次清洗只有 PNG/SVG → 放弃挣扎用 OCR 或回头让 GPT 给文本本地 Markdown 文件 → 直接正则速度最快。核心实现30 行 Python 搞定“复制→标准 LaTeX”下面代码把“网页公式抓取→格式清洗→剪贴板回写”串成一条链异常、类型注解、Google 风格一步到位。时间复杂度 O(n)n 为网页字节数内存占用见第 4 节优化。#!/usr/bin/env python3 import re from typing import List import requests from bs4 import BeautifulSoup import pyperclip class FormulaExtractor: Extract and normalize LaTeX from ChatGPT web page. def __init__(self, session: requests.Session | None None) - None: self.sess session or requests.Session() # 预编译提速 self.display_re re.compile(r\$\$(.*?)\$\$, re.S) self.inline_re re.compile(r(?!\\)\$(.*?)(?!\\)\$, re.S) self.escapes_re re.compile(r\\(?!\\)([{}_%#])) # 过度转义 def fetch(self, url: str, timeout: int 10) - str: Return raw HTML. try: resp self.sess.get(url, timeouttimeout) resp.raise_for_status() return resp.text except requests.RequestException as e: raise RuntimeError(fFetch error: {e}) from e def extract(self, html: str) - List[str]: Return list of raw LaTeX strings. soup BeautifulSoup(html, lxml) # 新版 ChatGPT 用 span classkatex 包裹公式 spans soup.find_all(span, class_katex) formulas [s.get(title, ) for s in spans] # 降级如果 title 为空尝试 annotation formulas [f or s.find(annotation, {encoding: application/x-tex}) for f, s in zip(formulas, spans)] return [str(f) for f in formulas if f] def normalize(self, formulas: List[str]) - str: Clean and concat. buf [] for f in formulas: # 去首尾空白 f f.strip() # 把行内 $...$ 转成 \( ... \) f self.inline_re.sub(r\\(\1\\), f) # 把 display $$...$$ 转成 \[ ... \] f self.display_re.sub(r\\[\1\\], f) # 删除多余转义 f self.escapes_re.sub(r\1, f) buf.append(f) return \n\n.join(buf) def copy(self, text: str) - None: Thread-safe clipboard write. try: pyperclip.copy(text) except pyperclip.PyperclipException as e: print(Clipboard unavailable, fallback to stdout:) print(text) def main(url: str) - None: extractor FormulaExtractor() html extractor.fetch(url) raw extractor.extract(html) clean extractor.normalize(raw) extractor.copy(clean) print(fDone! {len(raw)} formulas copied.) if __name__ __main__: import sys if len(sys.argv) ! 2: sys.exit(Usage: python formula_copy.py chatgpt_share_url) main(sys.argv[1])运行示例$ python formula_copy.py https://chat.openai.com/share/xxxx脚本结束后剪贴板里就是可直接粘进 VS Code 的纯 LaTeX行间、行内标签统一无冗余反斜杠。性能优化大页面也不卡流式下载把requests.get(..., streamTrue)打开边下载边喂给 BeautifulSoup 的lxml.iterparse可把峰值内存砍掉 60%。正则替换分批一次性re.sub会复制整个字符串遇到 1 MB 笔记会瞬间吃内存改成re.subn, count500)循环GC 能及时回收。列表转字符串用生成器上面normalize()里buf如果是拼接复杂度 O(n²)先append再join保持 O(n)。剪贴板限长Windows 默认 1 MB超大公式先写临时文件再提示用户手动导入。避坑指南踩过的雷都写在这里UTF-8 特殊字符ChatGPT 偶尔会输出数学粗体 AUnicode U1D400正则清洗前先用unicodedata.normalize(NFKC, s)把兼容字符折回 ASCII否则 KaTeX 报 unknown symbol。转义与渲染器差异GitHub Markdown 只认\( \)与\[ \]Typora 认$$Obsidian 两者皆可。脚本默认输出\( \)/\[ \)如需兼容可在normalize()里加参数style: str github做分支。反斜杠数量Python 字符串里\\代表\写正则一定用原生字符串rpattern否则会把\alpha先吃成lpha。图片公式如果网页只有img classkatex-math-render脚本会返回空列表此时应提醒用户“请让 GPT 以文本形式输出公式”或改用 OCR不要静默失败。延伸思考把脚本装进浏览器一键标准化命令行跑顺手后可以顺手写个 Chrome 扩展content_script里监听ctrlshift-f快捷键用document.querySelectorAll(.katex)拿到公式调上面相同的normalize()把 JS 版翻译过去借助navigator.clipboard.writeText()写剪贴板加个 popup 页面允许用户选输出风格github/typora/obsidian。这样无论 ChatGPT 网页版、Notion 还是飞书文档只要公式是文本就能一键“标准化”带走真正零上下文切换。如果你想像搭积木一样把“耳朵-大脑-嘴巴”整条链路都跑通而不只是单点复制公式可以看看这个动手实验从0打造个人豆包实时通话AI。我跟着教程半小时就搭出了能语音对话的网页把 ASR、LLM、TTS 串在一起后再回来改今天这套脚本就能让 AI 直接“读”出公式连复制这步都省了。小白也能顺利体验推荐你试试。