11月8日:计算机先驱、LeNet-5与遥控器如何串起智能机器进化史

1. 三个看似无关的事件,为什么值得放在同一天讲

11月8日这个日子,在计算机发展的时间轴上有点意思。同一天里,诞生了一位计算机科学的奠基者,公开了一个改变整个视觉识别领域的网络结构,还出现了一项把"无线操控"从幻想拽进现实的小发明。三件事横跨基础理论、算法模型和硬件交互,表面看各走各的路,但把它们摆在一起,你会发现一条很清晰的线索:人类处理信息的方式,从"算得出来"到"看得明白"再到"远程指挥",其实是一步步把机器从计算工具变成感知与行动的主体。

我平时翻技术史资料有个习惯,不太爱按时间线平铺直叙,而是喜欢找"同一天发生了什么"这种交叉点。因为同一天出现的不同事件,往往共享同一个时代的技术土壤。11月8日这三件事就是典型:它们分别对应计算机的"大脑"(体系结构与编程思想)、"眼睛"(卷积神经网络)和"手"(遥控交互)。把这三点串起来,基本就是一部微缩的智能机器进化史。

这篇内容适合谁看?如果你是刚接触人工智能、计算机体系结构的学生,这里能帮你把零散的知识点挂到具体的历史坐标上;如果你是从业多年的工程师,可以把它当成一次技术脉络的复盘,看看今天用的卷积、遥控协议、编程范式,最初是怎么被逼出来的。我会尽量把每个事件的"为什么"讲透,而不是只报一个日期和名字。毕竟知道LeNet-5是哪年提出的不难,难的是理解它为什么非得是那个结构,以及它给今天的我们留下了什么可以直接抄的作业。

2. 计算机先驱的诞生日:从"能算"到"可编程"的关键一跃

2.1 那个年代真正的难题不是造机器,而是定义"计算"

很多人以为计算机史的开端是某台机器的诞生,其实更早的瓶颈在于:人类还没想清楚"什么是可计算的问题"。在电子计算机出现之前,人们用机械齿轮、继电器、打孔卡片做过各种计算装置,但它们都有一个共同毛病——只能干一件事。你要换个计算任务,就得重新接线、重新设计齿轮比,等于把机器拆了重造。

真正的转折点,是有人提出把"指令"和"数据"一起存进机器里,让机器按顺序读取指令来执行。这个想法今天听起来理所当然,但在当时是颠覆性的:机器不再是为某个特定任务定制的工具,而是一台"通用"设备,换一段程序就能换一种用途。这就是后来被称为"存储程序"思想的核心。11月8日诞生的这位先驱,正是把这一思想系统化、并推动它落地的人之一。

我常跟刚入门的朋友打比方:早期的计算装置像一台只能做红烧肉的自动炒菜机,而存储程序计算机像一口锅加一本菜谱——锅是通用的,菜谱(程序)可以换。这个类比虽然粗糙,但能帮你抓住要害:通用性来自"程序可替换",而程序可替换的前提是"指令能被存储和读取"。

2.2 存储程序思想落地时,工程师到底在纠结什么

把想法变成机器,中间隔着一堆现实约束。那个年代没有半导体存储器,能用的存储介质要么是延迟线(靠声波在管子里来回跑),要么是静电存储管(靠电荷在屏幕上保持),要么是磁鼓。它们的共同特点是:容量小、速度慢、还不太可靠。所以早期设计者必须在"存多少指令"和"跑多快"之间反复权衡。

这里有个容易被忽略的细节:指令集的设计直接决定了编程的难度。如果指令太复杂,硬件就臃肿;如果太简单,程序员就得写一大堆指令才能完成一件事。早期先驱们在这一点上做了大量取舍,最终形成的思路是——用一组精简但正交的指令,配合通用寄存器,让编译器(当时还是手工汇编)能高效地把人的意图翻译成机器动作。这套思路后来演化成RISC和CISC两大流派,但根子上的问题,几十年前就被这批人摸透了。

提示:理解这段历史对今天写代码有实际帮助。当你抱怨某个框架"设计得不合理"时,不妨想想它是不是在"指令复杂度"和"使用便利性"之间做了取舍。很多看似别扭的API,背后都是当年硬件约束的影子。

2.3 从这段历史里能抄到的三条实操经验

第一,通用性优先于极致性能。早期有人主张做专用计算装置,性能确实更好,但最终胜出的是通用计算机。原因很简单:专用设备的生命周期太短,任务一变就报废。今天做系统设计也一样,如果一个模块只服务于一个极窄的场景,先问问它会不会很快被淘汰。

第二,接口设计比内部实现更重要。存储程序思想之所以能延续至今,是因为它定义了一个稳定的接口——指令和数据统一编址。内部用什么存储介质、跑多快,都可以迭代,但接口一旦定下来,上层软件就能积累。这就是为什么今天的程序还能跑在几十年前定义的架构思路上。

第三,别低估文档和标准化的价值。那位先驱留下的不只是机器,还有一套描述计算过程的严谨方法。没有这套"共同语言",后来的研究者根本无法站在前人的肩膀上。我在带项目时深有体会:一个团队如果连变量命名和接口约定都统一不了,代码写得再快也是负债。

3. LeNet-5问世:卷积神经网络第一次真正"看懂"了图像

3.1 在LeNet-5之前,图像识别卡在哪一步

上世纪八九十年代,让机器识别手写数字是个热门但棘手的任务。当时的做法主要有两类:一类是人工设计特征,比如提取笔画的端点、交叉点、投影直方图,再喂给分类器;另一类是早期神经网络,把整张图片的像素直接铺平成一维向量,接全连接层。

这两条路都有硬伤。人工特征依赖专家经验,换个字体、加点噪声就崩;全连接网络则参数爆炸——一张32×32的灰度图有1024个像素,如果第一层就有几百个神经元,光这一层就是几十万个权重。参数一多,训练数据不够就过拟合,算力也扛不住。更致命的是,全连接层把图像的空间结构彻底打散了,像素之间的邻接关系丢失,而图像识别恰恰高度依赖"局部相关性"。

LeNet-5的贡献,就是用一个叫"卷积"的操作,把"局部感受野"和"权值共享"这两个思想变成了可训练的模型。它第一次让神经网络在处理图像时,既保留了空间结构,又把参数量压到了可接受的范围。

3.2 卷积和池化到底解决了什么问题

先说卷积。你可以把它想象成拿一个小窗口(比如5×5)在整张图上滑动,每滑到一个位置,就把窗口里的像素和一组权重做加权求和,得到一个输出值。这组权重在整个滑动过程中保持不变,这就是"权值共享"。它的好处是:不管数字"7"出现在图片左上角还是右下角,同一组权重都能检测到相同的笔画特征。这直接带来了平移不变性——图像平移了,识别结果基本不变。

再说池化。卷积之后特征图还是很大,池化层(LeNet-5用的是平均池化)把相邻区域的值取平均或取最大,相当于做了一次降采样。它的作用是压缩特征图尺寸、减少计算量,同时让模型对微小的位置偏移更宽容。你可以理解为:卷积负责"找特征",池化负责"抓大放小"。

LeNet-5的完整结构大致是:输入层→卷积层C1→池化层S2→卷积层C3→池化层S4→卷积层C5→全连接层F6→输出层。层数不多,但每一层的设计都有讲究。比如C1用了6个5×5的卷积核,得到6张特征图;C3不是把S2的所有特征图都连过来,而是有选择地连接,目的是打破对称性,让不同的特征图学到不同的东西。

层类型关键参数作用
C1卷积6个5×5核提取初级边缘、笔画特征
S2池化2×2平均降采样,增强平移容忍
C3卷积16个5×5核组合初级特征成更复杂模式
S4池化2×2平均进一步压缩
C5卷积120个5×5核全图卷积,输出高层特征
F6全连接84个神经元特征整合
输出全连接10个神经元对应0-9分类

3.3 为什么LeNet-5的结构今天看依然不过时

有人觉得LeNet-5太简单,跟现在的ResNet、Transformer没法比。但如果你仔细看它的设计逻辑,会发现现代卷积网络的核心组件它基本都占了:卷积提取局部特征、权值共享控制参数量、池化做降采样、多层堆叠形成层次化特征。后来的网络无非是在深度、宽度、连接方式上做文章,底层思想没变。

我在实际做图像分类项目时,如果数据量不大、任务不复杂,经常先用一个LeNet风格的轻量网络跑基线。原因很实在:它训练快、参数少、不容易过拟合,能快速验证数据质量和任务可行性。等基线跑通了,再上大模型也不迟。很多新手一上来就堆深网络,结果数据没清洗干净,训练半天loss不降,反而浪费时间。

注意:LeNet-5当年用的是tanh或sigmoid激活函数,今天普遍换成ReLU。如果你复现经典结构,激活函数可以现代化,但卷积和池化的顺序、特征图数量的设计思路值得保留。

3.4 复现LeNet-5时最容易踩的三个坑

第一个坑是输入尺寸没对齐。LeNet-5原始输入是32×32,如果你直接拿28×28的MNIST图片喂进去,卷积和池化后的尺寸会算错,导致全连接层维度对不上。解决办法很简单:要么把图片padding到32×32,要么重新计算每层输出尺寸。计算卷积输出尺寸的公式是:输出 = (输入 - 核 + 2×padding) / 步长 + 1。这个公式建议背下来,调网络时天天用。

第二个坑是池化层用最大池化还是平均池化。原始LeNet-5用的是平均池化,但今天最大池化更常见。两者差别在于:平均池化保留背景信息更平滑,最大池化突出显著特征。手写数字识别这种任务,最大池化通常效果更好,因为它对笔画这种强特征更敏感。我一般会两种都试,看验证集表现再定。

第三个坑是学习率设太大导致震荡。早期网络没有BatchNorm,对学习率很敏感。如果你用SGD训练,学习率从0.01起步比较稳,配合动量0.9。如果loss上下乱跳,先降学习率,别急着换优化器。

4. 遥控器的发明:把"指令"从有线变成无线的那一步

4.1 遥控器出现之前,操控意味着什么

在遥控器出现之前,你要控制一台设备,基本只有两种方式:要么人站在设备旁边直接操作,要么拉一根线过去做有线控制。前者把人绑死在设备上,后者虽然拉开了距离,但线缆本身就是束缚——距离有限、布线麻烦、还容易断。

遥控器的核心突破,是把控制信号从"物理连接"变成了"无线传播"。最早的遥控方案用的是无线电波,通过发射不同频率或不同编码的信号,让接收端识别并执行对应动作。这背后的关键问题是:如何让接收端准确区分"我要它左转"和"我要它右转",而不受环境干扰。

4.2 无线遥控的信号编码逻辑

遥控的本质是"编码-传输-解码"三步。发射端把用户的动作(按哪个键)翻译成一段特定的信号模式,接收端收到后解码,再驱动执行机构。早期方案常用的是频率编码:每个按键对应一个特定频率,接收端用谐振电路筛选频率。这种方式简单,但按键一多,频率就拥挤,抗干扰能力也差。

后来演进到编码芯片方案,每个按键对应一串二进制码,接收端用解码芯片比对。这就灵活多了——理论上可以支持很多按键,而且可以通过改变编码来配对不同的设备。今天你家里的电视遥控、车库门遥控,底层逻辑还是这套,只是编码方式从简单的固定码进化到了滚动码,安全性更高。

阶段编码方式优点局限
早期频率编码电路简单按键少,易干扰
中期固定二进制码按键多,易扩展码值固定,易被复制
现代滚动码/加密码安全性高电路复杂,成本略高

4.3 从遥控器身上能学到的交互设计原则

第一,降低操作门槛比增加功能更重要。遥控器之所以普及,不是因为它功能多,而是因为它让"远距离操控"变得像按一个键那么简单。做产品也一样,功能堆得再多,用户不会用等于零。

第二,反馈机制决定体验上限。早期遥控器按下去没反应,用户不知道是没对准还是没电。后来加了指示灯、蜂鸣器,体验立刻不一样。任何交互系统,如果用户操作后得不到及时反馈,信任感就会崩塌。

第三,配对与安全是绕不开的坎。遥控器普及后,邻居家遥控器误开你家车库的事时有发生。这倒逼出了配对机制和滚动码。今天做物联网设备,配网和安全认证同样是第一道门槛,历史早就把答案写好了。

5. 把三件事串起来:一条"感知-计算-行动"的技术主线

5.1 为什么这三项技术最终会汇合

单独看,计算机体系结构、卷积神经网络、遥控器分属三个领域。但放到智能系统的框架里,它们恰好对应三个环节:计算(体系结构提供算力)、感知(卷积网络处理视觉信息)、行动(遥控器实现远程控制)。一个完整的智能体,缺了哪一环都跑不起来。

今天你看到的自动驾驶、智能家居、工业机器人,本质上都是这三者的组合。车里的计算平台是体系结构的延续,摄像头和视觉算法是卷积网络的进化,而远程控制和指令下发则是遥控思想的升级。11月8日这一天,像是提前把智能系统的三块拼图各放了一角。

5.2 对今天做项目的实际启发

如果你正在做一个涉及感知和控制的系统,我建议按这个顺序推进:先把计算底座搭稳(数据怎么存、算力怎么分配),再解决感知问题(用什么模型、数据从哪来),最后接行动层(控制指令怎么下发、反馈怎么回来)。很多项目失败,不是某一环特别弱,而是顺序搞反了——感知还没跑通就急着做控制,结果控制逻辑天天改,因为输入根本不稳定。

另外,这三段历史都指向同一个方法论:先定义接口,再优化实现。存储程序定义了指令接口,卷积网络定义了特征提取接口,遥控器定义了控制信号接口。接口稳定了,后面的迭代才有积累。这个原则放到今天的软件开发、算法工程、硬件设计里,一样成立。

5.3 我在实际工作中反复用到的两个思维习惯

第一个习惯是追溯技术的第一性原理。每次遇到一个新框架或新模型,我会问自己:它解决的核心问题是什么?在它之前人们怎么做的?为什么之前的方法不行?把这三个问题答清楚,学习速度会快很多。比如学卷积网络,如果你知道全连接层参数量爆炸这个痛点,就很容易理解卷积为什么这么设计。

第二个习惯是用历史案例做设计参照。遥控器的频率编码到滚动码的演进,本质上就是"便利性"和"安全性"的博弈。今天做任何涉及远程通信的系统,这个博弈依然存在。历史不会重复,但约束条件往往惊人地相似。

6. 几个常被问到的细节问题

6.1 LeNet-5和今天的卷积网络到底差在哪

差在深度、激活函数、正则化手段和训练技巧。LeNet-5只有7层左右,今天动辄几十上百层;它用tanh,今天用ReLU;它没有BatchNorm和Dropout,今天这些是标配。但核心的卷积+池化+全连接骨架,以及权值共享、局部感受野这些思想,一点没变。所以学LeNet-5不是学一个过时模型,而是学卷积网络的"最小可用原型"。

6.2 存储程序思想对现代编程有什么直接影响

最直接的影响是:程序和数据可以互相转换。编译器把代码变成数据(机器码),解释器把数据当代码执行,这些操作的前提都是"指令和数据统一存储"。再往大了说,今天所有的软件分发、热更新、动态加载,底层都依赖这个思想。没有它,程序就是焊死在硬件上的,改一个功能得换一台机器。

6.3 遥控技术未来还会怎么走

从技术趋势看,遥控正在从"专用硬件"向"通用协议"迁移。以前每个设备配一个遥控器,现在手机、语音助手都能当遥控入口。底层通信也从简单的射频编码,转向更通用的无线协议。但不管怎么变,"可靠地把一条指令从A传到B并确认执行"这个核心问题不会变。做相关开发时,重点永远是抗干扰、低延迟和配对安全,而不是追求花哨的功能。

6.4 这三个事件对初学者最实际的建议

如果你刚开始学计算机,别急着追最新的框架。先把存储程序、指令执行、数据表示这些基础打牢,它们决定了你后面能走多远。如果你学人工智能,从LeNet-5这种小网络入手,亲手把每一层的尺寸算一遍、把参数数量数一遍,比直接调库理解深得多。如果你做硬件或嵌入式,研究一下遥控器的编码解码,能帮你建立"信号-协议-执行"的完整链路认知。这三条路,最后都会汇到同一个地方:把复杂系统拆成可理解、可实现、可验证的模块。

相关新闻

Cherry Studio升级后模型被静默替换?定位model_id改写与回退真相

Cherry Studio升级后模型被静默替换?定位model_id改写与回退真相

最近一段时间我把常用的 Cherry Studio 从旧版本升级到了新版本,整个升级过程顺利得不像话:安装、重启、登录、加载配置,一路没有任何报错。但两天后我拿一个需要多步推理的任务去实测,才发觉不对劲——同一个模型名,回…

2026/10/20 6:40:39 阅读更多 →
Windows 11下eNSP AR路由器40/41错误原因与修复指南

Windows 11下eNSP AR路由器40/41错误原因与修复指南

1. win11下eNSP AR启动40/41错误的真实原因先说结论:eNSP的AR路由器无法启动,报40或41错误,本质上不是eNSP本身坏了,而是它依赖的VirtualBox运行环境在Windows 11下出了问题。40错误通常意味着虚拟化组件启动失败或VirtualBox服务…

2026/10/20 6:40:39 阅读更多 →
充电桩定价策略数据集:字段设计、清洗链路与典型分析场景

充电桩定价策略数据集:字段设计、清洗链路与典型分析场景

做充电桩定价策略分析的时候,我遇到最大的难题不是算法,而是数据。前两年我们组接了一个任务,要优化某一片区充电站的运营收益,我在公开渠道和地方平台翻了一圈:网上能查到的电价文件大多是省级目录,颗粒度…

2026/10/20 6:39:39 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/21 9:32:40 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/21 9:32:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/21 9:32:40 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/21 9:32:40 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/21 9:32:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/21 9:31:32 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →