标签 LaTeX 下的文章

OpenAI 发布了Prism,这是一个基于云的免费 LaTeX 工作空间,专为学术写作和协作而设计,并且直接集成了 GPT-5.2。该平台将文档编辑、编译、引文管理及 AI 辅助修订功能整合在单个基于 Web 的工作区中,主要面向需要撰写长篇科学文献的研究人员。

 

Prism 完全支持 LaTeX 原生操作,并且是完全在浏览器中运行。用户可以创建、编译和预览文档,无需安装本地工具或管理 LaTeX 环境。该平台消除了现有 LaTeX 协作工具中常见的限制,对项目数量、协作者数量或编译时间没有任何限制。

 

Prism 的核心优势在于将 GPT-5.2 集成到了文档工作流中。与通过单独的聊天界面操作不同,该模型直接在项目的上下文中运行,可以访问文档结构、公式、参考文献和之前的修订。这使得它能够协助执行诸如修订文本、调整格式、更新公式和表格以及查找相关文献这样的任务,同时保证文档内部逻辑的一致性。

 

Prism 内置了引文管理功能,并支持与 Zotero 同步以发现参考文献。实时协作功能允许多个作者同时编辑文档,内联评论和专题讨论支持同行评审和反馈。自动化错误检查、公式转换和格式化工具旨在减少手动更正和重复的 LaTeX 调整。

 

本次发布在研究人员中间引发了关于 Prism 与 Overleaf 等工具的对比讨论。Povilas Karvelis指出: 

 

我认为这种情况还会持续几年,直到知识图谱和 AI 代理成为主要的研究手段,使精心撰写的研究论文彻底过时。

 

其他早期用户强调了该平台的定价模型所带来的实际影响。一位研究人员评论道:

 

集成 AI 是 Prism 提供的功能中最不实用的。仅仅是让我可以免费拥有无限数量的项目和协作者,就使它成为比 Overleaf 更好的选择。

 

从技术的角度来看,Prism 的定位是一个集成的写作和协作环境,而不是一个 AI 优先的工具。AI 辅助功能是可选的,并且嵌入到了标准的学术工作流中,团队可以有选择地使用。核心功能的使用不依赖自动化辅助。

 

目前,拥有 ChatGPT 个人账户的用户可以通过 Web 访问 Prism。OpenAI 表示,未来版本将陆续支持 ChatGPT 商业版、团队版、企业版及教育版。

 

原文链接:

https://www.infoq.com/news/2026/01/openai-prism/

论文名称:A tree-based model with branch parallel decoding for handwritten mathematical expression recognition

作者:Zhe Li, Wentao Yang, Hengnian Qi, Lianwen Jin, Yichao Huang, Kai Ding

发表期刊 :Pattern Recognition (Volume 149, 2024)

一、背景与问题提出

手写数学表达式识别是一项具有高度挑战性的视觉—语言理解任务,其难点主要来源于数学表达式本身所具有的结构复杂性与表达多样性。与普通文本不同,数学表达式中的符号数量庞大,且符号之间并非简单的线性排列,而是通过上下标、分式、根式等形式构成复杂的二维空间关系。这种“非线性、层级化”的空间结构使得识别过程不仅需要准确区分单个符号,还必须正确理解符号之间的相对位置与组合关系,从而显著提高了整体识别难度。

与此同时,手写数学表达式在尺度和形态上呈现出高度多样性。不同符号在尺寸、笔画粗细以及空间分布上差异明显,同一表达式中也可能同时包含大尺寸的主符号和小尺寸的上下标符号。这种多尺度特性使得单一尺度的特征提取方式难以兼顾全局结构与局部细节,因此如何有效建模多尺度特征成为该领域亟需解决的关键问题。现有研究通常借助多尺度编码和数据增强策略来缓解这一挑战,但仍存在表达能力不足的问题。

此外,标注数据的稀缺性与书写风格的多样性进一步制约了模型性能。高质量的手写数学表达式标注成本较高,公开数据集规模有限,而不同书写者在符号形态、连笔方式和空间布局上的差异又显著增加了数据分布的复杂性,导致模型在实际应用中泛化能力不足。因此,如何通过生成式方法、弱监督或半监督学习等手段扩充数据、提升模型鲁棒性,成为当前研究的重要方向。

在建模方式上,主流方法通常将数学表达式转化为 LaTeX 等线性序列进行预测,依赖 RNN 或 Transformer 等序列化解码模型。然而,这类方法的解码时间步数往往与输出序列长度直接相关,当表达式较长或结构复杂时,解码过程不仅效率低下,而且错误容易在长序列中累积,严重影响识别精度。这一“长序列注意力解码瓶颈”已成为制约现有方法实用性的核心问题之一。更为重要的是,许多现有方法主要聚焦于符号级别的识别,将结构信息隐式地交由模型学习,缺乏对数学表达式语法规则和层级结构的显式建模。这种做法往往导致识别结果在形式上虽然由合法符号组成,但在结构或语义上不符合数学语法约束,降低了结果的准确性与可解释性,也限制了模型在复杂表达式场景下的表现。

基于上述背景,《A tree-based model with branch parallel decoding for handwritten mathematical expression recognition》(以下简称“论文”)关注并尝试回答以下关键问题:

(1)如何通过减少序列解码的时间步数来缓解长序列建模带来的效率与稳定性问题;

(2)如何显式地建模符号之间的空间关系与结构信息,以提升数学表达式识别的结构准确性;

(3)以及如何充分利用这些结构信息,实现多分支或并行化的解码机制,从而在保证识别精度的同时显著提升整体推理效率与性能。

二、研究内容与创新点

针对上述提出的挑战和问题,论文提出了一种创新的解决方案,主要体现在以下几个方面。首先,设计了一种基于树结构的模型——“分支并行解码的树模型(BPD)”,通过显式建模数学表达式树中的符号及其关系,有效捕获了表达式的层级结构。该模型采用编码器–解码器架构,其中编码器利用卷积神经网络(CNN)提取图像特征,并对特征进行位置编码,以增强位置感知能力。解码器部分基于Transformer结构,通过符号预测器和关系预测器,分别识别符号及其间的空间关系。

同时,核心创新在于引入“查询构建模块”,该模块利用已预测的关系信息,构建新的解码查询,从而实现多分支的并行解码。这一设计大幅度减少了传统方法中逐个深度优先解码的长序列长度,有效缓解了长序列注意力解码的问题,从而提升了识别速度和准确性。此外,本方法还采用了“多子树节点(MCN)”标记处理多子节点的问题,实现对多分支结构的同步预测,从而更好地适应复杂的表达式结构。综上所述,本文的主要创新点在于通过显式结构建模、引入并行解码策略以及特殊的节点关系处理策略,提出了一种高效、准确且具有语法合理性的手写数学表达式识别新框架,为解决长序列解码瓶颈和结构理解不足的问题提供了有效的解决方案。

主要技术亮点包括:

树结构建模:充分利用数学表达式的结构特性,将表达式解析成树状结构,并逐步预测节点及其关系。
分支平行解码:假设不同分支之间相互独立,利用预测的关系信息,同时对多个分支进行并行解码,降低解码步骤,从而提高效率。
查询构建模块:动态生成新的解码查询,使得分支可以在解码过程中实现“并行处理”,减轻sequence长序列带来的性能瓶颈。

图片

Fig.1 这张图展示了本文提出的更新型树结构模型的整体架构。该模型主要由四个核心部分组成:编码器、解码器、符号预测器以及关系预测器。此外,还引入了查询构建模块,用于实现多分支的平行解码,从而有效降低解码时间。

首先,编码器部分采用一款33层的ResNet-like卷积网络,用于从手写数学表达式图像中提取深层特征。为了增强模型的空间定位能力,编码器将位置信息编码融入到提取的特征中,使用二维正弦和余弦函数生成位置编码,并将其与特征相加,得到位置感知的特征表示。这一过程确保模型能够充分利用空间结构信息,便于后续的关系预测。

在解码阶段,模型采用基于Transformer的结构来进行符号和关系的预测。每个解码步骤t中,查询向量Qt由前一轮预测的符号或关系的嵌入向量与上一轮的解码查询拼接而成
\( Q_{t}=Concat(Q_{t-1},Emb(y_{t-1})) \)。为了保证因果性和模型训练的效率,采用了带掩码的多头自注意力机制(masked multi-head attention)。在训练时,应用下三角掩码,避免模型看到未来信息,从而符合自回归的预测原则。

具体的多头注意力机制通过将查询、键、值分别经过不同的线性变换后,分别得到多组投影,计算每一组的加权和\( Attn(q,k,v)=softmax(\frac{qk^{t}}{\sqrt{d_{k}}}v) \)。多头的输出随后拼接在一起,再通过线性层整合,提升模型的表达能力。对于输入特征,模型还进行了reshape操作,将二维空间特征展平为一维序列,使其能够适配Transformer架构。在这一基础上,模型采用了多头注意机制,结合位置编码,逐步捕获全局信息。

在每一层的Transformer中,经过多头注意力后,还加入了前馈网络
,通过两层线性变换配合ReLU激活,增强模型的非线性表达。这些操作共同作用,使模型既能建模节点之间的全局关系,又能在不同尺度上捕获特征。

除了符号预测外,模型还引入关系预测器,专门用以识别节点之间的结构关系,如上下、左右等。预测结果通过线性+softmax分类器输出\( X'=ReLU(XW_{1}+b_{1})W_{2}+b_{2} \),为树结构建立明确的节点与边的关系。

最后,为了应对树的多分支情况,模型中的查询构建模块会根据已预测的符号和关系,动态生成新的查询,指导下一轮同时解码多个子分支,从而做到了“branch parallel decoding”。这一创新设计显著减少了解码的时间步数,对比传统逐步深度优先的解码,极大提高了效率和准确性。

综上所述,该模型在Transformer架构基础上,结合树结构建模和动态查询机制,有效实现了复杂数学表达式的结构化识别,兼顾效率与准确性,为手写数学表达式识别提供了新思路。

三、主要结论

本文提出的基于树结构的分支并行解码模型(BPD),成功实现了对手写数学表达式的准确识别。该模型通过引入显式的结构预测、“查询构建模块”以及多分支并行解码策略,有效减少了传统序列解码中长序列带来的性能瓶颈,显著提升了识别速度和精度。实验结果表明,在多个公开数据集上,所提模型在表达率(ExpRate)、结构识别率(StruRate)等指标均优于现有的序列和树结构化方法,尤其在处理复杂表达式时表现出明显优势。不仅如此,该模型还具备较好的语法合理性,能够更好地遵循数学表达式的结构规则。

图片
图片
图片

Table 1验证了所提出的树结构分支并行解码模型(BPD)在不同数据集上的优越性能,显示其在实际应用中具有较强的泛化能力和实用价值。该技术通过显式预测符号关系和多分支并行解码,有效提高了识别准确率,从而突破了传统序列解码在处理复杂表达式时的瓶颈。Table 2进一步证明了该模型在应对不同结构复杂度的表达式中,都表现出更优的识别效果,尤其在结构复杂度较高的情形下,显示出模型的鲁棒性和稳定性。这一技术创新确保了模型在复杂场景下的优异表现。Table 3强调了所提的多分支并行解码机制相较于深度优先的树结构解码方式,在识别速度和性能方面的显著提升,充分验证了分支并行解码技术在缩短解码时间和提升识别效率中的关键作用。最后,Table 4对比了我们的方法与先前先进的树结构方法,结果表明本技术在整体识别性能和结构理解能力方面具有明显优势,有效推动了手写数学表达式识别技术的发展,展示了其在提升系统性能和实际应用中的巨大潜力。

总体而言,本文的研究不仅提升了手写数学表达式识别的性能,也为基于结构的表达式解析提供了新的技术思路,有望在实际应用中推广,为数学教育、科学计算等领域的发展提供有力的技术支持。

四、产品应用

为应对教育、科研及专业文档数字化中对数学公式精准识别的迫切需求,合合信息将手写数学表达式识别技术深度融入至公司产品矩阵,实现了技术研发从实验室到产业应用的跨越。

1. 智能文本处理企业级AI产品线——TextIn

基于本文提出的数学表达式识别模型,TextIn 企业级智能文本处理平台实现了对扫描文档及手写内容中数学公式的高效、精准识别,并可将识别结果结构化输出为标准化数学表达形式,为后续的数学内容理解、编辑、检索与分析等应用提供稳定可靠的底层能力支撑。

该能力可广泛应用于教育机构试题库建设、科研论文与学术资料处理以及各类专业文档管理场景,能够自动提取并还原符号密集、结构复杂的数学公式,显著提升数学内容的数字化水平与结构化处理效率,体现了本文研究成果在真实业务环境中的应用价值。

图片

                        图说:TextIn识别数学试卷手写公式

2.  AI错题学习管理工具——蜜蜂试卷

蜜蜂试卷是合合信息面向K12学生及家长推出的AI移动端智能错题学习助手,支持手写体试卷智能识别、AI批改、错题分析及 “举一反三”的互动学习功能。基于数学表达式识别技术,蜜蜂试卷支持学生手写数学作业的自动识别与解析,系统能够将用户提交的手写数学答案快速、准确地转换为 LaTeX 或结构化数学数据,为自动评分、步骤分析与错误诊断提供可靠输入基础,显著提升作业批改与反馈效率。

总体而言,本文提出的方法在数学表达式识别任务中展现出显著优势,尤其在处理结构复杂、层级关系丰富的数学公式时,具备更高的准确性与稳定性。结合公司现有产品矩阵,该技术可在文本处理、学术研究与教育信息化等领域实现更加智能、高效的内容处理方案,为教育数字化与智能化教学提供关键技术支撑。这不仅有效提升了产品的技术竞争力,也与未来智能教育与智慧办公的发展趋势高度契合。

最近无论是看论文还是折腾知识库,喂给大模型的时候使用 pdf 或者链接的方式体验非常不爽。
还有就是下载 2312.12345.pdf 这种无意义的文件名非常反人类,于是开发了这个转 markdown 插件。

两种转 markdown 方式,在 setting 页面进行设置:

  1. 基于 ar5iv 的 HTML 转 markdown
    • 转换速度快
    • 最新的论文可能没有 ar5iv 页面
  2. 使用 minerU 的 api 进行转换
    • 转换速度慢
    • 最新论文也支持

直接安装:

项目地址:

觉得有用可以点个 star


📌 转载信息
原作者:
SimonSun
转载时间:
2026/1/19 18:23:29

推荐 codex cli,便宜好用,建议开 xhigh 档。

把你的作业要求粘到一个 markdown 文件中。

对于代码任务,codex 直接自己生成自己跑就行。

对于文字任务
如果是报告类,让 codex 直接用 latex 写,给大家一个润色用的 prompt。
“将所有的句子、过渡词和连接词替换为最基础、最常用的词语。尽量使用简单、直接的表达方式,避免使用复杂或生僻的词汇,确保句子之间的逻辑关系清晰,删掉文末总结的部分。 避免使用机械化的连接词 (如 “首先”“其次”“然后”),改用更具连贯性的自然过渡;通过使用多样化句式,混合简单句、复合句和插入语使表达更富有层次感,同时避免连续短句或过于整齐的句式。在叙述数据或结论时,补充背景信息或个人研究观察,使内容更加具体并贴近实际研究场景,并通过问题引导或总结的方式实现段落之间的自然过渡,避免生硬切换,从而提升整体阅读的流畅性和逻辑性。不要使用太多的无序号分点,保持报告的学术性。”

如果是 PPT 类,让 codex 用 latex 的 beamer 模板写一个就行。

选择 latex,不仅给予了 ai 一个很好的交互载体,而且写出来的东西逼格较高,老师喜欢。

如果是写一个小学术 paper 这种,给大家另一套 prompt。
“Act as a senior academic editor and domain expert in [nsert Field, e.g., Computer Vision] topolish the following text for a top-tier publication (Ce.g., CVPR, IEEE). You must strictlyeliminate “Al-style” writing patterns by adhering to these constraints: do not useparentheses for supplementary information but integrate them syntactically; avoid hollow"A-B-C" parallel structures and forced symmetry; do not coin new terms or place standardconcepts in quotation marks; strictly preserve all technical terminology, LaTeX formulas.variables, and data values without modification; adopt a critical, analytical tone rather than apassive summary; absolutely ban cliche openers (e.g., “In the realm of”,“In the landscape of”.“Delve into”) and minimize mechanical transition words; ensure seamless logical flowbetween sentences to prevent abrupt jumps; avoid using slashes or excessive bolding; andnever hallucinate data or references. The final output must be concise, logically coherent.and indistinguishable from expert human writing.”

你只需要把工作流整理好发给 codex,就可以美美睡觉,一觉起来作业就做完了。
(当然以上内容仅限 cs 类专业)


📌 转载信息
原作者:
Jasper1024
转载时间:
2026/1/16 12:29:54

OpenAI 的网页版一直存在一个 bug,当点击复制按钮时,复制出的公式内容会进行错误的转义。

正确的 Markdown 格式ChatGPT 复制出来的结果
\[ f(x) = \frac{1}{x} \][ f(x) = \frac{1}{x} ]
\( a = \frac{3}{5} \)( a = \frac{3}{5} )

然后,我就借助 Antigravity 自带的浏览器控制功能,对这个 bug 进行了逆向分析

分析结果是:

  1. ChatGPT 页面中,Message 对象存储的原始 Markdown 是完整的,形如 "\\( a=\\frac{3}{5} \\)"
  2. 在点击复制时,触发一个名为 copyToClipboard 的函数
  3. 该函数会调用一个 stripEscapes() 函数,手动进行 转义符清洗,例如把 \# 变成 #
  4. 错误就出在这里,它也会错误地将 \[ 变成 [,导致复制出的 LaTeX 出问题

找到了错误,修正就很简单,这里直接搜索 React 组件的原始数据,找到 markdown 后直接复制即可。

我也是让 Antigravity Opus 写了个油猴脚本,先将原始的复制事件拦截,然后替换成正常的,效果很好。如果有更多需求,佬友们可以自行二次开发。

// ==UserScript== // @name         ChatGPT LaTeX 复制修复 // @namespace    https://github.com/theigrams // @version      1.0.0 // @description  直接从 React 状态读取原始 Markdown,绕过 ChatGPT 的错误转义逻辑 // @author       Antigravity // @match        https://chatgpt.com/* // @match        https://chat.openai.com/* // @icon         https://chat.openai.com/favicon.ico // @grant        none // @run-at       document-end // ==/UserScript==

(function () { "use strict";

  /**
* 从 React Fiber 中提取原始 Markdown
* @param {HTMLElement} turnElement - conversation-turn 元素
* @returns {string} 原始 Markdown 文本
* @throws {Error} 如果无法读取 React 状态
*/
function getOriginalMarkdownFromReact(turnElement) { // 获取 React Fiber 节点 const fiberKey = Object.keys(turnElement).find((k) => k.startsWith("__reactFiber$") ); if (!fiberKey) { throw new Error("无法找到 React Fiber 节点"); } let fiber = turnElement[fiberKey]; let depth = 0; const maxDepth = 50; // 向上遍历 Fiber 树,查找消息数据 while (fiber && depth < maxDepth) { const props = fiber.memoizedProps; if (props) { // 尝试多种可能的数据路径 // 路径 1: message.content.parts if (props.message?.content?.parts) { const parts = props.message.content.parts; if (Array.isArray(parts) && parts.length > 0) { console.log("[Markdown Copy] 找到数据路径: message.content.parts"); return parts.join("\n"); } } // 路径 2: displayParts if (props.displayParts) { const parts = props.displayParts; if (Array.isArray(parts) && parts.length > 0) { // displayParts 可能是对象数组 const text = parts .map((p) => (typeof p === "string" ? p : p.text || "")) .join(""); if (text) { console.log("[Markdown Copy] 找到数据路径: displayParts"); return text; } } } // 路径 3: text 属性 if (typeof props.text === "string" && props.text.includes("\\")) { console.log("[Markdown Copy] 找到数据路径: text"); return props.text; } // 路径 4: content 字符串 if (typeof props.content === "string" && props.content.includes("\\")) { console.log("[Markdown Copy] 找到数据路径: content"); return props.content; } // 路径 5: children 中的文本 if (props.children?.props?.message?.content?.parts) { const parts = props.children.props.message.content.parts; if (Array.isArray(parts) && parts.length > 0) { console.log( "[Markdown Copy] 找到数据路径: children.props.message.content.parts" ); return parts.join("\n"); } } } fiber = fiber.return; depth++; } throw new Error(`遍历了 ${depth} 层 Fiber 节点,未找到原始 Markdown 数据`); } /**
* 深度搜索 React 状态中的 Markdown 内容
* @param {HTMLElement} turnElement
* @returns {string}
*/
function deepSearchMarkdown(turnElement) { const fiberKey = Object.keys(turnElement).find((k) => k.startsWith("__reactFiber$") ); if (!fiberKey) { throw new Error("无法找到 React Fiber 节点"); } const visited = new Set(); let result = null; function search(obj, path = "", depth = 0) { if (depth > 20 || !obj || visited.has(obj)) return; if (typeof obj !== "object") return; visited.add(obj); // 检查是否是我们要找的数据 if (Array.isArray(obj) && obj.length > 0 && typeof obj[0] === "string") { const text = obj.join("\n"); // 检查是否包含 LaTeX 定界符(正确的格式) if ( text.includes("\\[") || text.includes("\\(") || text.includes("\\begin") ) { console.log(`[Markdown Copy] 深度搜索找到数据: ${path}`); result = text; return; } } if (typeof obj === "string" && obj.length > 50) { if ( obj.includes("\\[") || obj.includes("\\(") || obj.includes("\\begin") ) { console.log(`[Markdown Copy] 深度搜索找到字符串: ${path}`); result = obj; return; } } for (const key in obj) { if (result) return; // 已找到,停止搜索 try { search(obj[key], `${path}.${key}`, depth + 1); } catch (e) { // 忽略循环引用等错误 } } } let fiber = turnElement[fiberKey]; let fiberDepth = 0; while (fiber && fiberDepth < 30 && !result) { if (fiber.memoizedProps) { search(fiber.memoizedProps, `fiber[${fiberDepth}].memoizedProps`); } if (fiber.memoizedState && !result) { search(fiber.memoizedState, `fiber[${fiberDepth}].memoizedState`); } fiber = fiber.return; fiberDepth++; } if (!result) { throw new Error("深度搜索未找到包含 LaTeX 定界符的原始 Markdown"); } return result; } /**
* 显示提示消息
*/
function showToast(message, isError = false) { const toast = document.createElement("div"); toast.textContent = message; toast.style.cssText = ` position: fixed; bottom: 20px; right: 20px; background: ${ isError ? "linear-gradient(135deg, #ef4444 0%, #dc2626 100%)" : "linear-gradient(135deg, #10a37f 0%, #1a7f64 100%)" }; color: white; padding: 12px 20px; border-radius: 8px; font-size: 14px; font-weight: 500; z-index: 10000; box-shadow: 0 4px 12px ${ isError ? "rgba(239, 68, 68, 0.3)" : "rgba(16, 163, 127, 0.3)" }; animation: slideIn 0.3s ease; `; const style = document.createElement("style"); style.textContent = ` @keyframes slideIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } `; document.head.appendChild(style); document.body.appendChild(toast); setTimeout(() => { toast.style.opacity = "0"; toast.style.transform = "translateY(10px)"; toast.style.transition = "all 0.3s ease"; setTimeout(() => toast.remove(), 300); }, 3000); } /**
* 拦截复制按钮点击
*/
function interceptCopyButtons() { document.addEventListener( "click", async (e) => { // 检查是否点击了复制按钮 const btn = e.target.closest( 'button[data-testid="copy-turn-action-button"]' ); if (!btn) return; // 阻止原始的复制行为 e.stopPropagation(); e.preventDefault(); console.log("[Markdown Copy] 拦截到复制按钮点击"); try { // 找到对应的消息容器 const turn = btn.closest('[data-testid^="conversation-turn-"]'); if (!turn) { throw new Error("无法找到消息容器元素 (conversation-turn)"); } console.log( "[Markdown Copy] 找到消息容器:", turn.getAttribute("data-testid") ); // 尝试从 React 状态读取原始 Markdown let markdown; try { markdown = getOriginalMarkdownFromReact(turn); } catch (e1) { console.log("[Markdown Copy] 常规路径失败,尝试深度搜索..."); markdown = deepSearchMarkdown(turn); } if (!markdown) { throw new Error("获取到的 Markdown 为空"); } // 写入剪贴板 await navigator.clipboard.writeText(markdown); console.log("[Markdown Copy] 成功复制原始 Markdown"); console.log( "[Markdown Copy] 预览:", markdown.substring(0, 200) + "..." ); showToast("✓ 已复制原始 Markdown"); } catch (error) { console.error("[Markdown Copy] 错误:", error); showToast(`✗ 复制失败: ${error.message}`, true); // 不 fallback,直接报错 throw error; } }, true ); // 使用捕获阶段,确保先于其他处理器执行 } // 初始化 console.log("[Markdown Copy] 脚本已加载 v1.0.0"); interceptCopyButtons(); console.log("[Markdown Copy] 复制按钮拦截已启用"); })();

📌 转载信息
原作者:
Theigrams
转载时间:
2026/1/14 17:40:35

本地配置 texlive + vscode

1. 背景

随着 overleaf 免费版的编译时间不断缩小,遇到过长的文本可能出现无法编译超时的情况。于是考虑在本地
配置 texlive 进行编译。由于我使用 vscode 较多,因此并没有下载 texworks, 而是在 vscode 上进行配置,同时
可以享受到 vscode 的 AI 集成等功能。

本机环境为 windows11。

2. 安装 texlive

首先前往 Index of /CTAN/systems/texlive/Images/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

出现如图所示的页面,texlive.iso 或 texlive2025.iso 进行下载即可。

下载时间十几分钟左右,需耐心等待。

接着在本地解压,得到

选择 install-tl-windows.bat 进行安装,即可。可以选择不安装前段 texworks。

3. 配置 vscode

首先安装 vscode 的 latex 插件,一般选择为 LaTeX Workshop。

\documentclass{article}
\usepackage{fontspec}
\usepackage{xeCJK}
\setCJKmainfont{SimSun}
\usepackage{geometry}    % 调整页边距
\usepackage{amsmath}     % 数学公式支持
\usepackage{graphicx}    % 插入图片


% 2. 基础设置
\geometry{a4paper, margin=1in} % A4纸,1英寸页边距
\title{LaTeX中文文档示例}       % 文档标题
\author{测试用户}               % 作者
\date{\today}                   % 日期(\today表示当前日期)

% 3. 文档开始
\begin{document}
\maketitle % 生成标题(包含标题、作者、日期)

% 正文段落
这是一段中文正文示例。LaTeX擅长处理复杂排版,尤其在数学公式、学术引用和长文档结构上优势明显。

% 无序列表(可用于罗列要点)
\begin{itemize}
    \item 优点1:排版美观,格式统一
    \item 优点2:数学公式支持完善(如下方示例)
    \item 优点3:跨平台兼容,文档格式稳定
\end{itemize}

% 数学公式示例(两种常用形式)
% 1) 行内公式(嵌入正文):勾股定理 $a^2 + b^2 = c^2$
% 2) 独立公式(单独成行,自动编号):
\begin{equation}
    f(x) = \int_{-\infty}^{+\infty} e^{-t^2} dt = \sqrt{\pi}
\end{equation}

% 插入图片(需将图片文件放在同一目录,替换"test.jpg"为实际文件名)
\begin{figure}[h] % [h]表示优先将图片放在当前位置
    \centering % 图片居中
    \includegraphics[width=0.6\textwidth]{test.jpg} % 宽度设为页面60%
    \caption{图片示例(可修改为实际图片说明)} % 图片标题
    \label{fig:test} % 图片标签(用于后文引用)
\end{figure}



\end{document}

在 latex 中最麻烦的问题是中文字体的寻找,Windows 上的字体和你认为的名称可能有较大出入,因此会出现
字体未找到的错误。

这里采用 xeCJK,因为 ctex 的默认配置会找 SimHei 字体,而本机简黑字体可能名称不直接叫 SimHei。
故出现如图错误

若想使用 ctex 则需要将默认配置关闭,并重新配置字体。

\documentclass[fontset=none]{ctexart}
\setCJKmainfont{SimSun}
\begin{document}
你好,世界
\end{document}

那么我们如何在本机上找到我们需要的字体呢,这时候可以用到 powershell 中的 fc-list 命令,查找本机上所有字体。

我们可以看到,主要有两个 C:/WINDOWS/Fonts 和 H:/texlive/2025/texmf-dist/fonts 两个文件夹下的字体,
H:/texlive/2025/texmf-dist/fonts 是 texlive 自带字体,主要用于数学,西文等。
C:/WINDOWS/Fonts/ 是我们本机自带字体,我们将要在他的目录下寻找我们需要的中文字体。

当我们需要查找仿宋字体时,我们可以 fc-list | Select-String “song”, 得到如图结果!

这里的 STFangsong 就是我们需要的名称。

另一个问题则是 settings.json 的配置,我之前使用这位 https://zhuanlan.zhihu.com/p/624932249 博主的配置。但发现存在引用时,会发生无法二次编译的问题,于是进行了添加

{ "latex-workshop.latex.autoBuild.run": "onSave", "latex-workshop.showContextMenu": true, "latex-workshop.intellisense.package.enabled": true, "latex-workshop.message.error.show": false, "latex-workshop.message.warning.show": false, "latex-workshop.latex.tools": [ { "name": "latexmk_xelatex", "command": "latexmk", "args": [ "-xelatex", "-synctex=1", "-interaction=nonstopmode", "-file-line-error", "-outdir=%OUTDIR%", "%DOCFILE%" ] } ], "latex-workshop.latex.recipes": [ { "name": "LaTeXmk (XeLaTeX)", "tools": ["latexmk_xelatex"] } ], "latex-workshop.latex.recipe.default": "LaTeXmk (XeLaTeX)", "latex-workshop.latex.clean.fileTypes": [ "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof", "*.lot", "*.out", "*.toc", "*.acn", "*.acr", "*.alg", "*.glg", "*.glo", "*.gls", "*.ist", "*.fls", "*.log", "*.fdb_latexmk" ], "latex-workshop.latex.autoClean.run": "onFailed", "latex-workshop.view.pdf.viewer": "tab", "latex-workshop.view.pdf.autoReload.enabled": true, "latex-workshop.view.pdf.reloadOnStart.always": true, "latex-workshop.view.pdf.internal.synctex.keybinding": "double-click" } 

精简了一些指令,只使用 latexmk_xelatex 用于管理多次编译。

4. 引用

https://zhuanlan.zhihu.com/p/624932249


📌 转载信息
原作者:
lycx
转载时间:
2026/1/12 16:41:19

各位佬友大家好!

最近折腾文档转换,发现现有的工具不太顺手,于是一怒之下用 Rust 手搓了个开源工具 —— Tylax

这玩意儿主要用来在 LaTeXTypst 之间进行全文档互转。

跟市面上那些靠正则(Regex)硬替换的脚本不一样,Tylax 走了正道,基于 mitextypst-syntax 搞了完整的 AST(抽象语法树)解析。这意味着处理嵌套结构、各种环境定义还有复杂的数学公式时,稳得一批,不会因为少个括号就原地爆炸。

开源地址GitHub - scipenai/tylax: A bi-directional converter between Typst and LaTeX. Available as both a CLI tool and a Web interface.
在线体验(WASM)https://convert.silkyai.cn/

几个核心功能:

  • 双向奔赴:完美支持 LaTeX ↔ Typst 互转,不偏科。
  • 表格不乱:智能处理 \multicolumn\multirow,以前最头疼的表格转换现在很丝滑。
  • TikZ 黑科技:搞了个实验性功能,支持把 LaTeX 的 TikZ 代码直接转成 CeTZ!
  • Rust 性能:速度极快,既可以本地 CLI 跑,也可以浏览器里跑 WASM。

食用方法:

如果你有 Rust 环境,直接一把梭:

cargo install tylax

最后求一波反馈:
欢迎各位佬友尝鲜、Star 或者提 Issue 拍砖!
目前项目还在快速迭代中,特别需要大家手里那些奇奇怪怪的文档(Edge Cases)来喂养测试,以此修复潜在的 Bug。

感谢佬友们支持!


📌 转载信息
原作者:
zhxsxuan
转载时间:
2026/1/8 12:14:01

Anki

Anki 是一款免费、开源的闪卡 (flash card) 程序。它运用了例如主动回忆测试和间隔重复的设计,帮助用户进行记忆。

优点

它优秀的点在于,所有卡面我们都可以用 css 自己设计,而且手机,电脑,ipad 之类的可以全端同步。所有卡的内容我们也可以自己制作 csv 文件来导入,拥有非常强大的客制化能力。

由来

这个软件通常的的使用场景为,零碎时间的背单词,或者记忆任何 “问题”,“回答” 的场景。

而,我自认为我的深度学习机器学习基础并不牢靠,很多基础概念甚至有时候都会有遗忘。传统意义上,可能最好的解决方法是去找一个哈佛斯坦福的深度学习公开课,然后啃下来。但实际上,学过公开课的人应该都知道,我们都没啥自控力,顶多看两三节就没然后了。或者是以输出倒逼输入,直接做相关项目,有不会的东西在学,做中学。我是觉得这样对以后的工程能力和整体理解能力都更有帮助,但是,也有一个问题,我没办法走到哪都能写代码,到哪都有一台电脑。我随身的只有手机。那,看深度学习的优秀教科书?《Deep Learning》《Understand Deep Learning》什么的?

我说实话,我试过看 C Primer Plus 或者托马斯微积分之类的大部头书籍,你真的在图书馆慢慢一点一点看还好说,就坐公交等公交那 10 分钟 15 分钟,真的很难有一点点知识吸收。大部分情况都是,努力理解英语本身,英语在脑子里翻译完成中文就到站了,每次看的都是那本书的 “序”。

能力

所以,我为了减轻认知负荷,给日常这种小的碎片时间能学习 DL 的可能,我去做了这么一个词组,我自己写的程序,让 Gemini3.0 pro 来一个章节一个章节的总结那两本经典教材,总结出启发式的问题和回答对。然后设计了整个 anki 的 UI,适配了电脑端,web 端,android 端,ios 端,设计了白天模式和黑夜模式。最终,现在能得到一个好看的,有内容的 “单词本”,我觉得挺有意义的,所以我发出来。

对了,我还让 Anki 的这个单词本支持了 Markdown 格式,也支持了 Latex 公式内嵌,所以,看起来应该还是挺赏心悦目的。

想要的可以找我,我看人多的话我就开源,人不多我就自己学着玩儿了。

展示

Anki:

卡牌示例:

windows:

Android:

[gaivrt (GAIVR) · GitHub]


📌 转载信息
原作者:
gaivrt
转载时间:
2026/1/1 15:25:23

这年头,不制造一些学术辣鸡可能都对不起 arxiv 这个昵称
【更新 001】 SKILL 可以自行调用脚本查看已生成的正文页数,不会像之前一样说是写八页,引用占了四页
比较费 token,一篇写下来至少预留价值 $25 的预算吧。。【借来的 pro 账号根本用不完啊用不完 】

开了 这个坑之后

又烧了一些 token,觉得应该可以试试 gpt-5.2 extra high 其他方面究竟是个什么水平,于是把小黑手伸向了学术创作

于是就有了 latex-arxiv-SKILL, Codex 化身小助研,全自动写综述!

太长不看

项目就在这里啦,里面自带了 arxiv-paper-writer SKILL, 也额外添加了上一个帖子里的 collaborating-with-claude, collaborating-with-gemini

两轮对话就能生成能看的 pdf (在 example/ 下面)

现在,你甚至连写文章都可以抽卡了

【如下】果然世界的尽头是概率论

前情回顾

之前也分享过一些心得,此前各大模型的能力都不行,需要古法写作,很烦

佬们有没有开始用 cursor 写论文,效果拔群,吓鼠个人了 【cursor 降智了,佬友酌情使用】
古法写作也是可以的,放在了 IDE-latex-template 这个分枝

终于使用了 Claude 3.7 客户端 + MCP | 不拿来水论文可惜了啊,会员含金量继续升高啊喂
【推荐使用 commands】用智能体来撰写 / 管理 latex 项目,claude code 是或许懒人最好的选择

目前的局限

  • 写作格式是 arxiv.org 【昵称亮了】IEEEtran 格式, 主题是 ML / AI 【别的话题建议还是修一下再用】
  • 上下文大概率会在最后完成文章之前爆掉 【这也是高强度 codex 一周半第一次把 codex 的上下文打爆了】,不过不影响写作,codex 会悄咪咪压缩一次,继续干活
  • Gemini / Claude 合作是个摆设,写 latex 的 skill 本身不会中途去问 gemini 和 claude
  • 系统里面要有可用的 latex 环境,codex 中间会不停 compile 修复错误。
  • 没有额外再检查一遍引用错误,主打一个拟态而非求真 [总体幻觉率不会很高,不过谁家写论文不在最后重做一遍 Bibliography?]

📌 转载信息
原作者:
arxiv
转载时间:
2025/12/28 10:55:09