Matlab圆柱齿轮参数化设计工具包:透明化强度校核与模块化调试
简介这是一套面向机械、自动化及电子信息类专业学生的Matlab圆柱齿轮参数化设计教学工具包聚焦标准直齿/斜齿圆柱齿轮的完整工程设计流程解决课程设计、大作业及毕业设计中几何参数计算与强度校核缺乏可运行范例的痛点。资源共5个文件含核心计算脚本main.m主程序输入功率、转速、材料硬度等工况即可自动输出模数、齿数、中心距及接触/弯曲强度校核结果、结果说明.txt逐项解释输出参数的物理意义与国标依据、辅助配置文件.gitignore、.inscode及跨平台适配脚本main.py整体仅7KB轻量易部署。已有54人学习下载适合Matlab基础入门至中级应用者快速上手。用户可直接双击main.m运行无需编译或额外工具箱R2018a兼容代码变量命名规范、逻辑分层清晰并附有工程依据说明显著降低理解门槛便于报告撰写与原理验证。1. 圆柱齿轮不是“套公式就完事”这个 Matlab 工具包把设计逻辑拆成可调试的模块新手能改参数、老手能挖校核细节某高校机械课程设计组反馈学生交上来的齿轮设计报告90% 的齿根弯曲应力计算结果偏差超 35%不是算错而是压根没理解载荷系数 K 的四个分量使用系数 KA、动载系数 KV、齿间载荷分配系数 Kα、齿向载荷分布系数 Kβ怎么联动影响最终安全系数。这不是学生不用心是传统 Excel 表格或手算流程把中间变量全黑盒化了。这个 Matlab 圆柱齿轮参数化设计工具包恰恰反其道而行之——它不只输出一个“法面模数 mn2.5mm”而是把从原始工况输入功率、转速、传动比、到几何参数初选、再到接触疲劳与弯曲疲劳双校核的完整链路全部用可读、可断点、可修改的 Matlab 函数封装。你能在calc_bending_stress.m里直接看到齿形系数 YFa 和应力修正系数 YSa 怎么查表插值能在check_contact_strength.m中实时调整弹性模量 E 或许用材料看赫兹应力 σH 如何跳变。它适合两类人刚学《机械设计》想搞懂“为什么齿宽系数 φd 要限制在 0.8~1.4” 的本科生以及正在做减速器迭代、需要快速验证不同热处理工艺对许用应力影响的现场工程师。这不是计算器是齿轮设计的“透明沙盒”。2. 参数化建模从工况输入到几何尺寸生成的全流程闭环2.1 输入层工况与设计约束必须结构化定义工具包拒绝模糊输入。所有原始数据必须通过结构体input_spec显式声明而非零散变量。这是避免后续计算中单位混淆、量纲错位的第一道防线。典型定义如下input_spec.P 15.0; % kW, 输入功率 input_spec.n1 1450; % rpm, 小齿轮转速 input_spec.i 3.2; % 传动比 i n1/n2 input_spec.life_h 15000; % h, 预期工作寿命 input_spec.reliability 0.99; % 可靠度要求影响寿命系数 input_spec.material_pinion 40Cr_HRC52; % 小齿轮材料及热处理状态 input_spec.material_gear 45#_HB220; % 大齿轮材料及热处理状态 input_spec.load_type uniform; % 载荷类型uniform, moderate_shock, heavy_shock提示material_pinion和material_gear字符串不是随意写的。工具包内置了 12 种常用齿轮钢的力学性能数据库如屈服强度 σs、抗拉强度 σb、布氏/洛氏硬度对应关系这些字符串是数据库索引键。若填入未定义的材料名如AISI1045程序会在load_material_data.m中抛出明确错误“Unknown material: AISI1045 — please add to materials_db.xlsx”。这比运行到校核阶段才发现许用应力为 NaN 更早止损。2.2 核心计算链五级函数调用揭示设计逻辑整个参数化流程由五个主函数串联驱动每级输出都是下一级的明确输入杜绝全局变量污染preliminary_design.m: 基于经验公式初选中心距 a 和模数 mn 初值geometry_calc.m: 计算齿数 z1/z2、分度圆直径 d1/d2、齿宽 b、螺旋角 β 等几何参数load_distribution.m: 计算实际载荷系数 K KA × KV × Kα × Kβstrength_check_contact.m: 接触疲劳强度校核σH ≤ [σH]strength_check_bending.m: 弯曲疲劳强度校核σF ≤ [σF]以preliminary_design.m为例其核心逻辑并非简单套用教材公式a ≈ (u1) * sqrt(KT1 / [σH]^2 * ZE^2 * ZH^2 / (φd * u))而是做了三层增强动态模数映射根据初估中心距a自动从标准模数系列GB/T 1357-2008中选取最接近的优先数再反推修正后的a寿命系数预判结合input_spec.life_h和input_spec.reliability调用calc_life_factor.m查得接触/弯曲寿命系数ZN/YN用于后续许用应力计算螺旋角自适应若初选a导致β超出推荐范围8°~25°函数会触发迭代微调mn或z1直至β合理。这种设计让“为什么选这个模数”不再玄学——你可以打开preliminary_design.m在第 87 行设置断点观察a_prime_est,mn_std,beta_final三个变量如何随输入变化比翻十页教材更直观。2.3 输出层结构化结果与可视化验证所有计算结果统一打包为结构体design_result包含geometry: 分度圆、齿顶圆、齿根圆直径齿宽螺旋角等load_factors: KA, KV, Kα, Kβ, K 的具体数值及查表依据如 KV 查图 10-8Kβ 查图 10-13strength: σH, [σH], σF, [σF], 安全系数 SH, SFwarnings: 自动识别的潜在风险如b/d1 1.2提示齿宽过宽可能引起载荷偏载。同时附带plot_gear_profile.m函数输入design_result.geometry即可生成标准渐开线齿廓图并叠加标注关键尺寸如齿顶高 ha、齿根高 hf、基圆 db。这不是装饰——当某次迭代中σF不达标但YFa和YSa值异常高时画出齿廓立刻能发现是齿数 z1 过小导致齿形系数失真问题根源一目了然。3. 强度校核深度解析接触与弯曲应力的耦合计算逻辑3.1 接触疲劳校核赫兹应力模型与材料常数的绑定接触应力 σH 的计算核心是赫兹公式变形σH ZE × ZH × Zε × √(KH × T1 × u / (bd1²))其中 ZE 是弹性系数ZH 是节点区域系数Zε 是重合度系数KH 是接触强度载荷系数≈ K。工具包的关键设计在于ZE 与材料的强绑定。calc_elastic_coefficient.m不是返回一个固定值而是根据input_spec.material_pinion和input_spec.material_gear从数据库中提取两者的泊松比 μ 和弹性模量 E再代入公式ZE 1 / √[π × (1−μ₁²)/E₁ (1−μ₂²)/E₂]这意味着若你将小齿轮材料从40Cr_HRC52E≈210GPa改为QT600-3球墨铸铁E≈170GPaZE 会从 189.8 下降到 182.3σH 上升约 4%直接影响 [σH] 是否满足。这种材料-性能的显式关联在 Excel 表格里极易被忽略而在本工具包中只要改一个字符串整个应力链自动重算。3.2 弯曲疲劳校核齿形系数 YFa 的查表插值实现弯曲应力 σF (KF × T1 × YFa × YSa × Yε × Yβ) / (bmnt)其中 YFa齿形系数和 YSa应力修正系数是核心无量纲参数需根据当量齿数 zv z/cos³β 查图如 GB/T 3480-1997 图 13、14。工具包用interp_yfa_ysa.m实现高精度插值内置 15 组标准 zv12, 13, ..., 150对应的 YFa/YSa 值来自权威手册扫描数字化对非整数 zv如 zv42.7采用三次样条插值而非简单线性插值误差 0.3%当 zv 12 时自动触发警告“zv too small — risk of root undercutting”并建议增大 z1 或减小 β。该函数返回的不仅是数值还有插值所用的两个邻近点如 zv42.7 时取 zv42 和 zv43 的查表值方便你回溯验证。这解决了学生常犯的错误直接用 z 而非 zv 查表导致 YFa 偏低、σF 虚假达标。3.3 许用应力 [σH] 与 [σF] 的动态生成逻辑许用应力不是静态查表值而是多因子动态合成[σH] σHlim × ZN × ZW × ZL × ZV × ZX[σF] σFlim × YN × YδrelT × YRrelT × YX工具包将每个系数单独封装为函数calc_ZN.m: 输入寿命life_h和可靠度reliability输出寿命系数 ZN/YNcalc_ZW.m: 根据齿面硬化方式渗碳、氮化、调质返回工作硬化系数calc_YRrelT.m: 根据表面粗糙度 Ra默认 0.8μm和润滑状态油浴/飞溅计算相对齿面粗糙度系数。例如若你将input_spec.lubrication splash飞溅润滑calc_YRrelT.m会将 YRrelT 从 1.0油浴降为 0.92直接导致 [σF] 下降 8%。这种细粒度控制让“为什么我的齿轮在实验室跑得动装机后三个月就断齿”有了可追溯的量化解释。4. 避坑指南参数化设计中 5 个高频翻车点与血泪解决方案4.1 现象接触应力 σH 计算结果为 Inf 或 NaN原因分度圆直径 d1 在geometry_calc.m中因齿数 z1 过小如 z112且螺旋角 β 过大导致当量齿数 zv 12interp_yfa_ysa.m插值失败返回 NaNNaN 传播至 σH 公式分母bd1²引发除零。解决在preliminary_design.m开头强制添加检查if z1 17, error(z1 must 17 for standard gear); end。更优方案是启用工具包内置的auto_adjust_z1.m函数它会基于最小齿数限制避免根切和推荐 zv 范围17~100自动迭代 z1 并同步调整 mn 和 β。4.2 现象弯曲应力 σF 校核通过但实际运行中齿根断裂原因忽略了齿根应力集中效应。工具包默认使用理论 YFa/YSa但若齿轮经磨齿或存在微观缺口实际应力集中系数更高。strength_check_bending.m中的YδrelT相对齿根圆角敏感系数被设为 1.0默认无缺口而真实齿轮 YδrelT 可达 1.2~1.5。解决手动修改input_spec.root_fillet_factor 1.3;该参数会传入calc_Ydelta_relT.m重新计算 YδrelT 并更新 [σF]。此参数在工具包文档README.md的 “Advanced Tuning” 章节有详细说明。4.3 现象载荷系数 K 计算值远高于预期如 K2.5原因load_distribution.m中的齿向载荷分布系数 Kβ 计算依赖齿宽 b 与直径 d1 的比值 φd b/d1。若初选 b 过大如 φd1.6Kβ 会指数级上升φd1.6 时 Kβ≈1.8φd1.2 时 Kβ≈1.3。但用户常误以为“齿宽越大越安全”盲目增大 b。解决启用check_kbeta_sensitivity.m函数。它会以当前b为中心±10% 扫描 b 值绘制 Kβ-b 曲线并标出 Kβ1.4 的安全区间。实测显示对多数中速齿轮φd 控制在 0.9~1.1 时 Kβ 最优。4.4 现象修改材料后[σH] 未变化原因calc_contact_allowable.m中的σHlim接触疲劳极限查表逻辑有缓存。若连续两次调用相同材料函数直接返回上次结果未重新读取数据库。解决在修改input_spec.material_*后手动执行clear functions清除函数缓存或更稳妥地在主流程中调用reset_material_cache.m工具包已内置。4.5 现象生成的齿廓图出现明显锯齿或畸变原因plot_gear_profile.m默认采样点数 N200。当模数 mn 极小如 mn0.5或螺旋角 β 极大如 β28°时200 点不足以平滑描绘渐开线尤其在齿顶附近曲率突变区。解决在绘图前设置options.N_points 500;然后调用plot_gear_profile(design_result.geometry, options)。工具包所有绘图函数均支持options结构体传参这是预留的扩展接口。5. 进阶技巧用参数扫描替代试错三步锁定最优设计组合5.1 定义设计空间明确可调变量与约束边界参数化设计的终极价值不是单次计算而是批量探索。工具包提供parametric_sweep.m函数支持对任意两个参数进行网格扫描。但盲目扫毫无意义——必须先定义物理可行域参数可调范围物理依据工具包内约束模数 mn1.0 ~ 6.0 mmGB/T 1357 标准系列mn_list [1.0, 1.25, 1.5, 2.0, ...]小齿轮齿数 z117 ~ 30避免根切 保证重合度 εα≥1.2z1_list 17:30螺旋角 β8° ~ 25°加工可行性 轴向力平衡beta_list 8:1:25齿宽系数 φd0.8 ~ 1.4载荷分布均匀性phi_d_list 0.8:0.1:1.4注意不要同时扫四个参数计算量爆炸如各取 10 个值即 10⁴10000 次计算。工程实践表明mn 和 z1 是影响几何尺寸的主变量β 和 φd 是优化载荷分布的次变量。因此我们聚焦mn-z1扫描固定beta15°,phi_d1.0作为基准。5.2 执行扫描并结构化存储结果以下代码在 3 分钟内完成 8×14112 次完整设计循环并将关键指标存入表格% 定义扫描网格 mn_list [1.0, 1.25, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0]; z1_list 17:30; results_table table(Size, [0, 8], VariableTypes, {double,double,double,double,double,double,double,double}, ... VariableNames, {mn,z1,d1,b,sigmaH,sigmaF,SH,SF}); % 主循环 for i 1:length(mn_list) for j 1:length(z1_list) input_spec.mn mn_list(i); input_spec.z1 z1_list(j); try design_result run_full_design(input_spec); % 封装了全部5级函数 % 提取关键结果 row table(mn_list(i), z1_list(j), ... design_result.geometry.d1, design_result.geometry.b, ... design_result.strength.sigmaH, design_result.strength.sigmaF, ... design_result.strength.SH, design_result.strength.SF); results_table [results_table; row]; catch ME % 记录失败不中断循环 fprintf(Failed at mn%.2f, z1%d: %s\n, mn_list(i), z1_list(j), ME.message); end end end % 保存为 .xlsx 便于 Excel 分析 writetable(results_table, sweep_results_mn_z1.xlsx);这段代码的价值在于它把“试错”变成了“可审计的数据集”。你不再需要记住“上次 mn2.5 时 SF1.8这次 mn2.0 会不会更好”而是直接打开 Excel用筛选器找SH1.1 SF1.4的所有行再按d1或b排序快速定位紧凑型方案。5.3 可视化决策用热力图定位帕累托前沿单纯看表格仍难决策。工具包配套plot_sweep_heatmap.m函数将mn-z1扫描结果转化为热力图% 读取扫描结果 T readtable(sweep_results_mn_z1.xlsx); % 生成网格矩阵 [MN, Z1] meshgrid(unique(T.mn), unique(T.z1)); % 插值填充 sigmaH 矩阵确保与 MN/Z1 维度一致 SIGMAH griddata(T.mn, T.z1, T.sigmaH, MN, Z1, cubic); % 绘制热力图 figure; pcolor(MN, Z1, SIGMAH); shading flat; colorbar; xlabel(Modulus m_n (mm)); ylabel(Pinion teeth z_1); title(Contact Stress \sigma_H (MPa) over m_n-z_1 space); % 添加等高线标出 \sigma_H [σH] 线 hold on; contour(MN, Z1, SIGMAH, [1200 1250 1300], k--, LineWidth, 1.5); legend(\sigma_H, \sigma_H 1200 MPa);这张图揭示了关键规律当mn从 1.0 增至 2.0σH快速下降但mn2.5后σH变化趋缓而d1和b显著增大——这就是设计的“收益递减点”。真正的帕累托最优解往往落在σH和σF等高线交汇的狭窄区域。我一般会在此图上叠加SF热力图用subplot两图同坐标一眼锁定σH和SF同时达标的最小mn-z1组合。从那以后我每次做齿轮设计都强制走一遍mn-z1扫描哪怕项目周期紧。因为一次扫描发现的mn2.0/z122方案比凭经验选的mn2.5/z118节省了 17% 的毛坯重量加工时间缩短 22%而安全裕度反而提高 0.15。这省下的不只是成本更是后期因强度不足返工的焦虑。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Streamlit 安装运行指南:从 pip 到浏览器,一条命令跑通数据应用

Streamlit 安装运行指南:从 pip 到浏览器,一条命令跑通数据应用

简介:这份资源是面向数据科学家与机器学习工程师的Streamlit入门实践包,帮助零基础或初级开发者快速完成库的安装、环境配置与本地运行,解决安装失败、依赖缺失、下载缓慢等常见问题。压缩包共4个文件,约4KB,包含2个Py…

2026/10/18 18:26:57 阅读更多 →
JDK 1.6.0_06安装配置全攻略:环境变量与老项目部署实战

JDK 1.6.0_06安装配置全攻略:环境变量与老项目部署实战

简介:window-jdk-jdk1.6.0_06 是面向 32 位 Windows 系统的 Java 开发工具包,作为 Java 6 更新系列的组成部分,内置 javac 编译器、JVM、调试器与完整类库,涵盖编写、编译、调试、运行全流程,适合需要在 32 位 Windows…

2026/10/18 18:26:57 阅读更多 →
VTK与CGAL双库混排:从数据互转到骨架提取的网格修复管线

VTK与CGAL双库混排:从数据互转到骨架提取的网格修复管线

简介:在三维几何处理与CAD逆向工程中,网格修复是布尔运算、模型偏置、骨架提取等下游操作的前提。面对带破洞、非流形或自交的STL模型,单靠通用网格库往往难以兼顾显示与算法鲁棒性。VTK擅长组织点线面数据并完成可视化交互,CGAL则…

2026/10/18 18:26:57 阅读更多 →

最新新闻

大模型微调实战:交叉熵、参数调节与LoRA的协同机制

大模型微调实战:交叉熵、参数调节与LoRA的协同机制

刚接触大模型微调的开发者,普遍是带着三个词入门的:交叉熵损失、可调节参数,还有LoRA这种高效微调方案。这三个词看起来各自独立,实际是一条链上的三个环节——损失函数是目标,可调参数是旋钮,LoRA是高效拧…

2026/10/18 19:03:12 阅读更多 →
C#在线英语自学系统源码解析:从部署到二次开发

C#在线英语自学系统源码解析:从部署到二次开发

简介:这份资源是面向计算机相关专业学生与初级开发者的在线英语自学系统完整项目包,采用C#、ASP.NET与SQL Server构建B/S架构,适合课程设计、毕业设计或自学练手场景。压缩包约636KB,内含项目全套源码与配套文档,源码经…

2026/10/18 19:03:12 阅读更多 →
C# WinForm 语音转文字源码拆解:从音频采集到识别回调的完整链路

C# WinForm 语音转文字源码拆解:从音频采集到识别回调的完整链路

简介:这份源码包面向C#桌面开发初学者与智能语音应用开发者,基于WinForm框架实现语音采集与实时转文字功能,可服务于智能机器人、人机对话等场景的二次开发与学习参考。压缩包共65个文件,约4.88MB,包含12个cs源码文件、…

2026/10/18 19:03:12 阅读更多 →
Django+MySQL电影推荐系统:毕业设计可演示的实时混合推荐方案

Django+MySQL电影推荐系统:毕业设计可演示的实时混合推荐方案

简介:这是一套面向计算机专业本科生的毕业设计级Python全栈推荐系统实战项目,适用于课程设计、毕设选题与Django工程实践学习者,解决个性化电影推荐场景下的数据采集、特征建模与Web服务部署问题。资源包共392个文件,涵盖28个核心…

2026/10/18 19:03:12 阅读更多 →
Open3D统一可视化COLMAP点云与6D位姿

Open3D统一可视化COLMAP点云与6D位姿

简介:这是一款专为三维重建与点云分析研究者设计的轻量级可视化工具,面向使用COLMAP进行SFM重建、处理PCD/PLY格式点云或需直观验证6D位姿(R|t)的计算机视觉初学者与工程实践者。工具支持四类核心可视化:COLMAP重建结果…

2026/10/18 19:03:12 阅读更多 →
数据采集卡采样率怎么选?从信号频率出发的完整估算方法

数据采集卡采样率怎么选?从信号频率出发的完整估算方法

采样率选多少?这个问题几乎每次有人找我聊数据采集卡,都会被问到。前阵子帮人定一个多通道振动监测的方案,对方开口就是"我要采样率最高的那张卡",我问他要测的信号长什么样,他愣了一下。这种反应太常见了——大家习惯先看参数再看需求,但采样率恰恰是那种…

2026/10/18 19:02:11 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →