PDMS基础:以数据库建模为主线,贯通管道设计与PML数据导出
简介PDMSPlant Design Management System是业内通用的三维工厂设计系统在化工、石油、制药等行业的工程设计中应用广泛。这份《PDMS基础 精品文档.docx》是一份入门培训手册系统讲解PDMS的核心能力三维实体建模、多用户协同设计、统一数据库输出、等级驱动、实时碰撞检查与精确自动标注并介绍DESIGN、DRAFT、ADMINISTRATION、ISODRAFT、PARAGON五大主要模块。文档还梳理了WORLD、SITE、ZONE等数据库层次解释Elements、CE、Types、Owner/Members等基本概念并针对导航器、视图控制快捷键及视图存取方法给出操作说明配有进入SAM项目、了解Design模块、观察数据库结构、显示模型到图形屏幕等实践练习便于循序渐进上手。资源包为1个docx文件大小394KB内容紧凑适合刚接触PDMS的工程设计人员快速建立整体认知。目前已有599人学习下载可作培训或自学的基础配套材料也适合零基础初学者按文档顺序逐步练习。1. PDMS基础 精品文档.docx这套三维工厂设计系统先抓住“数据库建模”这条主线PDMS基础 精品文档.docx几乎是每个化工、电力设计院里配管新人拿到的第一份“敲门砖”。PDMSPlant Design Management System不是一款画图软件而是一套以数据库为核心的工厂三维设计系统设备、管道、管件、结构都有独立身份和属性你做的每一步操作都在改数据库记录而不是画一根线。最反直觉的正是这一点——很多从 AutoCAD 转过来的人第一周都在找“图层”结果发现这里根本没有图层。这篇笔记会把 PDMS 的数据层级、坐标系和建管道的基本动作串一遍把 Spec 选不对、标高错位、管件放不进去这些高频坑补齐最后给出用 PML 把模型数据导出成管道清单和 docx 操作指导的落地路径。适合想先理清逻辑再动手的新手也适合被二次开发卡住、想找数据出口的工程师。2. PDMS的数据世界从MDB到PIPE先把这棵层级树看明白要上手 PDMS第一步是忘掉“画图”这个念头。PDMS 里没有图层只有数据库和元素。一个完整项目会拆成多种数据库Design设计库、Paragon元件与等级库、Draft出图库、Admin管理库它们统一放在一个 MDB 环境下工作。这个结构带来的直接后果是数据是共享的五六个人可以同时在同一个 MDB 里建模你改一个管件所有视口同步变化。所以理解这棵数据树不只是在学概念而是在学 PDMS 的命脉。2.1 MDB、Design模块与“数据库建模”这件事MDB 是 Multi-Database 的缩写可以理解成整个项目的“总账本”。日常建模时操作对象在 Design 模块里完成元件长什么样、等级怎么组合由 Paragon 维护最终出图由 Draft 负责而账本本身的创建、备份、增量保存计划由 Administrator 模块管理。这个分工不是摆设很多新手一上来就在 Design 里乱点却不知道自己的模型数据最终落在哪个库、什么时候被写回出了问题想回滚都找不到入口。选型上PDMS 之所以坚持这套数据架构是因为工厂设计是多专业协同的产物——配管、设备、结构、暖通在同一个空间里作业。只有把几何、属性、连接关系都存成结构化数据才能做到实时碰撞检查、材料统计和后续二次开发。如果你只是想要一个“能画三维管道”的工具CAD 加个管道插件就够但要做真正的大型工厂设计数据模型比图形本身更重要。理解这一点就不会再把“保存”理解成普通文件的另存为。提示PDMS 的“保存”不是另存为而是把当前内存里的修改写回 MDB。误操作后第一时间找增量备份比在视图里反复撤销靠谱得多。2.2 World/Site/Zone/Equipment/PipeSREF路径就是你的地图PDMS 的数据层级从根到叶非常固定按 World项目、Site厂区/装置、Zone工作区、Equipment设备、Pipe管道、Branch分支逐级展开。每个元素都有自己的 SREF元素引用路径类似文件系统里的绝对路径。下表是我在项目里常用的一套层级示意实际名称按各项目规定来。层级含义SREF 示例World项目根节点/PRJ-DEMOSite装置或厂区/PRJ-DEMO-AREA1Zone工作区/系统/PRJ-DEMO-AREA1-PIPE-Z1Equipment设备/PRJ-DEMO-AREA1-EQP-P-101Pipe管道/PRJ-DEMO-AREA1-PIPE-Z1-P-101-4Branch管段分支/PRJ-DEMO-AREA1-PIPE-Z1-P-101-4-BR1SREF 就是你的地图。在 Design 的命令窗里查看某个对象、写 PML 脚本遍历数据、在 Draft 里绑定出图范围全部要依赖这个路径。新手最容易栽在命名上Zone 叫“Z1”设备叫“AA”管道叫“New Pipe”三四个人协同一周后整个模型就成了黑匣子。我的习惯是先定义项目级的命名规则再让所有人按规则建宁可名字长一点也不要让 SREF 语义模糊。2.3 属性、坐标系与PDP为什么PDMS不像CAD那样“画线”PDMS 的三维坐标是 E东、N北、U上对应你常说的 X、Y、Z但叫法不一样。位置可以用绝对坐标直接给定也可以相对某个元素偏移这就是 Relative 定位。Orientation朝向决定管口和设备法兰朝哪边Distance 决定偏移量。很多从 CAD 转过来的人把一张平面图上的坐标直接填进去结果模型飞到十万八千里外就是这个坐标系没对齐。管道本身还有一组 PDP管道设计参数Bore公称直径、Piping Spec管道等级、Rating压力等级、Point Type连接点类型。管件和管件之间能不能接上不只是看几何上碰没碰还要看连接点类型和等级匹不匹配。换句话说PDMS 的管道连接靠的是“点”和“方向”匹配不是靠端点捕捉。这解释了为什么你有时候看着两根管子明明碰在一起系统却不认它们相连——在你的视角里是“画线”在 PDMS 眼里是“两个点没握手”。3. 在Design模块建一根真实管道从新建Zone到放上第一个管件概念看懂了接下来就用最常用的方式把一根管道从无到有建出来。这一章按“建 Zone → 建设备 → 建 Pipe/Branch → 放管件”四个动作走一遍每个动作我都写了界面路径和关键参数。不同项目模板菜单名称会有差异但主干逻辑在 PDMS 12.x 里是一致的。第一次操作时建议把每一步的输入都记下来养成核对属性表的习惯。3.1 登录Design并新建Zone项目浏览器里的第一个工作区启动 Design 模块后用项目分配的用户名登录进入主界面。左侧是项目浏览器默认展示 World 和 Site 两层。在目标 Site 上点右键选择新建 Zone系统会弹出 Zone 属性对话框。名称按项目规则填比如“PIPE-Z1”表示配管一区描述里写清楚这一段覆盖哪个装置或系统。类型这一项很关键常见选 PIPEWORK管道区、EQUIPMENT设备区、STRUCTURE结构区选错了以后材料统计和模型分类都会乱。新建 Zone 本质上是在当前世界坐标系里划出一块共享工作区。Zone 是权限控制的基本单位谁的账号对哪个 Zone 只读、哪个可写都由管理员在 Admin 里配。我的习惯是一个系统一个 Zone而不是把所有管道堆进同一个 Zone——这样出图、材料统计、权限授予都清爽得多。建完后双击 Zone 进入编辑态视图左下角会显示当前指针对象这表示后续操作都发生在这个 Zone 下。参数填什么说明NamePIPE-Z1建议用项目规定的缩写规则Description装置A 配管一区写用途别留空TypePIPEWORK按专业选影响默认显示坐标系继承 Site一般不动3.2 创建设备并把位置定下来E/N/U坐标与“相对定位”在 Zone 下右键选择新建 Equipment创建一个设备比如一台泵。设备一定要放在正确位置因为后面所有管道都是以设备管嘴为起点往外接的。常见做法是先给设备填绝对坐标 E、N、U再用 Relative 方式让相邻设备互相偏移。这里有个很实用的习惯先把装置的±0.000 标高映射到 U1000 之类的整值上再统一按“相对基准点偏移”放置设备这样后续写 PML 提取坐标时数值一眼就能看出物理意义。位置面板里除了 E/N/U 三个坐标值还要注意 Orientation。设备管嘴朝北、朝上还是朝某个角度决定你管道的第一段方向。如果建完后设备位置不对不要靠“拖拽”硬来直接在属性面板里改坐标因为拖拽容易让几何位置和属性记录产生偏差后期碰撞检查时报出一堆莫须有的干涉。双击设备打开属性面板核对 Position位置和 Orientation朝向再对照平面布置图看一遍坐标。此时视口里应能看到设备实体。如果看不到用视图工具栏的 Fit 功能把视野拉回全貌这是后续所有建模动作的前提。3.3 建Pipe并放置管件Bore、Spec与Branch的四个关键参数现在开始接管道。在 Zone 下右键新建 Pipe系统会要求填写管道参数。首先是有没有等级也就是 Piping Spec然后是公称直径 Bore。这两项别拍脑袋填要和流程图、管道等级表一一对应。Spec 选错后面放管件时会发现弯头、三通全都匹配不上很多新手在这里直接卡住怀疑是软件“出 bug 了”。建好 Pipe 之后在 Pipe 下新建 Branch分支。Branch 就是一根连续的管段有起点、方向和长度。起点一般选择设备管嘴或前一分支的连接点方向按“北、东、上”这样的主方向给长度可以先随意之后用管件连接时再调整。Branch 创建完成后从 Paragon 元件浏览器里拖出一个弯头或阀门放到 Branch 的端点附近PDMS 会自动识别连接点并吸附对齐。如果没反应检查两边的 Point Type 和 Spec 是否匹配这比检查几何位置更重要。我一般会在 Branch 属性里重点核对四个参数Bore管径、Spec等级、起点坐标、方向向量。这四个参数决定了这段管道的身份和走向。管线建完后用视口旋转检查一遍有没有不该有的交叉再把 Branch 长度调整到实际尺寸一根能进入碰撞检查流程的管道就算建成了。4. PDMS基础避坑标高、坐标系、等级表与参照四类高频故障现场这一章把项目里真正让人“翻车”过的问题按现象、原因、解决写出来。每一条都不是软件玄学而是操作习惯和数据理解偏差导致的。遇到过一遍后面再见到根本不用慌按下面的套路处理就行。4.1 标高对不上U坐标写成了AutoCAD里的Z现象设备放到三维视图里标高比图纸差了十万八千里管道坡度和设备口对不上。原因平面图或 CAD 底图里用的是 Z 值而且基准零点可能和 PDMS 项目的 Datum 不一致。PDMS 的 U 是“上”向高程但项目基准面往往不是 0而是某个偏移值。解决建项目时先约定 U 基准比如正负零对应 U1000之后所有设备统一在这个基准上工作。绝不要直接拿一张 DWG 里的绝对 Z 填进去。4.2 模型“飞”出视野负坐标与参照物丢失现象新建一个设备后视口里什么都看不到Fit 也没用感觉模型“飞了”。原因设备位置用了很大的负坐标或者 Site 里第一个元素就没放在合理范围导致视口裁剪把模型裁掉了。解决先在 E0、N0、U正负零基准处放一个临时参照物一根立柱或一个点后续元素全部相对它偏移。若已经飞了选中设备打开属性面板把 Position 改回合理数值不要用视口操作硬找。4.3 管件放不进去Spec与元件库的两个隐藏前提现象从 Paragon 拖弯头到 Branch 上怎么拖都对不齐系统不吸附。原因绝大多数不是几何问题而是 Spec 不匹配或者 Paragon 里当前等级库下根本没有这个尺寸的弯头。解决先看 Pipe 的 MSPEC 属性是什么再到 Paragon 模块里确认该 Spec 下有没有你需要的管件如果等级库全就检查 Branch 和管件的点类型Point Type。记住PDMS 的连接靠点属性匹配不是靠“看着像就能接”。4.4 增量保存成摆设误操作后的“后悔药”怎么吃现象操作失误删了一截管道按 CtrlZ 没反应再想恢复已经晚了。原因PDMS 的撤销能力比 Office 弱得多而且多人协同下撤销会和其他人的修改冲突管理员默认会关掉。解决把增量保存Incremental Save当成“存档点”动手改大范围数据前先保存一次出问题后用 Administrator 的 DB Recover 回退到上一个增量点。我现在习惯是每天上班先看一眼增量保存计划有没有生效半小时一存。4.5 Draft出图空白视图与Sect的脱节现象切到 Draft 模块图纸上什么都没有或者只有一个框。原因Draft 的视图View没有正确绑定到 Design 里的 Zone或者裁剪范围Sect设在了模型外。解决在 Draft 里检查视图属性确认 View List 中引用的 Zone 路径和你建模的 Zone 一致再核对 Sect 的深度和方向必要时直接重新框选范围。Draft 出的不是“画”而是数据的投影源头数据没进视图图面上自然空白。5. 进阶把PDMS模型数据拉出来做管道清单和docx操作指导建模建到一定规模你会开始想能不能把管道清单自动导出来能不能生成一份带表格的 docx 操作指导书发给现场这一步绕不开 PML 或 PML.NET因为 PDMS 的 MDB 是二进制的“黑匣子”外部程序无法直接读取Java 直接读 docx 也读不到 PDMS 内部数据。正确路线是先用 PML 把数据抽成结构化中间文件再交给通用工具排版。5.1 PML脚本遍历Zone下的Pipe与BranchPMLProgrammable Macro Language是 PDMS 内建的脚本语言。在 Design 命令窗里可以直接输入短命令也可以把脚本存成 .pml 文件后运行。下面这段是最常用的遍历脚本作用是把指定 Zone 下的管道和管段、管径、等级都打出来-- 遍历指定 Zone 下的全部 Pipe 与 Branch !zone object /PRJ-DEMO-AREA1-PIPE-Z1 DO !pipe FROM !zone FOR /PIPE WRITE PIPE: !pipe.Name DO !branch FROM !pipe FOR /BRANCH !bore !branch.Bore !spec !branch.MSPEC WRITE BRANCH: !branch.Name WRITE BORE : !bore WRITE SPEC : !spec ENDDO ENDDO逻辑说明object关键字把 SREF 路径解析成实际元素对象DO ... FROM ... FOR /PIPE是 PML2 里标准的集合遍历写法意思是“从当前对象向下找所有 Pipe 类型元素”!branch.Bore读取公称直径属性MSPEC读管道材料等级。运行后命令窗会逐行打印结果适合快速核对模型。如果你拿到的是 PML.NET 环境也可以用 C# 的 DBElement 对象做同一件事但底层逻辑不变仍然是“按层级向下取集合”。5.2 管道清单导出与docx操作指导一种稳定做法从 PDMS 得到数据后下一步是把它变成可交付的文档。我的做法是分两步走先用上面这类 PML 脚本把结果输出成 CSV 或文本文件再用 Python 脚本读取 CSV往 docx 模板里填表格和段落。这里用 python-docx 库做一个最简示例# 读取 PDMS 导出的 csv 并写入 docx 表格 from docx import Document import csv doc Document(模板.docx) table doc.add_table(rows1, cols3) with open(pipes.csv, encodingutf-8) as f: for row in csv.reader(f): cells table.add_row().cells cells[0].text, cells[1].text, cells[2].text row doc.save(管道清单.docx)这个方案的好处是把 PDMS 和文档格式彻底解耦PDMS 侧只负责把数据倒出来格式问题交给通用工具解决。如果你想用 Java 生成 docx思路也一样——先得拿到 CSV 中间文件再用 Apache POI 按段落回填而不是试图让 Java 直接去解析 MDB。我现在的习惯是每个配管区域的 PML 导出脚本固定一份参数只需改 Zone 的 SREF 路径导出后抽三到五根管道去 Design 里双击核对管径和等级一致了再交付。数据对得上文档才敢给现场用。这套流程熟练后一周一次的材料统计报表基本能在十分钟内出完。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

命运WYD服务端架设与闪退排查:从数据库配置到局域网联调

命运WYD服务端架设与闪退排查:从数据库配置到局域网联调

简介:《命运WYD服务端》是一套已配置好的《命运》(World of Yin and Yang)MMORPG服务端软件,面向希望自建单机游戏环境的玩家与怀旧爱好者,解决服务端部署与运行环境搭建问题。压缩包共479个文件,大小仅2.5…

2026/10/11 22:14:00 阅读更多 →
深度学习驱动的虚假新闻检测系统:Python实战项目全流程

深度学习驱动的虚假新闻检测系统:Python实战项目全流程

简介:这套基于深度学习的虚假新闻检测系统Python项目,主要面向高校毕业设计、课程设计及自然语言处理方向的技术实践者。项目以Python为核心,通过TensorFlow/PyTorch搭建模型,综合应用RNN、LSTM、BERT等文本特征提取方法&#xff…

2026/10/11 22:12:58 阅读更多 →
fabric.js 添加圆形完整指南:从对象模型到交互实现

fabric.js 添加圆形完整指南:从对象模型到交互实现

想给 web 页面画一个交互式的圆?原生 Canvas 能画圆,但画完就“丢”了——拿不到、改不了、拖不动。fabric.js 最直观的价值就在这里:它把圆变成了一个对象。你画的每个圆,都有坐标、尺寸、样式属性,随时能改&#xff…

2026/10/11 22:12:58 阅读更多 →

最新新闻

BosonNLP情感词典本地化加载与打分全链路实践

BosonNLP情感词典本地化加载与打分全链路实践

简介:本资源是一份面向自然语言处理初学者与情感分析实践者的轻量级代码示例,聚焦基于词典规则的情感极性判断任务,适用于课程设计、小规模文本舆情分析或NLP入门项目。压缩包为ZIP格式,共含若干Python脚本及配套资源文件&#xf…

2026/10/11 22:54:39 阅读更多 →
新能源出力不确定性建模:蒙特卡洛场景生成与时序相关性削减实战

新能源出力不确定性建模:蒙特卡洛场景生成与时序相关性削减实战

做新能源出力不确定性的建模与优化,绕不开一个基础问题:如何把"未来可能出现的各种情况"变成计算机能算的有限组场景。这个需求在电力系统里特别常见,风电、光伏出力全天候波动,储能要在事前做好充放电计划,…

2026/10/11 22:54:38 阅读更多 →
9767张双格式车辆检测数据集:YOLO开箱即训

9767张双格式车辆检测数据集:YOLO开箱即训

简介:本资源是面向计算机视觉初学者与算法工程师的YOLO系列目标检测实战数据集,专为车辆及行人检测任务设计,覆盖公交车、卡车、摩托车、自行车、小型车及行人六类常见交通目标,可直接用于YOLOv5/v7/v8/v9/v10/v11等主流版本的模型…

2026/10/11 22:54:38 阅读更多 →
基于Transformer的手写文本识别:从原理到工程实践

基于Transformer的手写文本识别:从原理到工程实践

简介:基于Transformer架构的手写文本识别系统项目,面向OCR与文档智能识别方向的开发者和研究人员,提供一套免字符分割的端到端序列识别方案。整体采用编码器-解码器结构,运用多头自注意力与二维相对位置编码,配合弹性形…

2026/10/11 22:54:38 阅读更多 →
Beav浏览器AI控制原理剖析:MCP、Native Host与Chrome扩展如何串联成Agent操控链路

Beav浏览器AI控制原理剖析:MCP、Native Host与Chrome扩展如何串联成Agent操控链路

人工智能AI 应用AI 写作媒体生成工作流自动化网页爬虫浏览器控制 【免费下载链接】Beav 小红书 AI 运营工作台|小红书采集、评论区下载、素材库、选题、AI写作、小红书全域解决方案,开箱即用,一键安装,小红书AI工作台,…

2026/10/11 22:54:38 阅读更多 →
如何用emulate在本地完整测试Webhook:GitHub App签名、Slack事件与Stripe验签全覆盖

如何用emulate在本地完整测试Webhook:GitHub App签名、Slack事件与Stripe验签全覆盖

【免费下载链接】emulate Local API emulation for CI and no-network sandboxes 项目地址: https://gitcode.com/gh_mirrors/emul/emulate 点击查看 免费下载 emulate 是一个运行在本地的 API 模拟服务(API emulation),专为 CI …

2026/10/11 22:53:37 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

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

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

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

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →