当前位置: 首页 > article >正文

Markdown转docx 保留Latex渲染样式

需求分析Markdown转docx有大量公式。包括行内公式和行间公式Office 自带的数学与 Latex的渲染样式存在差异。本文倾向于使用Latex的渲染样式轻量调整。转换后仅做轻微的调整不再编辑公式。选择方案主要编辑在Markdown使用Latex渲染样式docx只做轻量调整。所以先把Latex公式渲染成图片格式在生成文档中使用渲染的图片而非原始的Latex公式。pandoc 有一个选项--webtex可自动调用API渲染公式。但这个选项只支持 Markdown 和 HTML。为了解决这个问题首先 Markdown 到 HTML。然后 HTML 到 docx。可选自己搭一个简易的webtex服务。使用脚本如下。代码分享Makefile.PHONY: help serve html docx clean # Use : for simple assignment (evaluated once) INPUT : $(if $(INPUT),$(INPUT),main.md) OUTBASE : $(basename $(INPUT)) help: echo Usage: make [target] [INPUTxxx.md] echo echo Targets: echo serve - Start webtex server echo html - Convert markdown to HTML echo docx - Convert markdown to DOCX echo clean - Remove generated files echo echo Default INPUT: main.md echo echo Examples: echo make html INPUTmyfile.md echo make docx INPUTmyfile.md serve: node webtex.js html: pandoc $(INPUT) -o $(OUTBASE).html --webtexhttp://localhost:3000/png?latex sed -i s/classmath display/classmath display styledisplay:block;margin:auto;/g $(OUTBASE).html docx: html pandoc $(OUTBASE).html -o $(OUTBASE).docx clean: rm -f $(OUTBASE).html $(OUTBASE).docxwebtex.js依赖npminstallmathjax-full sharpconsthttprequire(http);consturlrequire(url);constsharprequire(sharp);const{mathjax}require(mathjax-full/js/mathjax.js);const{TeX}require(mathjax-full/js/input/tex.js);const{SVG}require(mathjax-full/js/output/svg.js);const{liteAdaptor}require(mathjax-full/js/adaptors/liteAdaptor.js);const{RegisterHTMLHandler}require(mathjax-full/js/handlers/html.js);const{AllPackages}require(mathjax-full/js/input/tex/AllPackages.js);constadaptorliteAdaptor();RegisterHTMLHandler(adaptor);consttexnewTeX({packages:AllPackages});constsvgnewSVG({fontCache:none,exFactor:1,});consthtmlmathjax.document(,{InputJax:tex,OutputJax:svg});functionrenderToSVG(latex,displayfalse){constnodehtml.convert(latex,{display});returnadaptor.innerHTML(node);}asyncfunctionrenderToPNG(latex,displayfalse,scale2){constsvgStringrenderToSVG(latex,display);returnawaitsharp(Buffer.from(svgString),{density:150*scale,background:white}).png({quality:100}).toBuffer();}constserverhttp.createServer(async(req,res){console.log(connection${req.url});constparsedUrlurl.parse(req.url,true);res.setHeader(Access-Control-Allow-Origin,*);constlatexparsedUrl.query.latex;if(!latex){res.writeHead(400);res.end(Missing latex parameter);return;}constdecodedLatexdecodeURIComponent(latex);constdisplayModeparsedUrl.query.displaytrue;constscaleparseInt(parsedUrl.query.scale)||2;try{if(parsedUrl.pathname/png||parsedUrl.pathname/){constpngBufferawaitrenderToPNG(decodedLatex,displayMode,scale);res.writeHead(200,{Content-Type:image/png});res.end(pngBuffer);}elseif(parsedUrl.pathname/svg){constsvgStringrenderToSVG(decodedLatex,displayMode);res.writeHead(200,{Content-Type:image/svgxml});res.end(svgString);}else{res.writeHead(404);res.end(Use /svg?latex... or /png?latex...);}}catch(err){console.error(Error:,err);res.writeHead(500);res.end(Error rendering LaTeX);}});constPORT3000;server.listen(PORT,(){console.log(WebTeX Server running at http://localhost:${PORT});console.log(SVG: http://localhost:${PORT}/svg?latexEmc%5E2);console.log(PNG: http://localhost:${PORT}/png?latexEmc%5E2);});参考pandocmathjax还有其他互联网资料

相关文章:

Markdown转docx 保留Latex渲染样式

需求分析 Markdown转docx有大量公式。包括行内公式和行间公式Office 自带的数学与 Latex的渲染样式存在差异。本文倾向于使用Latex的渲染样式轻量调整。转换后仅做轻微的调整,不再编辑公式。 选择方案 主要编辑在Markdown,使用Latex渲染样式&#xff…...

LabVIEW虚拟数字示波器:从仿真到实战的信号分析平台

1. LabVIEW虚拟数字示波器:你的信号分析瑞士军刀 第一次接触LabVIEW虚拟数字示波器时,我正被实验室排队等设备的同学们逼得焦头烂额。直到发现用LabVIEW自己搭建的数字示波器,不仅能随时调用,还能自定义各种高级功能,简…...

最后90天窗口期:2026奇点大会确认的AGI算力-数据-对齐三角瓶颈即将被打破,你的团队准备好了吗?

第一章:2026奇点智能技术大会:通用人工智能最新进展 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次披露多项突破性成果,标志着通用人工智能(AGI)正从理论验证迈入系统化工程实践阶段。来自DeepMind、Op…...

工创赛智能物流搬运小车——V831视觉循迹与STM32色环校准完整方案

工创赛智能物流搬运小车——V831视觉循迹与STM32色环校准完整方案 一、系统概述 1.1 项目背景 本方案针对全国大学生工程实践与创新能力大赛(简称“工创赛”)智能物流搬运赛项,设计并实现基于V831视觉模块的赛道循迹系统,以及基于STM32F4ZGT6的色环校准与运动控制系统。…...

LSTM计算

...

Rescuezilla:系统恢复的瑞士军刀 - 终极免费磁盘克隆与备份解决方案

Rescuezilla:系统恢复的瑞士军刀 - 终极免费磁盘克隆与备份解决方案 【免费下载链接】rescuezilla The Swiss Army Knife of System Recovery 项目地址: https://gitcode.com/gh_mirrors/re/rescuezilla 你是否曾经面对系统崩溃却束手无策?是否需…...

10年老兵带你学Java(第0课):学前必知

Java是什么? Java是一门编程语言,1995年诞生,到现在30年了,依然是全球最流行的语言之一。 打个比方: C语言像手动挡汽车,性能强但难开Python像自动挡汽车,好开但不够快Java像卡车,能…...

FileLocator Pro进阶搜索:从布尔逻辑到正则表达式的实战指南

1. 为什么需要掌握FileLocator Pro的进阶搜索技巧 作为一个常年和各类文档、日志打交道的IT从业者,我深知在海量文件中寻找特定信息有多痛苦。记得有一次,客户服务器突然报错,我需要从几十GB的日志文件中找出特定错误码和关联的请求ID。当时…...

别再死记硬背VGG结构了!手把手教你用PyTorch复现VGG16/19(附代码与权重加载)

从零构建VGG16:PyTorch实战指南与设计哲学解析 在计算机视觉领域,VGG网络以其优雅的对称结构和卓越的性能表现,成为深度学习发展史上的里程碑。不同于简单记忆网络层数,真正理解VGG的精髓在于亲手实现其架构设计。本文将带您用PyT…...

React 大师级思考:如何在不断演变的 Web 标准中保持 React 项目的长期可维护性与扩展性

React 大师级思考:如何在不断演变的 Web 标准中保持 React 项目的长期可维护性与扩展性各位代码的朝圣者,各位在组件海洋中溺水又被救起的勇士们,欢迎来到今天这场关于“如何让 React 项目活过 10 年”的讲座。我知道你们在想什么。你们在想&…...

别再手动算面积和距离了!用Shapely处理GeoJSON数据,效率提升10倍

地理空间数据分析实战:用Shapely解锁GeoJSON处理新姿势 还在用传统方法逐行解析GeoJSON数据?当面对城市地块分析、物流路径优化或区域规划时,手动计算几何属性不仅耗时费力,还容易引入人为误差。这里有一份来自某城市规划局的真实…...

X.509数字证书实战解析:从结构到应用

1. X.509数字证书的前世今生 第一次听说X.509证书时,我正盯着浏览器地址栏那个小锁图标发呆。这个看似简单的技术,实际上支撑着整个互联网的安全通信。X.509就像数字世界的身份证,它用密码学的方式证明了"你是你"。想象一下&#x…...

Qt 6.2 静态编译实战:从环境配置到IDE集成的完整指南

1. 环境准备:搭建静态编译的基础舞台 第一次尝试Qt静态编译时,我盯着满屏的英文文档和报错信息整整发呆了半小时。作为过来人,我理解那种面对复杂工具链的无力感。别担心,跟着我的步骤走,咱们用最稳妥的方式把地基打牢…...

d2s-editor:暗黑破坏神2存档编辑实战指南与深度解析

d2s-editor:暗黑破坏神2存档编辑实战指南与深度解析 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑破坏神2玩家常面临角色属性不足、装备搭配受限、存档损坏等问题。d2s-editor作为一款基于Web的存档编辑工具&a…...

GHelper轻量级控制工具:三步解决华硕笔记本性能管理难题

GHelper轻量级控制工具:三步解决华硕笔记本性能管理难题 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, Strix, …...

如何快速掌握LRC歌词制作工具:新手也能上手的完整教程

如何快速掌握LRC歌词制作工具:新手也能上手的完整教程 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 你是否曾经为制作精准的LRC歌词而烦恼&#xff1f…...

如何决定是否需要创建索引_数据区分度与基数Cardinality计算

索引是否有效取决于Cardinality值高低:接近总行数(≥95%)说明区分度高,适合建索引;<10%则单列索引意义不大;低区分度字段应置于联合索引后缀,如(created_at, status),并用…...

Windows右键菜单的“数字园艺师“:ContextMenuManager深度解析与实战手册

Windows右键菜单的"数字园艺师":ContextMenuManager深度解析与实战手册 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是否曾想过&…...

在线考试|基于springboot + vue在线考试管理系统(源码+数据库+文档)

在线考试管理系统 目录 基于springboot vue在线考试管理系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue在线考试管理系统 一、…...

终极指南:如何用Bioicons免费开源图标库彻底改变科研可视化

终极指南:如何用Bioicons免费开源图标库彻底改变科研可视化 【免费下载链接】bioicons A library of free open source icons for science illustrations in biology and chemistry 项目地址: https://gitcode.com/gh_mirrors/bi/bioicons Bioicons是一个专为…...

从双非到东南网安:一名普通考生的备考心路与策略复盘

1. 从迷茫到坚定:我的考研目标选择历程 作为一个双非院校的普通学生,我最初对考研这件事充满了迷茫。记得大三上学期结束时,身边的同学都在讨论考研目标,而我却连考什么专业、什么学校都没想清楚。这种状态持续了整整半年&#xf…...

服装商城|基于springboot + vue服装商城系统(源码+数据库+文档)

服装商城系统 目录 基于springboot vue服装商城系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue服装商城系统 一、前言 博主介绍…...

保姆级教程:用Python 3.12+和Dify脚手架从零开发你的第一个工具插件

保姆级教程:用Python 3.12和Dify脚手架从零开发你的第一个工具插件 在当今快速发展的AI应用生态中,能够快速构建和部署自定义插件已成为开发者的核心竞争力之一。Dify作为一个新兴的AI开发平台,其插件系统为开发者提供了极大的灵活性和扩展能…...

加了领导微信,发现他从不发朋友圈。同事说把你屏蔽了。后来才知道没屏蔽任何人,只是不发!问他为什么,他说发什么都不对!

职场里最高级的“躺平”,是把朋友圈彻底清零。最近刷到一个扎心帖子,瞬间戳中了无数职场人的共鸣:加了领导微信,翻遍他的朋友圈,一条动态都没有。同事说“你被屏蔽了”,结果真相更现实——他只是彻底不发了…...

4.18数组名理解

int main() {int a[5] {5, 4, 3, 2, 1};int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }看这个代码,数组a中存放了五个元素,数组名a是指向数组首元素a[0]的地址,类型为int*,&a代…...

蓝桥杯单片机 | 实战解析【进阶02】定时器中断下的长短按键识别与数码管动态显示

1. 定时器中断与长短按键识别原理 在单片机开发中,按键识别是最基础也最容易出问题的功能之一。我刚开始接触蓝桥杯单片机时,最头疼的就是按键抖动和误触发问题。后来发现,定时器中断是解决这些问题的银弹。 定时器中断就像是你家厨房里的定时…...

2026 多智能体全流程实战:用 Python + API 搭建可观测门店运营助手,附最小可复现代码

2026 多智能体全流程实战:用 Python API 搭建可观测门店运营助手,附最小可复现代码 从 2026-04-16 到 2026-04-18 的 6 条 AI 热点出发,拆到场景定义、关键代码、调试排错与上线建议 导语 先给最终效果:我们要做一个本地就能跑通…...

易语言VNC远程控制模块|虚拟机隔离防检测专用组件

温馨提示:文末有联系方式易语言VNC远程控制模块 一款深度适配易语言生态的轻量级VNC通信组件,封装底层Socket与RFB协议逻辑,提供稳定、低延迟的远程画面传输与交互能力。VNC模块源代码及键鼠操作实战示例 附带可直接编译运行的完整源码包&…...

04月19日AI每日参考:OpenAI豪掷200亿押注Cerebras,ChatGPT用户突破10亿

今日概览 今天AI圈有两条主线值得重点关注。一是算力军备赛再度升温:OpenAI与Cerebras签下超200亿美元芯片采购协议,同时获得股权,这是AI公司绑定算力供应商的最大单笔交易之一。二是国内AI硬件与Agent落地提速:联想、科大讯飞同…...

别再用成品USB麦克风了!手把手教你用STM32F4和CubeMX打造专属录音声卡(附完整代码)

从零打造专属录音声卡:STM32F4与CubeMX实战指南 市面上大多数USB麦克风都是封闭的黑箱系统,无法满足硬件创客和嵌入式开发者对底层控制的渴望。本文将带你用STM32F4开发板和CubeMX工具,打造一款完全可定制的USB录音设备,突破成品声…...