一、前言
我在复制DeepSeek回复中的公式的时候,发现它的公式格式是用\( ... \)包围的,但是以前的markdown格式要求使用$ ... $包围公式,而对于单行公式它的公式格式是\[ ... \]包围的,但是以前的markdown格式要求使用$$...$$包围公式。 因此需要使用代码完成这样的替换:\( -> $,\) -> $,\[ -> $$,\] -> $$。
但是我现在没有python运行环境该怎么办?一开始我想的是使用在线python运行网站,
https://www.jdoodle.com/python3-programming-online
https://app-7rvnt0ypacqp.appmiaoda.com/
然而试了几个都被公司的安全机制封杀了
于是又想到了一个在线vscode的替换功能,把代码复制到在线vscode中,然后通过两次查找替换就可以完成这样的转换。
https://vscode.dev/?vscode-lang=zh-cn
但是每次都要两次查找替换也很麻烦,于是又找到了一个方法
二、浏览器控制台一键转换:新markdown格式换旧markdown格式
事先打开https://vscode.dev/?vscode-lang=zh-cn,把要转换的内容复制粘贴到里面,然后:
在另一个浏览器的页面,按下键盘上的 F12 键(或右键点击页面选“检查”),然后找到 Console(控制台) 选项卡,把下面这段代码粘贴进去,按回车运行即可。
问题:如果显示这个警告:Warning: Don’t paste code into the DevTools Console that you don’t understand or haven’t reviewed yourself. This could allow attackers to steal your identity or take control of your computer. Please type ‘allow pasting’ below to allow pasting.
解决方案:在控制台(Console)的光标处,手动输入allow pasting
注:运行代码之后,会在当前浏览器的页面弹出一个窗口要求你粘贴要转换的内容,这时候你去之前打开的那个在线vscode页面,将要转换的内容复制粘贴到这个窗口里面。最后回车运行,然后从输出结果中复制内容就得到了转换后的内容。
functionconvertLatex(){letinput=prompt('请粘贴包含 \\( \\) 和 \\[ \\] 的文本:');if(!input)return;// 1. 转换块级公式 \[ ... \] 为 $$ ... $$letresult=input.replace(/\\\[([\s\S]*?)\\\]/g,function(match,content){// 去掉首尾空白,并保留内部换行lettrimmed=content.trim();return'$$\n'+trimmed+'\n$$';});// 2. 转换行内公式 \( ... \) 为 $ ... $ (同时去除首尾空格)result=result.replace(/\\\(([\s\S]*?)\\\)/g,function(match,content){// 这里也 trim 掉内容前后的空格,避免出现 $ \beta $return'$'+content.trim()+'$';});console.log('========== 转换完成 ==========');console.log(result);try{copy(result);alert('转换完成!已自动复制到剪贴板,直接粘贴即可。');}catch(e){alert('转换完成!请手动复制控制台(Console)中的输出内容。');}}convertLatex();三、浏览器控制台一键转换:将只包含“=”或者“-”所在的行移动到上一行末尾
把只含=或只含-的行(通常分隔线)合并到上一行末尾。下面是转换脚本:
functionmergeSeparatorLines(){letinput=prompt('请粘贴要处理的文本:');if(!input)return;// 把输入按行拆分letlines=input.split('\n');letresult=[];for(letlineoflines){// 判断是否只包含 = 或 -(允许行首行尾有空格)lettrimmed=line.trim();letisSeparator=/^[=\-]+$/.test(trimmed);if(isSeparator&&result.length>0){// 把分隔符追加到上一行末尾(用空格分隔)result[result.length-1]=result[result.length-1]+' '+trimmed;}else{// 普通行或没有上一行可合并时,直接保留result.push(line);}}letoutput=result.join('\n');console.log('========== 转换完成 ==========');console.log(output);try{copy(output);alert('转换完成!已自动复制到剪贴板,直接粘贴即可。');}catch(e){alert('转换完成!请手动复制控制台(Console)中的输出内容。');}}mergeSeparatorLines();几点说明:
- 正则
/^[=\-]+$/:匹配整行只由=或-(可混合)组成,行首行尾允许空格和 tab。如果你希望分隔线必须至少2个字符(比如单行-是普通连字符而不是分隔线),改成/^[\-\=]{2,}$/。 - 合并方式是「上一行 + 空格 + 分隔符」,如果开头是 Markdown 标题(如
标题 ===),可以直接改成分隔符紧贴末尾,例如result[result.length - 1] + trimmed。 - 如果首行就是分隔线(没有上一行可合并),会原样保留不删除。
用法和以前一样:控制台粘贴运行即可。
四、合并脚本
把两个需求合并成一个脚本,运行时通过提示框选择执行哪种转换(也可以输入一次文本把两种处理都应用):
functionconvertText(){letinput=prompt('请粘贴要处理的文本:');if(!input)return;// 转换一:合并只含 = 或 - 的分隔行到上一行末尾functionmergeSeparatorLines(text){letlines=text.split('\n');letresult=[];for(letlineoflines){lettrimmed=line.trim();letisSeparator=/^[=\-]+$/.test(trimmed);if(isSeparator&&result.length>0){result[result.length-1]=result[result.length-1]+' '+trimmed;}else{result.push(line);}}returnresult.join('\n');}// 转换二:LaTeX 定界符 \[ \] -> $$,\( \) -> $functionconvertLatex(text){letr=text.replace(/\\\[([\s\S]*?)\\\]/g,function(m,c){return'$$\n'+c.trim()+'\n$$';});r=r.replace(/\\\(([\s\S]*?)\\\)/g,function(m,c){return'$'+c.trim()+'$';});returnr;}// 让用户选择转换模式letmode=prompt('请选择转换模式:\n'+'1 = 合并分隔行(= / -)\n'+'2 = LaTeX 定界符转换(\\[ \\]、\\( \\))\n'+'3 = 两种都执行(先合并分隔行,再转换 LaTeX)\n\n'+'直接输入数字:','3');if(!mode)return;letoutput;switch(mode.trim()){case'1':output=mergeSeparatorLines(input);break;case'2':output=convertLatex(input);break;case'3':// 先合并分隔行,再处理公式(顺序可调换)output=convertLatex(mergeSeparatorLines(input));break;default:alert('无效输入,请输入 1、2 或 3。');return;}console.log('========== 转换完成 ==========');console.log(output);try{copy(output);alert('转换完成!已自动复制到剪贴板,直接粘贴即可。');}catch(e){alert('转换完成!请手动复制控制台(Console)中的输出内容。');}}convertText();说明:
- 模式 3 默认先合并分隔行再做 LaTeX 转换;如果你的文本中
\(...\)内部不会跨分隔行,两种顺序结果一样。 - 分隔线判定为整行只含
=或-(可混合,允许首尾空白);若要求至少两个字符,把/^[=\-]+$/改成/^[=\-]{2,}$/。 - 输出结果直接显示在控制台并自动复制,用法与之前一致。