Voyager 用户消息 LaTeX 渲染:在 Gemini 聊天中自动排版数学公式的完整指南
AI 应用前端【免费下载链接】voyagerEnhancement suite for Gemini, AI Studio, Claude ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件其中的提示词管理器可用于任意网站如 DeepSeek Harness。项目地址https://gitcode.com/gh_mirrors/ge/voyager点击查看免费下载导读本文讲解 Voyager 增强套件中面向 Gemini™ 的「用户消息 LaTeX 渲染」功能当你在 Gemini 聊天输入框中发送包含 LaTeX 语法的消息时Voyager 会借助 KaTeX 引擎自动将$...$行内公式与$$...$$块级公式渲染为规范的数学符号排版。读完本文你将掌握该功能的支持语法、使用步骤、边界行为以及其背后的源码级实现原理文本切分算法、货币歧义规避、惰性加载与防竞态设计并了解它如何与导出、时间线、通知等功能协作。功能概览该功能在 Voyager 1.3.7 及更高版本中提供参见 1.3.7 变更日志 中「用户消息 LaTeX 渲染你发送的消息中的数学公式现在会通过 KaTeX 渲染」的条目。核心能力是在 Gemini 聊天中对用户自己发送的消息文本进行自动检测与公式排版行内公式用$...$包裹例如$x^2 y^2 r^2$公式嵌在文字流中显示块级公式用$$...$$包裹例如$$\int_0^1 x^2 dx$$公式居中显示在独立行自动检测页面中已存在的历史消息与新发送的消息都会被处理无需手动触发KaTeX 引擎底层使用 KaTeXpackage.json中声明依赖katex: ^0.16提供高质量的数学排版输出。支持的语法示例输入说明$Emc^2$行内公式$$\sum_{i1}^{n} i \frac{n(n1)}{2}$$块级公式$\alpha, \beta, \gamma$希腊字母$\sqrt{x^2 y^2}$平方根使用方法在 Gemini 聊天输入框中输入包含 LaTeX 语法的消息如请解方程 $x^2-5x60$发送消息后公式部分会被自动渲染为数学符号行内公式$...$会在文本流内联显示块级公式$$...$$会居中显示在独立一行。无需任何开关或额外设置——只要 Voyager 在gemini.google.com上正常运行即可。从源码可见扩展在 Gemini 页面初始化时调用startUserLatex()见 src/pages/content/index.tsx该初始化仅限定于 Gemini 域名。源码级实现原理目标 DOM 与消息定位实现文件 src/pages/content/userLatex/index.ts 注释中标注了 Gemini 用户消息气泡的目标 DOM 结构span.user-query-bubble-with-background └─ span.horizontal-container └─ div.query-text.gds-body-l ├─ span.cdk-visually-hidden (你说 / You said) └─ p.query-text-line ← 在这里处理Voyager 通过选择器p.query-text-line源码中USER_MSG_SELECTOR精确锁定每个用户消息段落避免误伤 Gemini 的回复文本或其他页面元素。文本切分算法与货币歧义规避parseSegments()函数把一段原始文本切分为「普通文本」与「数学公式」两类片段规则为$$...$$块级优先于$...$行内匹配只有闭合定界符配对成功才会被视为公式遇到孤立$则当作普通文本处理不中断扫描空内容如$ $会被跳过避免渲染空公式。一个关键的工程细节是tryCurrencySkip()货币检测日常聊天中$5、$3.50、$1,000、$100K这类货币金额同样以$开头若不加区分会被误判为未闭合的 LaTeX。该函数通过向前扫描数字可含逗号/小数点并检查后续字符是否为空格、标点、行尾或闭合$来判断是否为货币而$2x1$、$10^2$这类以数字开头的真实公式因数字序列后紧跟字母或运算符非边界字符会被正确识别为数学表达式。KaTeX 惰性加载与失败回退KaTeX 体积较大因此采用惰性加载只有当某条消息确实包含$且切分后存在数学片段时才会通过动态import(katex)加载引擎源码注释明确说明其设计目的——避免把 KaTeX 塞进同步加载的 content script 主包与loadMermaid()的加载策略一致。加载成功后调用katex.renderToString(seg.value, { displayMode: seg.display, // true 为块级false 为行内 throwOnError: false, // 渲染失败不抛异常 output: html, })渲染成功时公式被包裹在span.gv-user-latex-display块级或span.gv-user-latex-inline行内中渲染失败如 LaTeX 语法无效时会在catch分支回退为带原始定界符的纯文本$$...$$或$...$保证用户始终能看到原始输入绝不静默丢失内容。这与官方文档中「如果 LaTeX 语法无效将显示原始文本」的说明完全一致。增量处理与防竞态设计startUserLatex()启动时会先调用processAll()立即处理页面上已有的消息随后注册一个MutationObserver监听document.body的子树变化并以 300ms 防抖批量处理新插入的消息段落对应「自动检测处理现有和新建消息」的能力。针对异步场景实现做了两层防竞态保护每个处理过的段落会打上data-user-latex-processed标记防止防抖的 observer 在 KaTeX 异步加载期间重复进入同一元素若 KaTeX 加载期间 Gemini 恰好重绘了该节点导致捕获的原始文本已过期则删除 processed 标记并放弃本次渲染等待下一轮 observer 处理新内容——对应的测试用例「不覆盖加载期间被重绘的节点」覆盖了这一场景见 src/pages/content/userLatex/tests/userLatexRender.test.ts。测试套件还验证了两个关键行为含 LaTeX 的消息会触发惰性加载并渲染见 userLatexRender.test.ts不含数学内容的消息如「just a $ sign, no closing delimiter」则不会加载 KaTeX 引擎见 userLatexRender.test.ts。原始文本保留与导出、时间线、通知的协作渲染会改变 DOM 文本内容为避免破坏下游功能processElement()在替换节点内容前会把原始文本存入data-user-latex-original属性。该属性被多处复用Gemini 导出适配器在导出时优先读取dataset.userLatexOriginal作为真实消息文本见 src/pages/content/export/adapter/platform/gemini.ts时间线Timeline展示时恢复原始文本见 src/pages/content/timeline/TimelineTurns.ts消息通知生成时同样取回原始文本见 src/pages/content/responseNotification/index.ts。这使得「屏幕上渲染公式、数据层保留 LaTeX 源文本」成为可能保证导出、时间线和通知的内容与用户输入一致。KaTeX 严格模式警告抑制由于公式中可能出现中文字符等 Unicode 文本KaTeX 在严格模式下会输出unicodeTextInMathMode等控制台警告。Voyager 通过 src/pages/content/katexConfig/index.ts 在页面加载早期注入 public/katex-config.js后者以 monkey-patchconsole.warn的方式静默拦截特定 KaTeX 警告含unicodeTextInMathMode、LaTeX-incompatible input and strict mode等其余警告原样透传。需要注意的是Safari 构建由 manifest 以 MAIN world 原生注入该脚本因此configureKaTeX()会直接跳过 DOM 注入Gemini 页面的 CSP 会阻止此类注入。注意事项仅作用于用户发送的消息Gemini 回复中的公式由 Gemini 自己负责渲染Voyager 不做干预无效 LaTeX 回退原文语法无法解析时显示原始$...$/$$...$$文本货币金额不误伤$5、$3.50、$1,000、$100K等金额写法不会被当作公式处理无需配置功能随 Voyager 在 Gemini 页面自动生效支持版本为 1.3.7 及以上。延伸阅读功能实现主文件src/pages/content/userLatex/index.ts单元测试src/pages/content/userLatex/tests/userLatexRender.test.tsKaTeX 配置注入src/pages/content/katexConfig/index.ts、public/katex-config.js功能引入版本说明1.3.7 变更日志公式复制相关能力Notion 兼容复制src/features/formulaCopy/FormulaCopyService.ts赞分享AI 应用前端【免费下载链接】voyagerEnhancement suite for Gemini, AI Studio, Claude ChatGPT — plus a prompt manager for any websites, DeepSeek Harness included. / 面向 Gemini、AI Studio、Claude 与 ChatGPT 的增强套件其中的提示词管理器可用于任意网站如 DeepSeek Harness。项目地址https://gitcode.com/gh_mirrors/ge/voyager点击查看免费下载相关推荐Math 块在 Gutenberg 中使用 LaTeX 渲染数学公式的完整指南Math 块在 Gutenberg 中使用 LaTeX 渲染数学公式的完整指南 Math 块 core/math 是 Gutenberg 编辑器中用于展示后端前端fast_double_parser在Go标准库中的应用strconv.ParseFloat背后的秘密fast_double_parser在Go标准库中的应用strconv.ParseFloat背后的秘密 你是否想过Go语言中 strconv.ParseFloHugo 中的数学公式渲染在 Markdown 中使用 LaTeX 标记的完整指南Hugo 中的数学公式渲染在 Markdown 中使用 LaTeX 标记的完整指南 导读 本指南面向使用 Hugo 构建学术、科学类网站的开发者讲解如何在开发工具前端CLI上一篇tiktoken BPE 分词器3 步跑通算准 OpenAI 模型的 token批量处理快 3-6 倍下一篇零代码实现Llama 2对话llama2.c聊天模式实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Plotly.py 连续误差带(Continuous Error Bands)完全指南:用 Scatter 填充实现区间不确定性可视化

Plotly.py 连续误差带(Continuous Error Bands)完全指南:用 Scatter 填充实现区间不确定性可视化

数据可视化数据分析 【免费下载链接】plotly.py The interactive graphing library for Python :sparkles: 项目地址: https://gitcode.com/gh_mirrors/pl/plotly.py 点击查看 免费下载 连续误差带(Continuous Error Bands)是以主迹线周围的…

2026/9/25 6:47:32 阅读更多 →
用 InvenTree 管库存:部署选型、24 小时上手到仓库实操

用 InvenTree 管库存:部署选型、24 小时上手到仓库实操

用 InvenTree 管库存:部署选型、24 小时上手到仓库实操 【免费下载链接】InvenTree Open Source Inventory Management System 项目地址: https://gitcode.com/GitHub_Trending/in/InvenTree InvenTree 是一个自托管的开源库存管理系统,基于 Djan…

2026/9/25 9:44:00 阅读更多 →
rust-analyzer 架构深度解析:IDE 编译器前端的 crate 分层与设计不变量

rust-analyzer 架构深度解析:IDE 编译器前端的 crate 分层与设计不变量

开发工具 【免费下载链接】rust-analyzer A Rust compiler front-end for IDEs 项目地址: https://gitcode.com/gh_mirrors/ru/rust-analyzer 点击查看 免费下载 导读 本文基于 docs/book/src/contributing/architecture.md 展开,系统讲解 rust-analyz…

2026/9/25 9:43:08 阅读更多 →

最新新闻

MySQL表空间传输:从原理到实战,把大表迁移从小时级压缩到分钟级

MySQL表空间传输:从原理到实战,把大表迁移从小时级压缩到分钟级

老规矩,先给结论:MySQL自带的表空间传输(Transportable Tablespace)功能,是处理“单表或一批表快速换实例”最好用的手段之一,尤其在数据量已经上到几十GB、几百GB,mysqldump导出导入慢到让人抓…

2026/9/25 13:12:40 阅读更多 →
联合储能的配电网优化调度与新能源消纳能力评估研究

联合储能的配电网优化调度与新能源消纳能力评估研究

一个必须直面的现实:新能源装机冲上去之后,配电网为何最先“消化不良”这几年干配电网规划的人应该都有同样感受:分布式光伏、分散式风电、用户侧储能的接入申请像雪片一样涌过来,手头配电网的承载力评估还没做完,下一…

2026/9/25 13:12:40 阅读更多 →
NodeGui 中的 QMimeData 类详解:在拖放与剪贴板场景中传递 MIME 数据

NodeGui 中的 QMimeData 类详解:在拖放与剪贴板场景中传递 MIME 数据

桌面应用跨平台 【免费下载链接】nodegui A library for building cross-platform native desktop applications with Node.js and CSS 🚀. React NodeGui : https://react.nodegui.org and Vue NodeGui: https://vue.nodegui.org 项目地址: https://git…

2026/9/25 13:12:39 阅读更多 →
迅雷下载慢的根源排查:NAT类型、UPnP与连接数优化指南

迅雷下载慢的根源排查:NAT类型、UPnP与连接数优化指南

迅雷这类下载工具的速度问题,几乎每个用过的人都遇到过。同一个资源,有人跑满带宽,有人卡在几百KB,差距往往不在资源本身,而在几个容易被忽略的环节:网络地址转换(NAT)类型、UPnP端口…

2026/9/25 13:12:39 阅读更多 →
Django Ninja 查询参数(Query Parameters)完全指南:类型转换、默认值与 Schema 封装

Django Ninja 查询参数(Query Parameters)完全指南:类型转换、默认值与 Schema 封装

后端API设计 【免费下载链接】django-ninja 💨 Fast, Async-ready, Openapi, type hints based framework for building APIs 项目地址: https://gitcode.com/gh_mirrors/dj/django-ninja 点击查看 免费下载 本篇指南聚焦 Django Ninja 中 GET 查询参数…

2026/9/25 13:12:39 阅读更多 →
苏州品清装饰硬装服务怎么样,专业吗

苏州品清装饰硬装服务怎么样,专业吗

在苏州,一栋别墅往往承载着一个家庭半生的积蓄与期许。然而真正让业主辗转难眠的,常常不是选房那一刻,而是装修开始之后:效果图上美轮美奂的空间,落地后却面目全非;土建、硬装、园林、软装分属不同团队,出了…

2026/9/25 13:11:39 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →