工业机器人技术题库docx解析与组卷分析实战
简介这份工业机器人技术题库及答案文档面向自动化、机械电子及机器人工程等专业的学生与一线技术人员用于课程复习、考证刷题和岗位知识自查。内容以单选题为主覆盖机器人分类与工作原理、外部传感器应用、手爪功能、精度与误差分析、点位控制与连续轨迹控制、D-H参数与运动学动力学、示教-再现编程及安全操作规范等核心考点并涉及焊接机器人、谐波传动、机器人三原则等延伸知识。资源包共1个docx文件约344KB结构紧凑便于打印或导入设备随时练习。目前已有78人学习下载。题目均附参考答案可直接用于自测与错题复盘帮助读者快速定位传感器、坐标系、示教安全等薄弱环节是系统梳理工业机器人基础知识、提升操作与编程规范意识的实用参考资料。1. 工业机器人技术题库到底长什么样从一份 docx 说起很多人第一次拿到「工业机器人技术题库及答案.docx」这类文件第一反应是把它当成一份普通复习资料打开、翻两页、关掉。但如果你正在带培训班、做企业内训、准备职业技能等级认定或者要给一批新入职的调试工程师做考核这份 docx 的价值远不止「背题」。它本质上是一套结构化的知识资产题干、选项、答案、解析、知识点标签五样东西缺一不可。问题在于docx 是给人看的不是给系统用的。你没法直接拿它做随机组卷、错题统计、知识点掌握度分析更没法把它塞进在线考试平台。所以真正要解决的问题不是「怎么背题」而是「怎么把 docx 里的题库变成可查询、可组卷、可分析的数据」。这篇笔记就按这个思路走先看清题库的内容结构再把它解析成结构化数据然后落到组卷和错题分析最后讲几个我踩过的坑。适合手里有题库文件、想把它用起来的培训师、教务和技术负责人。2. 拆解题库结构工业机器人技术题库的题型分布与知识点映射2.1 先搞清楚题库里到底有哪些题型工业机器人技术题库通常不是单一题型常见的有判断题、单选题、多选题、填空题和简答题。不同题型的解析难度差别很大。判断题和单选题结构最规整题干、选项、答案基本能靠正则切出来多选题的难点在于选项数量不固定答案可能是「ABC」也可能是「A、C、D」填空题的答案往往嵌在题干里需要用占位符标记简答题最难自动化通常只能做关键词匹配或人工评分。我一般会先做一件事把 docx 转成纯文本然后统计各题型的数量分布。这一步不用写复杂代码用 python-docx 读段落再用正则匹配题号前缀就能看出大概。from docx import Document import re doc Document(工业机器人技术题库及答案.docx) lines [p.text.strip() for p in doc.paragraphs if p.text.strip()] # 统计题型分布按题号前缀和关键词粗判 type_count {判断题: 0, 单选题: 0, 多选题: 0, 填空题: 0, 简答题: 0} for line in lines: if re.match(r^\d[\.、], line): if in line or ( ) in line: type_count[判断题] 1 elif re.search(r[A-D][\.、], line): type_count[单选题] 1 elif 多选 in line: type_count[多选题] 1 elif ____ in line or in line: type_count[填空题] 1 else: type_count[简答题] 1 print(type_count)这段代码的逻辑很简单逐段读取 docx用题号正则判断是不是一道新题再根据题干特征粗分题型。参数上re.match(r^\d[\.、], line)里的\d匹配题号数字[\.、]匹配点号或顿号这是中文题库最常见的题号格式。实际跑的时候你会发现有些题库用「第1题」而不是「1.」这时候要把正则改成^第?\d[题\.、]?。这一步的目的不是精确分类而是让你对题库规模有个底后面解析策略才好定。2.2 知识点映射把题目挂到工业机器人技术体系上光有题型还不够真正让题库有价值的是知识点标签。工业机器人技术通常分几大块机械结构与传动、运动学与坐标系、电气控制与驱动、传感器与视觉、编程与示教、安全规范与维护。每道题都应该能挂到其中一个或多个标签上。我的做法是建一个关键词到知识点的映射表然后对每道题的题干做关键词匹配。比如题干里出现「DH 参数」「正运动学」「逆解」就归到运动学出现「伺服」「编码器」「驱动器」就归到电气控制出现「示教器」「程序点」「MOVJ」就归到编程与示教。knowledge_map { 运动学: [DH, 正运动学, 逆解, 坐标系, 位姿, 齐次变换], 电气控制: [伺服, 编码器, 驱动器, 变频, 电流环, 速度环], 编程与示教: [示教器, 程序点, MOVJ, MOVL, 循环, 子程序], 传感器与视觉: [视觉, 相机, 标定, 力传感器, 激光, 编码器], 安全规范: [急停, 安全门, 限位, 防护, ISO, 安全等级], 机械结构: [减速机, 谐波, RV, 臂长, 负载, 关节], } def tag_question(stem): tags [] for tag, keywords in knowledge_map.items(): if any(kw in stem for kw in keywords): tags.append(tag) return tags if tags else [未分类] # 示例 print(tag_question(工业机器人逆运动学求解通常比正运动学更复杂。)) # 输出: [运动学]这段代码的关键在于关键词表要贴合你实际题库的用词习惯。我见过有的题库把「逆解」写成「逆运动学求解」有的写成「反向求解」所以映射表需要根据实际语料迭代两三轮。参数上any(kw in stem for kw in keywords)是只要命中一个关键词就打标签如果你要求更严格可以改成命中两个以上才打标签减少误标。这一步做完你就有了一个带知识点标签的题目列表后面组卷和错题分析都靠它。3. 把 docx 变成结构化数据解析脚本与字段设计3.1 用 python-docx 提取题干、选项、答案和解析docx 的解析难点不在读取而在切分。一份典型的工业机器人技术题库 docx题目和答案可能混在一起也可能答案单独放在文档末尾。我一般先看文档结构如果每道题后面紧跟「答案」和「解析」那就逐题切如果答案统一在最后那就先切题目再切答案最后按题号合并。下面是一个逐题切分的脚本假设格式是「题号. 题干 / A. 选项 / B. 选项 / 答案X / 解析...」。import re from docx import Document doc Document(工业机器人技术题库及答案.docx) lines [p.text.strip() for p in doc.paragraphs if p.text.strip()] questions [] current None for line in lines: # 新题开始以数字点/顿号开头 if re.match(r^\d[\.、], line): if current: questions.append(current) current {stem: line, options: [], answer: , analysis: } elif re.match(r^[A-D][\.、], line) and current: current[options].append(line) elif line.startswith(答案) and current: current[answer] line.replace(答案, ).replace(答案:, ).strip() elif line.startswith(解析) and current: current[analysis] line.replace(解析, ).replace(解析:, ).strip() elif current and not current[options]: current[stem] line # 题干跨行拼接 if current: questions.append(current) print(f共解析 {len(questions)} 道题) print(questions[0])这段代码的核心逻辑是按行扫描遇到题号就开一个新题对象遇到选项就追加到 options遇到答案和解析就分别赋值。参数上re.match(r^\d[\.、], line)负责识别题号re.match(r^[A-D][\.、], line)负责识别选项。实际跑的时候最常见的翻车点是题干跨行有些题干太长docx 里被拆成两段第二段没有题号也没有选项前缀这时候要靠elif current and not current[options]把它拼回题干。另一个坑是答案格式不统一有的写「答案A」有的写「答案:A」有的写「【答案】A」所以替换逻辑要覆盖多种写法。3.2 字段设计与导出格式JSON、CSV 还是直接入库解析完题目后字段设计决定了后面好不好用。我一般至少保留这几个字段题号、题型、题干、选项列表、正确答案、解析、知识点标签、难度等级。难度等级如果题库里没有可以按题干长度和知识点数量粗估或者人工标一批做种子。导出格式看用途如果只是做组卷CSV 就够了Excel 打开就能看如果要接在线考试系统JSON 更合适嵌套结构能保留选项数组如果要长期维护和查询建议直接入 SQLite后面做错题统计和知识点分析会方便很多。import json import csv # 导出 JSON with open(questions.json, w, encodingutf-8) as f: json.dump(questions, f, ensure_asciiFalse, indent2) # 导出 CSV with open(questions.csv, w, encodingutf-8, newline) as f: writer csv.DictWriter(f, fieldnames[stem, options, answer, analysis]) writer.writeheader() for q in questions: q[options] |.join(q[options]) # 选项用竖线拼接避免 CSV 逗号冲突 writer.writerow(q)JSON 导出用ensure_asciiFalse保证中文正常显示indent2方便人工检查。CSV 导出的关键坑是选项里可能包含逗号所以我把选项列表用竖线拼成一个字符串再写入读取时再 split 回来。如果你打算入 SQLite建表时把选项存成 JSON 字符串字段就行查询时用json_extract解析。这一步做完题库就从一份 docx 变成了可编程的数据源。4. 组卷与错题分析让题库真正跑起来4.1 按知识点和题型随机组卷有了结构化数据组卷就是筛选加随机。假设你要出一套 50 题的卷子要求运动学 15 题、电气控制 10 题、编程与示教 10 题、安全规范 8 题、机械结构 7 题题型比例也要控制。我的做法是先按知识点和题型分组再从每组里随机抽样。import random from collections import defaultdict # 假设 questions 已经带上了 tags 和 type 字段 def generate_paper(questions, spec): spec: {运动学: 15, 电气控制: 10, ...} grouped defaultdict(list) for q in questions: for tag in q.get(tags, [未分类]): grouped[tag].append(q) paper [] for tag, count in spec.items(): pool grouped.get(tag, []) if len(pool) count: print(f警告{tag} 只有 {len(pool)} 题不足 {count} 题) paper.extend(pool) else: paper.extend(random.sample(pool, count)) random.shuffle(paper) return paper spec {运动学: 15, 电气控制: 10, 编程与示教: 10, 安全规范: 8, 机械结构: 7} paper generate_paper(questions, spec) print(f组卷完成共 {len(paper)} 题)这段代码的逻辑是按知识点分组然后按 spec 里的数量随机抽样。参数上random.sample(pool, count)保证不重复抽取random.shuffle(paper)打乱最终顺序。实际用的时候要注意如果某个知识点题目不够脚本会打印警告并把该知识点所有题都放进卷子这时候你需要么降低该知识点题量要么补充题库。另一个细节是题型比例如果你要求单选 30 题、多选 10 题、判断 10 题那就在分组时同时按知识点和题型做二维分组代码稍微复杂一点但思路一样。4.2 错题统计与知识点掌握度分析组卷只是第一步真正有价值的是考完之后的错题分析。假设你有一批考生的答题记录格式是「考生ID、题号、考生答案、正确答案」那就可以算出每个知识点的正确率进而看出哪个模块是薄弱环节。def analyze_weakness(records, questions): records: [{student: S001, qid: 1, user_answer: A, correct_answer: B}, ...] q_map {q[id]: q for q in questions} tag_stats defaultdict(lambda: {total: 0, wrong: 0}) for r in records: q q_map.get(r[qid]) if not q: continue for tag in q.get(tags, [未分类]): tag_stats[tag][total] 1 if r[user_answer] ! r[correct_answer]: tag_stats[tag][wrong] 1 for tag, stat in tag_stats.items(): rate stat[wrong] / stat[total] if stat[total] else 0 print(f{tag}: 错误率 {rate:.1%} ({stat[wrong]}/{stat[total]})) return tag_stats这段代码按知识点累计总答题数和错误数最后输出错误率。参数上defaultdict(lambda: {total: 0, wrong: 0})省去了初始化判断rate计算时做了除零保护。实际用的时候错误率高于 40% 的知识点就值得单独安排一次强化训练。如果你有多个批次的考生数据还可以按批次对比看培训效果有没有提升。这一步做完题库就不只是出题工具而是培训闭环里的反馈环节。5. 避坑与排查docx 题库解析的 5 个血泪教训5.1 现象解析出来题目数量对不上少了几十道原因通常是题号格式不统一。有的题用「1.」有的用「1、」有的用「第1题」还有的题号后面直接跟题干没有分隔符。正则只覆盖了一种格式其他格式的题就被当成普通段落跳过了。解决方法是先把所有题号格式列出来写一个兼容正则比如^第?\d[题\.、]?\s*然后跑一遍统计看解析数量和文档里肉眼数的数量是否一致。5.2 现象选项和题干混在一起A 选项变成了题干的一部分原因是 docx 里选项没有独立段落而是跟在题干后面用空格分隔。python-docx 按段落读取时整行都是题干。解决办法是在切分题干后再用正则把选项部分切出来比如re.split(r\s[A-D][\.、], stem)第一个元素是纯题干后面是选项内容。如果选项格式是「A、」而不是「A.」正则里的[\.、]要同时覆盖。5.3 现象答案和解析丢失字段为空原因是答案不在题目后面而是统一放在文档末尾的「参考答案」区域。这时候逐题切分会把答案区域当成普通段落。解决办法是先定位「参考答案」或「答案」标题的位置把文档切成题目区和答案区分别解析后再按题号合并。合并时要注意题号可能不一致比如题目区是「1.」答案区是「1、」需要做归一化。5.4 现象多选题答案被截断只取到了第一个字母原因是答案写法是「ABC」或「A、B、C」但代码里只取了第一个字符。解决办法是用正则提取所有大写字母re.findall(r[A-D], answer_str)然后排序拼接。如果答案里还有小写字母或数字正则要相应扩展。这个坑很隐蔽因为单选题不会暴露问题只有多选题才会翻车。5.5 现象知识点标签大量落到「未分类」原因是关键词表覆盖不够或者题库用词和你的关键词不一致。解决办法是先跑一遍全量题目把「未分类」的题干导出来人工看一遍补充关键词。通常迭代两三轮未分类比例就能降到 5% 以下。如果某些题目确实跨多个知识点允许一道题打多个标签不要强行只打一个。6. 进阶技巧用 SQLite 做题库的长期维护与版本管理题库不是一次性的它会随着技术更新和培训反馈不断增删改。用 docx 维护版本非常痛苦每次改完都要重新解析。我的习惯是把解析后的数据入 SQLite之后所有操作都在数据库里做docx 只作为初始导入源。建表时至少要有题目表、知识点表、题目知识点关联表、答题记录表。题目表存题干、选项 JSON、答案、解析、难度、状态启用/停用知识点表存标签名和描述关联表存题目和知识点的多对多关系答题记录表存考生、题号、答案、时间。这样你就能用 SQL 直接查「运动学模块错误率最高的 10 道题」或者「最近一个月新增的题目」。-- 查询运动学模块错误率最高的 10 道题 SELECT q.id, q.stem, COUNT(*) AS total, SUM(CASE WHEN r.user_answer ! q.answer THEN 1 ELSE 0 END) AS wrong, ROUND(SUM(CASE WHEN r.user_answer ! q.answer THEN 1.0 ELSE 0 END) / COUNT(*), 2) AS wrong_rate FROM questions q JOIN question_tags qt ON q.id qt.question_id JOIN tags t ON qt.tag_id t.id JOIN records r ON q.id r.question_id WHERE t.name 运动学 GROUP BY q.id ORDER BY wrong_rate DESC LIMIT 10;这条 SQL 的逻辑是关联题目、标签和答题记录按题目分组算错误率最后按错误率降序取前 10。参数上SUM(CASE WHEN ... THEN 1 ELSE 0 END)是条件计数ROUND(..., 2)保留两位小数。实际用的时候如果记录表数据量大记得在question_id和tag_id上建索引否则查询会慢。版本管理方面我一般会在题目表加version和updated_at字段每次修改不直接覆盖而是插入新版本并把旧版本标记为历史。这样万一改错了还有后悔药。另外定期把 SQLite 导出成 JSON 备份防止文件损坏。最后说一个我自己的习惯每次培训结束后把错题率高于 50% 的题目单独导出来人工检查题干是否有歧义、答案是否有误。我踩过一次坑一道题的错误率异常高查了半天发现是答案标错了不是学员没掌握。从那以后错题分析的第一件事就是复核题目本身。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

STM32寄存器开发实战:从点灯到串口底层原理

STM32寄存器开发实战:从点灯到串口底层原理

/* 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 1:01:13 阅读更多 →
N100真机启动排查:串口日志、NVMe超时与时钟源修复全记录

N100真机启动排查:串口日志、NVMe超时与时钟源修复全记录

/* 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 1:01:13 阅读更多 →
水果识别深度学习实战:从数据到部署的工程落地指南

水果识别深度学习实战:从数据到部署的工程落地指南

简介:这是一套面向计算机相关专业在校学生、教师及初入行开发者的Python深度学习水果识别系统实战项目,专为毕业设计、课程设计与竞赛实践打造。项目基于经典CNN架构实现多类别水果图像分类,含完整可运行源码、详细项目说明文档及配套数据集&…

2026/10/11 1:00:13 阅读更多 →

最新新闻

做了10年计划排产,最后靠这三张表把排产管住了!

做了10年计划排产,最后靠这三张表把排产管住了!

很多计划员最怕的,不是订单多,而是计划永远赶不上变化。早上刚排好的计划,中午销售插单;下午采购说关键料没到;车间临时停机;老板又追着问订单为什么还没交。计划员只能不停改表、调设备、挪订单、发通知。…

2026/10/11 1:49:40 阅读更多 →
10年仓库管理经验:管、存、发、盘一文搞定!

10年仓库管理经验:管、存、发、盘一文搞定!

仓库最怕的不是货多,也不是人少,而是每天都在救火。 采购催入库,生产催领料,销售催发货,财务月底催对账,老板一问库存准不准,仓库主管只能翻表、找单、问人。 更麻烦的是,很多问题表…

2026/10/11 1:49:40 阅读更多 →
2小时,我搭了一套采购订单跟踪系统:下单、交期、到货、欠料一屏看清

2小时,我搭了一套采购订单跟踪系统:下单、交期、到货、欠料一屏看清

上午生产催料,下午仓库问货到没到,晚上老板又在群里追供应商交期。 采购说已经催了,供应商说下周到,仓库说只收到一部分,生产说明天就要用。 最后所有人一起翻聊天记录、查Excel、找邮件,忙了一圈&#xff…

2026/10/11 1:49:40 阅读更多 →
100个AI实验03:省时不等于省钱

100个AI实验03:省时不等于省钱

AI(人工智能)帮员工省下30%的工时,不等于替公司省下30%的工资。我拿一家公司“每月省27000元”的模拟方案测试AI:如果工资照发、订单没增加,这家公司第一年不是多赚钱,而是多支出84000元。 这不是说AI没用…

2026/10/11 1:49:40 阅读更多 →
OKR模板选错?4类组织约束决定落地成败

OKR模板选错?4类组织约束决定落地成败

简介:本资源为《20种OKR模板案例大全》PDF手册,面向企业管理者、HR、部门负责人及目标管理实践者,解决OKR落地难、缺乏岗位适配范例、难以分层设计目标与关键结果等实际问题。手册覆盖公司整体及市场、销售、人事、研发、产品、客户成功、客服…

2026/10/11 1:49:39 阅读更多 →
云上OpenClaw蜜罐新玩法:2H4G服务器极速部署TaoToken实战指南

云上OpenClaw蜜罐新玩法:2H4G服务器极速部署TaoToken实战指南

/* 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 1:48:39 阅读更多 →

日新闻

流感时间序列预测实战: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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →