线性代数矩阵运算全解析:加法、数乘、乘法与特殊矩阵
1. 为什么矩阵运算值得单独开一章来讲线性代数里向量是“点”矩阵是“变换”。把矩阵的加法、数量乘法、矩阵乘法这三样东西吃透后面无论是解线性方程组、求特征值、做二次型还是跳到机器学习里的神经网络前向传播本质上都是在反复调用这几条规则。很多同学学完第四章之后觉得“好像会了”一到做题就卡壳问题往往不在计算能力而在于没有真正理解矩阵乘法为什么这样定义、特殊矩阵到底特殊在哪里。我当年带过几届学生的习题课也帮不少跨考的朋友补过线性代数。一个很普遍的观察是矩阵加法几乎没人出错数量乘法也问题不大但矩阵乘法一旦涉及维度不匹配、乘法顺序、单位矩阵的位置错误率立刻飙升。更麻烦的是很多教材把“特殊矩阵”放在章节末尾一笔带过导致学生对对角矩阵、数量矩阵、单位矩阵、对称矩阵、反对称矩阵这些概念只有模糊印象后面遇到矩阵分解、相似对角化时完全接不上。这篇文章面向三类人正在学高等代数第四章的在校生、准备考研需要重新梳理线性代数框架的备考者、以及工作中需要用到矩阵运算但基础不牢的开发者。我会把这一章的核心内容拆成可操作的模块每个定义都配上“为什么这样定义”的解释每个运算都给出维度检查的方法特殊矩阵部分会整理成对照表最后附上我实际教学中总结的常见错误和排查思路。你不需要有很强的数学背景只要能看懂基本的求和符号就能跟着走完。2. 矩阵加法与数量乘法看似简单但有两个坑2.1 矩阵加法的前提条件与逐元素规则矩阵加法定义非常直接两个矩阵同型行数和列数分别相等时对应位置的元素相加。设 (A(a_{ij}){m\times n})(B(b{ij}){m\times n})则 (AB(a{ij}b_{ij})_{m\times n})。这里的关键词是“同型”。我见过太多人在考试里把 (2\times 3) 的矩阵和 (3\times 2) 的矩阵往一起加理由是“看起来差不多大”。维度不同就是不能加没有例外也没有“广播”一说。广播是编程库里的便利机制不是数学定义。矩阵加法满足四条基本性质交换律 (ABBA)、结合律 ((AB)CA(BC))、零矩阵存在 (AOA)、负矩阵存在 (A(-A)O)。这四条和实数加法完全平行所以理解起来没有障碍。注意零矩阵 (O) 必须和参与运算的矩阵同型。不同型的零矩阵不能直接说“等于”因为矩阵相等本身就要求同型且对应元素相等。2.2 数量乘法的本质每个元素都乘同一个数数量乘法也叫数乘是数 (k) 与矩阵 (A) 的运算结果是把 (A) 的每个元素都乘以 (k)(kA(ka_{ij})_{m\times n})。这个定义没有任何维度限制任何数都可以乘任何矩阵。数乘满足的运算律包括(k(AB)kAkB)、((kl)AkAlA)、(k(lA)(kl)A)、(1\cdot AA)。这些性质和向量数乘完全一致本质上矩阵就是“一排向量拼起来”数乘作用在每个位置上。我实际批改作业时发现数乘本身出错很少但和矩阵乘法混在一起时容易出问题。比如计算 ((kA)B) 和 (k(AB))有人会犹豫要不要把 (k) 分配到每个元素。答案是((kA)Bk(AB))因为 (kA) 的每个元素都乘了 (k)做矩阵乘法时每一行的线性组合都会带上这个因子。这个性质在后续化简中非常常用值得单独记牢。2.3 两个容易被忽略的细节第一个细节矩阵加法没有“乘法优先级”问题但数乘和矩阵乘法混在一起时数乘的优先级高于矩阵乘法。也就是说 (kAB) 默认理解为 (k(AB))而不是 ((kA)B) 或 (A(kB))——虽然这三者结果相同但书写习惯上先处理数乘。第二个细节矩阵的减法定义为 (A-BA(-1)B)本质上是加法和数乘的复合。考试里如果题目只给了加法你完全可以用 (A(-1)B) 来构造减法不需要额外定义。3. 矩阵乘法这一章真正的分水岭3.1 矩阵乘法的定义与维度匹配规则设 (A(a_{ij}){m\times s})(B(b{ij})_{s\times n})则乘积 (CAB) 是一个 (m\times n) 矩阵其中[ c_{ij}\sum_{k1}^{s}a_{ik}b_{kj} ]这个公式的意思是(C) 的第 (i) 行第 (j) 列元素等于 (A) 的第 (i) 行与 (B) 的第 (j) 列对应元素乘积之和。维度匹配规则必须刻在脑子里左矩阵的列数必须等于右矩阵的行数。也就是 (A_{m\times s}\cdot B_{s\times n}C_{m\times n})中间的 (s) 必须一致结果的维度是“外框”——取左边的行数 (m) 和右边的列数 (n)。我教过一个很实用的记忆方法把维度写成 (m\times s) 和 (s\times n)中间两个 (s) 划掉剩下 (m\times n) 就是结果维度。这个方法在考试时能帮你快速判断一个乘法是否合法也能预判结果形状。3.2 为什么矩阵乘法这样定义这是学生问得最多的问题。为什么不是对应元素相乘为什么要有求和从线性变换的角度看矩阵是线性变换的表示。如果 (A) 表示变换 (T_A)(B) 表示变换 (T_B)那么复合变换 (T_A\circ T_B) 的矩阵表示就应该是 (AB)。复合变换的定义是“先做 (B) 再做 (A)”代入基向量的像自然就得到求和形式的乘法规则。从线性组合的角度看(AB) 的每一列是 (A) 的列向量的线性组合组合系数来自 (B) 的对应列。这个视角在解线性方程组时特别有用(Axb) 可以理解为“用 (A) 的列向量线性组合出 (b)”。从计算的角度看求和形式保证了结合律 ((AB)CA(BC)) 成立这是矩阵乘法最重要的性质之一。如果改成对应元素相乘结合律就不成立了整个线性代数的框架都会崩塌。3.3 矩阵乘法的运算律与反例矩阵乘法满足结合律 ((AB)CA(BC))、左分配律 (A(BC)ABAC)、右分配律 ((AB)CACBC)、与数乘的相容性 (k(AB)(kA)BA(kB))。但矩阵乘法不满足交换律。也就是说一般情况下 (AB\neq BA)。这是矩阵运算和实数运算最大的区别也是考试中设置陷阱的重灾区。我整理过几个经典反例建议你亲手算一遍取 (A\begin{pmatrix}10\00\end{pmatrix})(B\begin{pmatrix}00\10\end{pmatrix})则 (AB\begin{pmatrix}00\00\end{pmatrix})而 (BA\begin{pmatrix}00\10\end{pmatrix})。两者不相等。取 (A\begin{pmatrix}11\00\end{pmatrix})(B\begin{pmatrix}10\10\end{pmatrix})则 (AB\begin{pmatrix}20\00\end{pmatrix})(BA\begin{pmatrix}11\00\end{pmatrix})。另一个重要性质是消去律不成立(ABAC) 且 (A\neq O) 时不能推出 (BC)。反例取 (A\begin{pmatrix}10\00\end{pmatrix})(B\begin{pmatrix}00\10\end{pmatrix})(C\begin{pmatrix}00\20\end{pmatrix})则 (ABACO)但 (B\neq C)。提示遇到 (ABO) 时不要下意识认为 (AO) 或 (BO)。两个非零矩阵相乘完全可能得到零矩阵这是矩阵环和实数域的本质区别。3.4 矩阵乘法的实操计算流程我建议按以下步骤计算 (AB)先写维度确认 (A) 的列数等于 (B) 的行数写出结果维度。画网格在草稿纸上画出结果矩阵的空白网格标注每个位置。逐元素计算对每个 (c_{ij})取 (A) 的第 (i) 行和 (B) 的第 (j) 列做点积。检查结果矩阵的维度是否与预期一致是否有明显的计算错误。举个例子(A\begin{pmatrix}12\34\end{pmatrix})(B\begin{pmatrix}56\78\end{pmatrix})。(c_{11}1\times52\times719)(c_{12}1\times62\times822)(c_{21}3\times54\times743)(c_{22}3\times64\times850)。所以 (AB\begin{pmatrix}1922\4350\end{pmatrix})。而 (BA\begin{pmatrix}5\times16\times35\times26\times4\7\times18\times37\times28\times4\end{pmatrix}\begin{pmatrix}2334\3146\end{pmatrix})。两者不同再次验证交换律不成立。4. 特殊矩阵不是“特殊”而是“常用”4.1 零矩阵、单位矩阵与数量矩阵零矩阵 (O_{m\times n}) 是所有元素为 0 的矩阵。它的核心性质是(AOA)(AOO)(OAO)维度匹配时。注意零矩阵不唯一不同维度对应不同的零矩阵。单位矩阵 (I_n)也记作 (E_n)是主对角线元素为 1、其余为 0 的 (n) 阶方阵。它的核心性质是(AI_nA)(I_mAA)。单位矩阵在矩阵乘法中的地位相当于实数中的 1。数量矩阵是 (kI_n)即主对角线全为 (k)、其余为 0 的方阵。它和任何同阶方阵相乘都可交换((kI)AA(kI)kA)。这个性质在化简矩阵方程时非常有用。我见过一个常见错误把单位矩阵写成所有元素为 1 的矩阵。单位矩阵只有主对角线是 1其余全是 0。所有元素为 1 的矩阵通常记作 (J)性质完全不同。4.2 对角矩阵与对称矩阵对角矩阵是主对角线以外元素全为 0 的方阵记作 (\text{diag}(d_1,d_2,\dots,d_n))。对角矩阵的乘法特别简单两个同阶对角矩阵相乘结果还是对角矩阵对角线元素对应相乘。对角矩阵的幂也容易算(\text{diag}(d_1,\dots,d_n)^k\text{diag}(d_1^k,\dots,d_n^k))。对称矩阵满足 (A^TA)即 (a_{ij}a_{ji})。对称矩阵在二次型和特征值问题中大量出现。反对称矩阵满足 (A^T-A)即 (a_{ij}-a_{ji})主对角线元素必须为 0。一个实用结论任意方阵都可以分解为对称矩阵和反对称矩阵之和[ A\frac{AA^T}{2}\frac{A-A^T}{2} ]这个分解在理论推导中很常用建议记住。4.3 特殊矩阵对照表矩阵类型定义核心性质常见用途零矩阵所有元素为 0(AOA)(AOO)加法单位元单位矩阵主对角线为 1其余为 0(AIIAA)乘法单位元数量矩阵主对角线为 (k)其余为 0与任意同阶方阵可交换化简矩阵方程对角矩阵非主对角线元素为 0乘法逐元素对应相乘幂运算、相似对角化对称矩阵(A^TA)特征值为实数可正交对角化二次型、协方差矩阵反对称矩阵(A^T-A)主对角线为 0特征值为纯虚数或 0旋转、李代数4.4 转置与矩阵乘法的关系转置运算满足 ((AB)^TB^TA^T)。注意顺序要反过来这是考试高频考点。我见过太多人写成 ((AB)^TA^TB^T)这是错误的。验证方法设 (A) 是 (m\times s)(B) 是 (s\times n)则 (AB) 是 (m\times n)((AB)^T) 是 (n\times m)。而 (B^T) 是 (n\times s)(A^T) 是 (s\times m)所以 (B^TA^T) 是 (n\times m)维度匹配。如果写成 (A^TB^T)维度是 (s\times m) 乘 (n\times s)中间 (m) 和 (n) 不一定相等根本不合法。这个性质可以推广到多个矩阵((A_1A_2\cdots A_k)^TA_k^T\cdots A_2^TA_1^T)。记忆口诀是“转置穿脱衣顺序要倒过来”。5. 实操中常见的错误与排查方法5.1 维度不匹配的排查流程维度错误是矩阵运算中最常见的问题。我总结了一个三步排查法写出每个矩阵的维度标注在矩阵旁边。检查乘法链中相邻矩阵的维度是否首尾相接。预判结果维度与题目要求或后续运算对比。举个例子已知 (A_{2\times3})(B_{3\times4})(C_{4\times2})判断 (ABC) 是否合法。(AB) 是 (2\times4)再乘 (C_{4\times2}) 得到 (2\times2)合法。如果题目要求 (ACB)则 (AC) 是 (2\times2)再乘 (B_{3\times4})中间 (2\neq3)不合法。注意编程中 numpy 的运算符和np.dot都遵循同样的维度规则但*是逐元素乘法不要混淆。我见过不少人在 Python 里用*做矩阵乘法结果得到逐元素乘积调试半天才发现问题。5.2 乘法顺序错误的典型场景矩阵乘法不满足交换律所以顺序至关重要。常见错误场景包括计算 ((AB)^2) 时写成 (A^22ABB^2)。正确展开是 (A^2ABBAB^2)只有当 (ABBA) 时才能合并为 (2AB)。计算 ((AB)^2) 时写成 (A^2B^2)。正确结果是 (ABAB)不能随意交换。解矩阵方程 (AXB) 时左乘 (A^{-1}) 得 (XA^{-1}B)而不是 (BA^{-1})。我建议在做每一步变形时都在旁边标注“左乘”或“右乘”养成习惯后错误率会大幅下降。5.3 特殊矩阵相关的易错点单位矩阵的维度容易搞混。(AI_nA) 要求 (A) 的列数等于 (n)(I_mAA) 要求 (A) 的行数等于 (m)。写单位矩阵时一定要根据上下文确定阶数。对角矩阵相乘时有人会误以为需要做完整的矩阵乘法。实际上两个同阶对角矩阵相乘只需要把对角线元素对应相乘非对角线位置全是 0不需要计算。对称矩阵的乘积不一定是对称矩阵。(A) 和 (B) 都对称时(AB) 对称的充要条件是 (ABBA)。这个结论在考试中经常以判断题形式出现。5.4 常见问题速查表问题现象可能原因排查方法解决方案乘法结果维度不对维度匹配错误写出所有矩阵维度调整乘法顺序或转置(AB\neq BA)矩阵乘法不可交换检查是否误用交换律按定义重新计算(ABO) 但 (A,B\neq O)存在零因子验证是否真的得到零矩阵接受这一事实不要强行推导 (AO)((AB)^T) 写错转置顺序错误检查维度是否匹配改为 (B^TA^T)单位矩阵写错混淆单位矩阵和全 1 矩阵检查主对角线单位矩阵只有对角线为 16. 从这一章到后续内容的衔接矩阵运算这一章是后续所有内容的基石。矩阵的逆、初等变换、秩、线性方程组、特征值、二次型全部建立在加法、数乘、乘法这三条基本运算之上。我个人的经验是如果这一章有漏洞后面会越学越吃力因为每一章都会反复调用这些基础规则。一个很实用的建议学完这一章后找几个 (2\times2) 和 (3\times3) 的矩阵把加法、数乘、乘法、转置、特殊矩阵的性质全部手算一遍。不要用计算器不要用编程库就手算。手算的过程会强迫你关注每一个元素的来源这种“慢”恰恰是建立直觉的最快方式。另外如果你后续要学编程中的矩阵运算numpy 的、np.matmul、np.dot都遵循数学定义但要注意np.dot对高维数组的行为和略有不同。我一般建议直接用语义最清晰。至于*它永远是逐元素乘法不要拿来当矩阵乘法用。最后分享一个我自己的习惯每次遇到矩阵等式变形先在草稿纸角落写下“左乘/右乘”两个字确认顺序后再动笔。这个习惯帮我避免了至少一半的计算错误。矩阵运算不难难的是细心和规范。把这一章的基础打牢后面的路会顺很多。

相关新闻

Java URLConnection HTTP请求实战:GET/POST编码、超时与HTTPS避坑指南

Java URLConnection HTTP请求实战:GET/POST编码、超时与HTTPS避坑指南

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

2026/10/15 1:19:57 阅读更多 →
计算机组成原理:指令系统与寻址方式详解及模拟器实操

计算机组成原理:指令系统与寻址方式详解及模拟器实操

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

2026/10/15 1:18:57 阅读更多 →
Python类设计中的私有变量与公有变量:名称改写机制详解

Python类设计中的私有变量与公有变量:名称改写机制详解

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

2026/10/15 1:18:57 阅读更多 →

最新新闻

Linux下C/C++动静态库制作与使用实战指南

Linux下C/C++动静态库制作与使用实战指南

长期以来在Linux下做C/C开发,动静态库始终是绕不开的一个核心技能。无论是自己封装模块、分发二进制产物,还是处理第三方依赖,理解库的制作与使用直接决定了你在编译链接这块能不能少掉头发。我见过不少开发者写业务逻辑很熟练,一…

2026/10/15 4:26:50 阅读更多 →
Flutter鸿蒙开发实战:星座应用跨平台全流程解析

Flutter鸿蒙开发实战:星座应用跨平台全流程解析

1. 项目背景与整体设计思路1.1 为什么选 Flutter 做鸿蒙开发聊到跨平台开发,Flutter 这几年的热度一直在线。原因很简单——一套 Dart 代码,同时跑在 Android、iOS、Windows、macOS、Linux 上,现在还要加上鸿蒙。放在以前,鸿蒙应用…

2026/10/15 4:26:50 阅读更多 →
线上故障排查实战指南:从告警到恢复的黄金步骤

线上故障排查实战指南:从告警到恢复的黄金步骤

半夜两点被电话叫醒,睁开眼看到屏幕上一排红色告警,心跳直接拉满。这种场景,几乎所有做过线上系统的开发者都经历过。告警本身不可怕,可怕的是大脑一片空白,不知道该先点哪里,也不知道哪些命令能救命。这篇…

2026/10/15 4:26:50 阅读更多 →
基于SpringBoot+Vue的个人博客系统开发实战

基于SpringBoot+Vue的个人博客系统开发实战

1. 项目概述与整体技术选型1.1 这个博客系统到底解决了什么问题做个人博客这件事,看起来简单,真做起来坑不少。早期用现成框架,比如WordPress或者各类静态站点生成器,总觉得差了点什么——要么太重,装一堆插件才能用&a…

2026/10/15 4:26:50 阅读更多 →
共享内存IPC实战:从零拷贝原理到信号量同步,提升跨进程通信性能

共享内存IPC实战:从零拷贝原理到信号量同步,提升跨进程通信性能

共享内存(shm)这个老牌IPC方案,我最近在一个数据采集服务里又把它翻了出来。这个服务原本是跨进程传数据,管道和Unix域Socket用得挺顺手,可流量一起来,CPU占用就再也压不下去。换成共享内存之后&#xff0c…

2026/10/15 4:26:50 阅读更多 →
如何判断Ubuntu是否真的关机?三路检查方法与实战探测脚本

如何判断Ubuntu是否真的关机?三路检查方法与实战探测脚本

你有没有遇到过这种情况:在终端里输入了sudo shutdown now,屏幕上日志飞快滚动,最后一切归于黑暗,风扇也慢慢停转,你很自然地认为这台 Ubuntu 机器已经关机了。但我在几年的实践中发现,这个结论经常下得太早…

2026/10/15 4:25:50 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

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