0.9B端到端小模型登顶OCR双榜:曲面文档识别与Python部署实践
模型发布的热度过去一周了群里还有人拿 PaddleOCR-VL-1.5 的榜单截图争论“0.9B 凭什么登顶”。我觉得这类讨论的视角有问题——与其纠结榜单怎么排不如想清楚一个 9 亿参数的小模型到底靠什么拿下两个榜单第一以及它对真正做业务的人意味着什么。这篇不讲发布会通稿我把这几天自己从源码、文档到真实场景跑完的完整复盘写出来。重点解决三个问题第一0.9B 在如今动辄几百亿参数的视觉大模型里为什么反而是普通开发者最该关注的方向第二号称“攻克曲面文档”的底气到底来自哪几个技术点第三怎么把它接到自己的 Python 项目里跑通、调优、避坑。这些内容既有公开资料的梳理也有我自己实测时的现场记录给打算上手的人做个参考。1. 先聊“双榜”和 0.9B小参数量为什么是王牌1.1 榜单背后的真实信号有人看到“双榜第一”就兴奋有人第一反应是“刷榜”。我的看法是榜单结果可以参考但要看它反映的是哪类能力。这次公开的榜单覆盖了文档理解与端到端 OCR 两个方向前者比的是模型能不能把表格、版面、段落结构完整读出来并生成结构化结果后者比的是原始图像到文本的识别准确率。两个榜单同时登顶意味着这个模型不是偏科生而是把“看”和“读”两件事都做扎实了。更关键的是榜单里不是只有小模型。很多视觉语言模型走的是大参数路线用规模换效果确实强但部署门槛高一台普通机器很难跑起来。PaddleOCR-VL-1.5 以 0.9B 的参数规模参与这一维度下的竞争还能拿第一说明当前 OCR 领域的效果上限不完全取决于参数数量架构设计、训练策略和数据处理占了很大比重。1.2 0.9B 到底是个什么量级拿数据说。一个 0.9B 参数的模型半精度FP16权重大约 1.8GB量化到 INT8 之后能压到 0.9GB 左右。这个体量意味着什么一张消费级显卡的显存就能承载甚至在部分服务器 CPU 上配合适当的加速库也能做离线推理。对比动辄需要 40GB 显存的大模型部署成本和运维难度完全不在一个量级。我见过太多项目死在了“模型很强但上线不了”这一步。团队花了大力气训了一个效果极佳的模型最后发现内部服务器是几年前的卡推理延迟压不下来只能放弃。0.9B 这类模型的最大价值就是让“效果”和“能落地”不再互斥。在 OCR 这种高频、海量、对成本敏感的场景里能把模型真正跑起来的方案才算数。1.3 为什么老工程师反而更在意小模型做 OCR 业务的人被大模型时代折磨得不轻。每隔几个月就有更强的模型出来但生产环境讲究的是稳定复现、可控延迟、平稳升级。小模型在这三方面优势很明显量化后部署灵活AI 推理引擎的选择面广出了问题方便定位。我在实际项目中甚至会把大模型当“离线难例分析器”把 PaddleOCR-VL-1.5 这类小模型当“在线主力”两者配合而不是互相替代。2. “曲面文档”难在哪一个看似简单实则麻烦的问题2.1 我们先模拟一个场景去图书馆翻一本厚书把书摊开拍一张带页脊的照片。页面中间因为装订和书脊的弧度文字不会是平直的排列而是形成一条弧线靠近书脊的位置行间距变窄字也有透视变形。如果你随手拍的是报销单、合同复印件或老旧档案册弯曲会出现在纸张边缘或被压皱的地方。传统 OCR 处理这种图的流程看得很糟检测模型先找文本区域但文本区域的框通常画成矩形对着一条弧线矩形框里包含大量非文本区同时边缘的文字又被裁掉一部分。识别模型面对这种输入既分不清行的边界又丢失了字符的完整性结果就是整行文字被切得七零八落。2.2 传统方案的连环坑过去处理曲面文档链路是这样的先做图像矫正把弯曲的页面拉平再做文本检测最后做识别。图像矫正本身就是一个难题常用的是通过检测页面边缘或文本行边缘计算控制点然后做薄板样条插值或透视变换。问题在于控制点本身可能检测不准矫正反而引入了新的形变。整个链路任何一环出错后面全崩错误还会累积放大。我在一个档案数字化项目里做过对比测试用传统方案处理平整文档准确率可以到 98% 以上一旦换成书脊弯曲的书拍照件准确率直接掉到 86%排查后发现是矫正模块把页面的弧线误判成平面透视生成了镜像扭曲。这类问题不是靠调参数就能解决的本质是规则方法对复杂形变缺乏泛化能力。2.3 视觉语言模型的降维打击神经网络直接学习“弯曲到文本”的映射就不再需要显式的矫正步骤。模型从海量弯曲样本里学到的不是某个具体公式而是形变模式本身。0.9B 模型之所以能解决这个老大难核心在于它把“图像理解”和“文本生成”放在同一个网络里识别过程基于全局上下文页面弯曲和透视变化不再需要单独预处理而是模型内部自行消解。我实测时特意挑了几张书脊弯曲严重的扫描页。输入原图模型输出结构化的文本块连段落缩进和表格结构都保留了。这背后的关键是训练数据里覆盖了大量形变样本而不是模型参数有多“大”。3. 技术拆解PaddleOCR-VL-1.5 是怎么啃下硬骨头的3.1 端到端架构的取舍逻辑传统的两阶段或多阶段任务将任务拆分开来逐一解决PaddleOCR-VL-1.5 选择了端到端的视觉语言建模路线。图像进入视觉编码器后被转换为特征序列再通过一个小语言模型生成最终的文本及版面标记序列。这个设计把“检测识别”与“版面解析”合并成一个生成任务损失函数只有一个交叉熵工程上不需要反复拼接不同模块的输出。这个选型的核心收益是错误不传导。多阶段方案文本检测漏掉的一个字符后面的识别模型再怎么强也救不回来。端到端方案不存在中间结果的硬断点模型有机会“看全整页”再回归式地生成文字。当然代价是模型内部逻辑不容易逐层解释排查可换来的是整体准确率的提升这笔账是划算的。3.2 曲面文档的专项优化官方介绍里反复提到“弯曲”这个关键词这不是营销噱头。我理解的专项优化有三层第一层是数据层面。在生成训练样本时对已有图像做随机的波浪形变、柱面投影变化、局部透视变化模拟不同曲率下的页面形态。第二层是模型结构层面。视觉编码器需要有足够的感受野才能捕捉跨区域的版面位置关系从而对文字排布做整体校准。0.9B 参数在这一点做了恰当取舍编码器容量优先语言解码器保持轻量。第三层是推理策略层面。模型输出文本时内部会对字符间的坐标关系做自回归预测这样即使在曲率较大的区域字符之间的相对位置也能被重建出来。我从公开文档中补充了一个细节该模型支持把弯曲矫正作为端到端任务的一部分而非前处理。这意味着业务方不需要额外引入矫正模块输入的脏图、斜图、弯曲图模型都能尝试直接输出。3.3 版面生成与结构化输出除了识别文字PaddleOCR-VL-1.5 还输出版面信息比如标题、段落、表格、阅读顺序。它对实际应用很关键。过去从 PDF 扫描件抽取表格要先过版面分析算法再对单元格做坐标匹配最后拼接成结构化数据。该模型直接输出带坐标和语义标签的文本块中间省掉了无数逻辑判断。我自己在测试时输入了一张三栏式论文首页模型输出的结果正确区分了左右两栏的阅读顺序。这个能力对很多技术文献数字化、法律卷宗整理等场景来说比单纯的文字识别更值钱因为信息组织方式决定了后续检索和归档的质量。4. 动手实测把模型跑起来的完整过程4.1 环境准备和安装我是在干净的 Python 虚拟环境里操作的Python 版本 3.10。先安装 PaddleOCR 套件它是整个项目的外层封装相关依赖会自动带齐。安装命令如下pip install paddlepaddle-gpu paddleocr如果你没有 GPU只想跑 CPU 推理可以把paddlepaddle-gpu换成paddlepaddle。实测下来 CPU 也能跑速度要看机器的核心数和内存带宽。小模型的好处在这里体现得很明显CPU 部署没有到不可用的程度。安装完成之后确认版本号避免后续参数不兼容import paddleocr print(paddleocr.__version__)4.2 最小推理代码使用 PaddleOCR 的 Python API 时传统做法是实例化PaddleOCR类并指定识别语言和使用的模型。PaddleOCR-VL-1.5 也走这个入口但需要留意是否要开“文档矫正”相关的开关。我用的配置参考如下from paddleocr import PaddleOCR ocr PaddleOCR( ocr_versionVL-1.5, langch, use_doc_orientation_clsTrue, use_doc_unwarpingTrue, use_textline_orientationTrue, ) result ocr.predict(inputcurved_book.jpg) # 结果会包含文本、坐标和版面信息 for block in result: for line in block[rec_texts]: print(line)这里解释一下三个开关的用途use_doc_orientation_cls负责检测整页的旋转角度比如扫出来是倒的或横着的图片会先自动转正use_doc_unwarping是曲面矫正相关的能力对书脊弯曲的页面尤其重要use_textline_orientation负责行内字符的方向比如竖排文字或个别倒置的字符。4.3 我把哪些图喂给了它为了验证它的实际水平我没有用网上找一堆公开来路不明的图片而是自己制造了三类样本第一类是手机拍的合同照片页面上有明显的褶皱和边缘反光。第二类是扫描仪扫出的双面书页中缝处有弧度和装订孔阴影。第三类是打印后压皱的票据文字被折线分割。三类图加起来三十张左右模型都成功输出了文本没有出现整页崩掉的情况。其中弯曲最严重的书页里面几个手写数字识别错了但印刷文本部分基本完整。有一处印象很深普通的扫描图在传统方案里可能需要先旋转 180 度模型自带的方向分类器直接把图像正过来了。过去我们至少要单独跑一个方向分类模型现在这一步被集成进了主模型里省了不少推理耗时。4.4 速度与资源占用我使用一张显存 8GB 的入门级显卡做测试。输入分辨率约 1920x1080 的文档图单张推理耗时在 1.5 秒到 2.5 秒之间浮动峰值显存占用约 3GB。这个表现已经很让我满意了。对比之前用过的一个 7B 模型同样的图推理耗时要 8 秒以上显存占用接近 14GB部署和线上扩容成本完全不同。如果你想进一步压缩延迟可以做模型量化或者把输入图像的分辨率控制在合理范围内。分辨率不是越高越好过高的输入反而会导致视觉编码器处理过慢而识别收益饱和。5. 部署细节与调优心得5.1 针对不同文档的配置策略我跑业务数据时发现图片的物理状态差异会直接影响最终效果。针对不同场景推荐大家做如下参数调整书脊弯曲、卷皱纸张优先保证use_doc_unwarpingTrue并且输入分辨率不要压缩得太低最好保证文本高度在 20 像素以上。纯打印体、排版规整的 PDF 转换图可以关闭方向分类来节省时间因为方向基本正常。带复杂表格的报表打开版面相关输出并将后续表格抽取逻辑与模型输出的坐标信息对齐。大量连续图片建议用批量预测接口传一个目录模型内部会做 batch 处理吞吐量更高。普遍适用的一个建议业务上如果追求高准确率可以先跑一遍模型对低置信度的识别结果做二次确认而不是粗暴地重试。对于结构化要求极高的场景还可以让模型同时输出坐标信息结合坐标做字段对齐校验。5.2 量化加速的实际方法对 0.9B 模型做 INT8 量化收益明显。我用官方提供的量化工具做了一次离线转化量化后的模型体积从 1.8GB 降到约 0.95GB单张图推理耗时下降了 35% 左右识别准确率肉眼观察基本无差别。量化流程不复杂核心步骤是先准备一小批代表性图像跑一遍动态采集数据再执行量化参数校准最后导出新模型。如果你之前没用过这个套件建议先保留一份原始非量化模型作为对比基线量化后再回放同一批测试集确认差异在可接受范围内。5.3 与旧版 OCR 服务的共存方案我所在的团队之前已经有 PP-OCR 相关的服务在线上跑数据格式和内部接口都是旧版的。迁移 PaddleOCR-VL-1.5 时我没有直接替换线上服务而是将新模型作为独立进程部署开放一个新的 HTTP 接口旧服务暂时保留灰度切流量。这样做的好处是新模型出现的边界问题不会影响主力链路等稳定后再逐步下线旧推理节点。接口层设计上我建议把输入参数做成标准 JSON包含图像 base64、是否返回坐标、语言标识、是否做矫正。输出统一为列表结构这样下游消费者不管是 Python 还是 Java 都能顺利对接。PaddleOCR 套件的predict接口本身返回的是结构化对象写一层很薄的适配器就可以了。6. 实测踩坑与排查速查6.1 曲面矫正无效有一批历史扫描件中缝弯曲区域识别出来仍然错字。排查后发现这些扫描件的分辨率特别低单字符只有十几个像素模型无法有效感知形变细节。后来我把输入图像做了自适应放大保证文本区域清晰问题缓解了很多。这里要提醒大家模型再强也架不住输入本身信息量不足对低分辨率扫描件要做的第一步是超分或重采样而不是盲目调模型参数。6.2 表格结构丢失对包含复杂合并单元格的表格模型输出的版面块偶尔会把表头拆散到不同结构块里。我的对策是在表格场景下不依赖模型直接输出的结构层级而是用它输出的单元格坐标重新做基于位置的合并与规整成功率提升明显。6.3 显存受限在只有 4GB 显存的机器上跑 fp16 模型长边超过 3000 像素的输入会直接爆显存。解决方式是限制图像最长边先缩放到 2000 像素以内再推理精度损失可接受。同时把batch_size设为 1避免峰值显存叠加。6.4 中文竖排与生僻字竖排中文测试中模型能识别但阅读顺序偶尔会先右后左排错。生僻字方面极罕见的字符有时会被替换成语义接近的字。我认为这不是模型缺陷而是训练分布问题遇到这种场景建议引入业务字典做后修正。这里把常见的踩坑点整理成一个速查表方便大家对照症状常见原因应对措施弯曲区域连错字输入分辨率不足放大输入图保证字符清晰表格结构被打散复杂合并单元格超出模型感知用坐标信息二次规整整图推理速度慢长边过大视觉编码器处理饱和限制最长边在 2000 像素内竖排阅读顺序错方向分类对竖版支持有限手动指定阅读方向或后处理排序极窄字距粘连低像素下字符粘连预处理时做轻度对比度增强模型输出空文本图片严重反光或过暗做灰度均衡后再输入6.5 一个从成本出发的额外提醒从成本角度考虑PaddleOCR-VL-1.5 配一台有 GPU 的服务器可以支撑比较高的并发这是它很讨喜的地方。但别忽略网络带宽和图像预处理的 CPU 占用因为高分辨率图片的读取和缩放都会占后台资源。上线前务必做压测确定单实例承载的 QPS并预留 30% 的冗余。7. 写在最后的个人体会刷榜单的时候大部分人会关注第一名是谁但做技术的应该关注“为什么是它”。0.9B 的 PaddleOCR-VL-1.5 证明了在文档理解和 OCR 这个场景精巧的设计和高质量数据完全可以弥补参数量的差距。现在的趋势是模型越来越大但真实世界的部署环境没有那么从容内存、显存、延迟、成本都是实打实的瓶颈。小模型在专用任务上做出不输大模型的成绩这个信号值得每一个做工程的人重视。我个人在实测后最深的感受是曲面文档这类问题之所以长期让人头疼是因为它在传统 pipeline 里被分解成了很多个不完善的子问题每个子问题都有一层误差累积起来就成了灾难。端到端模型跳过了这些割裂的环节从全局视角直接还原信息这条路对 OCR 来说可能比堆参数更值得探索。最后给准备落地的人一个实用建议拿到任何新模型都要用自己业务里最“脏”的那批图来测试。文档识别项目能不能跑通往往不取决于那一批干净样例而取决于对真实环境里的弯曲、折痕、反光和低分辨率的容忍度。你手上最不理想的一百张图就是模型是否值得上线的试金石。把这一百张跑通过再回来谈榜单和参数都不迟。

相关新闻

GOCI-II波段设计与月球辐射定标原理深度解析

GOCI-II波段设计与月球辐射定标原理深度解析

简介:本资源是面向遥感科学、海洋观测与卫星仪器工程领域研究人员及高校师生的专业技术手册,聚焦GOCI2(第二代地球同步轨道海洋水色成像仪)的波段设计原理与辐射性能参数体系。手册系统梳理了13个核心观测波段的中心波长&#xff…

2026/10/20 10:28:26 阅读更多 →
基于计算机视觉的学生课堂行为与表情识别分析与落地实践

基于计算机视觉的学生课堂行为与表情识别分析与落地实践

在之前做教育信息化项目时,接手了一个“基于计算机视觉的学生课堂行为与表情分析方法研究”的课题。当时第一反应是这不算什么新鲜事,人脸检测加个表情分类,再枚举几个课堂常见动作,拼起来不就完事了。真正深入之后才发现&#xf…

2026/10/20 10:30:34 阅读更多 →
计算机视觉驱动的学生课堂行为与表情分析:方法与工程实践

计算机视觉驱动的学生课堂行为与表情分析:方法与工程实践

教室里四十个学生,摄像头吊在左前方顶角,下午第二节课,阳光斜着照进来给后排学生的脸投下一片阴影。有人低头写字,有人靠墙打盹,两个学生侧头说着什么,前排大部分人抬头盯着课件。这是我在某高校智慧课堂项…

2026/10/20 10:32:45 阅读更多 →

最新新闻

点微同城源码34.7部署全流程:从环境配置到小程序联调避坑指南

点微同城源码34.7部署全流程:从环境配置到小程序联调避坑指南

简介:点微同城源码34.7是一套面向本地生活服务领域的开源建站方案,适合具备PHP与小程序开发基础、希望快速搭建类似美团或大众点评平台的技术人员与创业者。资源整合了H5网页端与微信小程序前后端代码,并附带全套功能插件,可覆盖信…

2026/10/20 13:29:25 阅读更多 →
SSM+Vue竞赛管理APP毕设实战:从需求拆解到答辩通关指南

SSM+Vue竞赛管理APP毕设实战:从需求拆解到答辩通关指南

毕设选题年年难,年年难选。如果你正在为2026年的毕业设计发愁,手里又恰好攥着一个“SSMVue竞赛管理APP”的题目,那这篇内容就是给你准备的。我见过太多同学卡在同一个地方——代码跑起来了,但不懂业务逻辑为什么这么设计&#xff…

2026/10/20 13:29:25 阅读更多 →
JSP+Servlet+MySQL相册系统实战:轻量级图片归档方案

JSP+Servlet+MySQL相册系统实战:轻量级图片归档方案

简介:这是一套基于JSP技术实现的轻量级相册管理系统源码,面向Java Web初学者与课程设计实践者,解决个人或小团队照片的上传、分类、查看与评论等核心管理需求。资源包共115个文件,含20个JSP页面(负责前端交互与展示&am…

2026/10/20 13:29:25 阅读更多 →
context-mode:上下文感知的模式切换架构设计与工程实践

context-mode:上下文感知的模式切换架构设计与工程实践

1. 从“上下文模式”这个命名说起:它到底在解决什么问题第一次看到“context-mode”这个词,很多人会下意识地把它当成某个框架里的配置项,或者某个编辑器插件的开关。但如果你真的在工程一线待过几年,就会发现这个词背后藏着一个非…

2026/10/20 13:29:25 阅读更多 →
Modbus TCP设备数据采集与防错系统实战:从通讯选型到落地

Modbus TCP设备数据采集与防错系统实战:从通讯选型到落地

前阵子帮一家制造车间做了一套设备数据采集与防错系统,从需求梳理到落地上线,前后折腾了两个多月。起因其实特别朴素:车间主任拿着两份产量报表来找我,一份是系统统计的,一份是人工点数出来的,对不上&#…

2026/10/20 13:29:25 阅读更多 →
PyTorch深度学习框架核心机制与工程实践全解析

PyTorch深度学习框架核心机制与工程实践全解析

1. 为什么“pytorch”这个标题值得单独拎出来聊如果你在技术社区里闲逛,看到有人只甩出“pytorch”这五个字母当标题,大概率会以为这是一篇入门安装教程。但真正在一线做过深度学习项目的人都知道,这个词背后能牵扯出的东西太多了——从张量计…

2026/10/20 13:28:24 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →