EnhancedMarkdown:为 Typecho 打造的增强版 Markdown 解析器
用一篇文章,解锁 Typecho 博客的 Markdown 全部潜力。
这篇文章本身就是用 EnhancedMarkdown 的全部语法写成的——你看到的每一种排版效果,都是插件的实时渲染。
为什么需要这个插件?
Typecho 默认使用 HyperDown 作为 Markdown 解析器,在日常写作中够用,但当你需要更丰富的排版能力时,它的局限性就显现出来了:
ℹ️ 核心思路
EnhancedMarkdown 的解决思路很直接——完全替换默认解析器 ,而非在其基础上打补丁。基于 Parsedown + ParsedownExtra 引擎,从根本上解决问题,同时大幅扩展语法能力。
插件概览
项目
说明
当前版本
v3.9.1
解析引擎
Parsedown + ParsedownExtra
工作方式
完全替换系统默认 Markdown 解析器
最低要求
Typecho(支持命名空间插件机制的版本)
许可证
BSD License
演进历程
插件的开发经历了几次关键迭代,每一次都在解决真实的使用问题:
timeline
title EnhancedMarkdown 版本演进
section v2.0 起步
基于 HyperDown 扩展 : 正则后处理方式
section v3.0 重构
切换 Parsedown 引擎 : 原生语法扩展
section v3.2 完善
lang- 前缀兼容 : 高亮插件适配
section v3.3 增强
KaTeX 数学公式 : Mermaid 图表
section v3.4 优化
按需加载机制 : 零资源浪费
section v3.4.2 修复
容器内容渲染修复 : 优先级冲突修正
section v3.5.0 增强
HTML块内MD解析 : 代码块标题 : 容器方括号语法
section v3.5.1 修正
纯HTML内容误编码修复 : Markdown语法检测
section v3.5.2 兼容性
标题ID Slug格式 : 脚注CSS样式
section v3.5.3 修正
PHP 8.2+兼容性 : GFM换行修复
section v3.6.0 新增
Prism.js 语法高亮 : 代码块着色
section v3.7.0 重构
代码块暗色主题 : 复制按钮 : 统一包裹
section v3.8.0 增强
KaTeX/Mermaid CDN : 资源来源选择
section v3.8.1 修正
Prism .token.tag : 主题样式污染修复
section v3.8.2 修正
Prism Autoloader冲突 : 全部语言高亮修复
section v3.9.0 交互
Mermaid图表缩放 : 拖拽平移 : 还原按钮
section v3.9.1 修正
图片尺寸语法修复 : 空格分隔兼容
v2.0 — 起步阶段(基于 HyperDown 扩展)
最初的实现方式是在 HyperDown 解析结果上做正则后处理——用 str_replace 替换占位符来扩展语法。这种方式简单直接,但随着扩展语法增多,占位符冲突导致的显示故障越来越频繁。
v3.0 — 重大重构(切换 Parsedown 引擎)
这是最关键的一次变更。将整个解析引擎从 HyperDown 切换为 Parsedown + ParsedownExtra,扩展方式也从正则后处理改为 Parsedown 原生的 InlineTypes / BlockTypes 注册机制:
彻底消除占位符冲突 :不再有字符串替换带来的副作用
原生语法扩展 :通过注册自定义解析器实现新语法,与标准语法和平共处
获得 Markdown Extra 支持 :脚注、定义列表、缩写词开箱即用
💡 技术细节
Parsedown 使用 BlockTypes 和 InlineTypes 数组注册自定义解析器。例如,:::type 容器语法通过将 Container 注册到 : 字符触发;^text^ 上标通过将 Superscript 注册到 ^ 字符触发。
优先级很关键 :同一个字符可以注册多个处理器,Parsedown 按数组顺序依次尝试。: 字符上同时注册了 Table、DefinitionList 和 Container。v3.4.2 使用 array_unshift 将 Container 提升为最高优先级,避免 DefinitionList 在容器前紧挨段落时错误拦截 :::type 行。
v3.2 — 细节完善
修正了代码语言标识的兼容性问题——将 language-php 风格的 class 名转换为 Typecho 约定的 lang-php 前缀,确保 Prism.js、Highlight.js 等语法高亮插件正常工作。
v3.3 — 公式与图表
新增两大重量级功能:
数学公式 (KaTeX 渲染):支持 \(...\) 行内公式和 $\(...\) $ 块级公式
Mermaid 图表 :支持流程图、时序图、甘特图等,用 ```mermaid 代码块书写
v3.4 — 性能优化 + 修复
⚠️ 性能优化要点
引入按需加载机制——KaTeX(约 1.5MB)和 Mermaid(约 3.2MB)仅在实际包含公式/图表的页面才加载。纯文字文章页面零额外资源开销。同时修复了公式定界符缺失和 Mermaid 数组路径错误两个 Bug。
v3.4.2 — 容器语法关键修复
修复了两个影响 :::type 容器语法的 Bug:
Bug #1:容器内容为空 — blockContainer() 初始化时设置了空 text 属性,Parsedown 渲染时 isset(\(Element['text'])` 优先于 `rawHtml`,导致容器内容永远不显示。修复:`unset(\) Block['element']['text'])
Bug #2:容器被定义列表拦截 — ParsedownExtra 的 DefinitionList 注册在 : 字符上,当 :::info 前紧挨段落时会错误拦截。修复:使用 array_unshift 将 Container 注册为 : 字符的最高优先级处理器
v3.5.0 — 解析增强
本次更新带来了 3 项解析增强:
HTML 块内 Markdown 解析 :新增 blockMarkupComplete() 方法,对白名单标签(<center>、<details>、<div> 等)自动解析内部 Markdown。使用白名单机制确保 <script>/<style>/<pre> 等标签不受影响
代码块标题支持 :新增 blockFencedCode() 方法提取 title="..." 参数,支持 ```javascript title="示例" 语法显示代码块标题栏
容器方括号语法 :扩展 blockContainer() 正则,支持 :::note[自定义标题] Docusaurus Admonition 风格语法,向后兼容 :::note 标题 空格语法
v3.5.1 — 纯 HTML 内容误编码修正
v3.5.0 的 blockMarkupComplete() 引入了一个回归问题:当 <div> 等白名单标签内部为纯 HTML (不含 Markdown 语法)时,text() 的递归解析会将 HTML 标签转义为实体编码并错误包裹在 <pre><code> 中。
🚫 回归问题示例
<div style="color:#fff">标题</div><audio>...</audio> 会被错误渲染为:
<pre><code><div style="color:#fff">标题</div>...</code></pre>
修复方案:新增 containsMarkdownSyntax() 启发式检测方法——使用 strip_tags() 去除 HTML 标签后,通过正则检测纯文本中是否包含 Markdown 语法标记(**、`、[、$ 等)。纯 HTML 内容跳过 text() 调用,直接保留原始输出。
v3.5.2 — 主题兼容性修复
本次更新聚焦于与主题的兼容性,修复了两个问题:
标题 ID 改用 Slug 格式 :旧版使用 toc-0、toc-1 等数字 ID,依赖解析顺序且不可预测,主题 JS 无法构建有效锚点链接。v3.5.2 新增 generateSlug() 方法,将标题文本转为可读的 slug 格式 ID(如 hello-world、为什么需要这个插件),重复标题自动追加 -2、-3 后缀。同时新增配置项,可选择 Slug 格式或保留旧版数字格式
脚注样式补全 :ParsedownExtra 生成 .footnotes、.footnote-ref、.footnote-backref 等元素但无样式,脚注内容显示混乱。新增完整的脚注 CSS :分割线、字号缩小、有序列表间距、上标定位、回链样式,确保在任何主题下都有良好的视觉呈现
v3.5.3 — PHP 8.2+ 兼容性修复
修复了一个属性大小写错误导致的 PHP 8.2+ 兼容性问题:
BreaksEnabled 大小写不一致 :Parser 构造函数中使用 \(this->BreaksEnabled = true`(大写 B),而父类 Parsedown 声明的属性为 `\) breaksEnabled(小写 b)。PHP 属性名大小写敏感,导致在 PHP 8.2+ 上触发 Deprecated: Creation of dynamic property 弃用警告,且 GFM 自动换行功能实际未生效(赋值到了错误的动态属性)
修复方式 :改用 Parsedown 提供的公共 setter 方法 $this->setBreaksEnabled(true),所有 PHP 版本均兼容
⚠️ PHP 8.2+ 注意
如果你的服务器运行 PHP 8.2 或更高版本,旧版插件会在每次解析时产生弃用警告。v3.5.3 彻底解决了此问题。同时,GFM 换行功能(文本中的单个换行符渲染为 <br>)现在能正确生效。
v3.6.0 — 代码语法高亮(Prism.js)
新增内置代码语法高亮功能,基于 Prism.js 前端渲染引擎:
Prism.js 集成 :自动为 ```language 围栏代码块添加语法着色,下载版已包含 200+ 编程语言支持
按需加载 :沿用 KaTeX/Mermaid 的按需加载模式——仅当代码块存在时才加载 Prism.js CSS /JS 资源,无代码块的页面零开销
配置开关 :插件设置新增「代码语法高亮(Prism.js)」选项,默认启用
v3.7.0 — 代码块暗色主题重构
对代码块的视觉呈现进行了全面重构,从浅色主题切换为暗色主题,并统一了所有代码块的 HTML 结构:
暗色主题 :代码块背景从 #f6f8fa 浅灰切换为 #1e1e1e 深色,文字颜色为 #d4d4d4,顶栏为 #2d2d2d,整体视觉更专业
统一包裹结构 :所有非 Mermaid 代码块(无论有无标题)统一包裹为 <div class="code-block-wrapper"> 容器,内含顶栏(code-top-bar)和代码区(actual-code-content)
复制按钮 :顶栏右侧新增「语言名 | 复制」按钮,点击复制代码内容到剪贴板,显示"已复制"反馈 2 秒后恢复
Prism.js 适配 :prism.css 全面适配暗色主题——移除 pre 的 border/box-shadow/margin(由 wrapper 控制),背景设为 transparent,隐藏 Prism.js Toolbar 插件
⚠️ 结构变更说明
v3.7.0 之前的版本中,有标题的代码块和无标题的代码块使用不同的 HTML 结构。v3.7.0 统一为单一结构,简化了 CSS 维护和功能扩展。行号插件(line-numbers 类)也适配了新的 actual-code-content 选择器。
v3.8.0 — CDN 资源来源选择
增强了 KaTeX 和 Mermaid 的资源加载灵活性,支持在本地文件和 CDN 之间自由切换:
资源来源选择 :插件设置新增「KaTeX 资源来源」和「Mermaid 资源来源」配置项,可选「插件本地文件」或「CDN 网址」
CDN 基础路径 :选择 CDN 模式后,可自定义 CDN 目录路径(如 https://cdn.jsdelivr.net/npm/katex@0.17.0/dist/),插件自动拼接具体文件名
安全回退 :CDN 基础路径为空时自动回退到本地文件,避免生成无效 URL
新增 getResourceUrl() 方法 :统一处理本地/CDN 路径逻辑,减少代码重复
💡 CDN 默认地址
插件预设了 jsDelivr CDN 的默认地址:
KaTeX:https://cdn.jsdelivr.net/npm/katex@0.17.0/dist/
Mermaid:https://cdn.jsdelivr.net/npm/mermaid@11.15.0/dist/
使用 CDN 模式可减轻服务器带宽压力,但需要外部网络请求。默认使用本地文件,升级后行为不变。
v3.8.1 — Prism .token.tag 主题样式污染修复
修复了博客主题的 .tag CSS 类污染 Prism.js 代码高亮的问题:
问题 :博客主题为标签云定义了 .tag 类样式(padding/background-color/border-radius),Prism.js 在 PHP/markup 类语言中为 HTML 标签 token 生成 <span class="token tag">,CSS 选择器 .tag 命中了 token 元素,导致代码块内出现白色背景块
修复 :在 prism.css 中新增 .token.tag 覆盖规则,使用 !important 重置布局属性(background/border/padding/margin/box-shadow/border-radius/display/font-size/line-height),保留 Prism 主题定义的 token 颜色
v3.8.2 — 代码语法高亮全部语言修复
修复了代码语法高亮仅少数语言生效的问题:
问题 :prism.js 中同时打包了全部语言语法定义(300+种)和 Autoloader 插件 。Autoloader 的设计目的是从外部服务器动态加载语言文件,但本地不存在外部语言文件。Autoloader 会拦截高亮流程,对部分语言尝试 AJAX 加载外部文件 → 加载失败 → 高亮失败。仅少数核心语言(如 markup、css、javascript)因注册优先级高能绕过 Autoloader 正常工作
修复 :从 prism.js 中移除 Autoloader 插件,保留全部 300+ 种语言语法定义。所有语言高亮由内联语法定义直接处理,无需外部文件加载
影响范围 :仅替换 prism/prism.js,不修改其他文件,向后完全兼容
v3.9.1 — 图片尺寸语法修复
修复了图片尺寸语法  在 URL 与 =WxH 之间存在空格时无法解析的问题:
问题 : 因空格导致父类 Parsedown 的 URL 正则匹配失败,整张图片不被渲染。仅  无空格格式可正常工作
修复 :重写 inlineImage() 方法为预处理模式——在调用父类解析前先从文本中剥离 =WxH 参数,使父类能正常匹配标准 Markdown 图片语法,再在返回结果中注入 width/height 属性
影响范围 :仅修改 Parser::inlineImage() 方法,不影响无尺寸参数的普通图片
v3.9.0 — Mermaid 图表框内缩放交互
为 Mermaid 图表新增了框内缩放、平移、还原交互功能:
鼠标滚轮缩放 :在图表框内滚动鼠标滚轮即可自由缩放(范围 0.05x~20x),缩放中心跟随鼠标光标位置,想看哪里就滚到哪里
鼠标拖拽平移 :按住鼠标左键拖拽即可平移图表内容,1:1 跟随鼠标移动,手感自然流畅
移动端支持 :单指拖拽平移 + 双指捏合缩放,移动端也能自由查看大型图表细节
还原按钮 :右上角常驻显示循环箭头图标按钮,点击后平滑过渡回初始视角——防止缩放/平移后"找不到图"
零视觉影响 :不改变图表的渲染大小和外观,仅在框内提供交互能力,wrapper 完全透明无边框
💡 使用方式
图表渲染完成后,直接在图表区域内使用鼠标操作即可。右上角的 🔄 按钮随时可以一键回到初始状态。大型流程图、复杂时序图都能轻松查看了。
功能全览
标准 Markdown 增强
完整的 GFM(GitHub Flavored Markdown)支持:
删除线
这段文字已经被删除了,但你仍然可以看到它。
GFM 表格
支持左对齐、居中、右对齐:
左对齐
居中对齐
右对齐
内容 A
内容 B
100
内容 C
内容 D
200
任务列表
这些是标准 Markdown 不支持、但对技术写作非常有用的语法。
脚注
这是一段包含脚注引用的文字 ,脚注会自动显示在文章末尾,点击可以跳转。
定义列表
Typecho
一个轻量级的博客引擎,以简洁高效著称
Markdown
一种轻量级标记语言,让你用纯文本格式编写文档
EnhancedMarkdown
Typecho 的增强版 Markdown 解析器插件
缩写词
在技术文章中,HTML 、CSS 和 API 这些缩写词很常见。鼠标悬停即可看到完整含义。
自定义扩展语法
以下是插件独创的语法扩展,标准 Markdown 不支持。
TOC 自动目录
你已经在文章开头看到了——本篇文章顶部的目录就是用 [toc] 标记自动生成的。它会自动扫描所有标题,生成带锚点链接的嵌套目录树。
容器/提示块
用 :::type 语法创建彩色提示框。下面展示所有 8 种类型:
💡 小技巧
这是一个提示信息(tip),适合用来分享技巧和最佳实践。
ℹ️ 信息
这是一个信息说明块(info),适合用来补充背景知识。
⚠️ 注意
这是一个警告信息(warning),适合用来提醒读者注意潜在问题。
🚫 危险
这是一个危险警示(danger),适合用来标记可能导致数据丢失等严重后果的操作。
📝 备注
这是一个备注块(note),适合用来记录补充说明。
✅ 成功
这是一个成功状态块(success),适合用来确认操作已正确完成。
📋 详细信息
这是一个详细信息块(details),适合用来收纳较长的补充内容,保持文章主体简洁。
💬 引用
这是一个引用块(quote),适合用来展示名人名言或重要观点。
📝 🆕 方括号语法
v3.5.0 新增支持 Docusaurus Admonition 风格的方括号语法::::note[自定义标题]。方括号内的标题优先于空格标题,向后完全兼容。你现在看到的这个提示框就是用方括号语法创建的!
上标 / 下标 / 高亮
物理学中最著名的方程:E = mc2 ,其中 c 代表光速。
水的化学式是 H~2~O,硫酸是 H~2~SO~4~。
在学习过程中,标记重点内容 是提高效率的好方法。
等等,你注意到了吗?上面这行文字中,2 被渲染成了上标,~2~ 被渲染成了下标,标记重点内容 被高亮显示了。
图片尺寸
Markdown
|
复制
 → 宽 300px,高 200px
 → 宽 300px,高度自适应
 → 高度 200px,宽度自适应
数学公式(KaTeX)
支持 LaTeX 语法,使用 KaTeX 前端渲染,速度远优于 MathJax。
行内公式
质能方程 \(E = mc^2\) 是物理学最著名的公式之一。勾股定理 \(a^2 + b^2 = c^2\) 是几何学的基础。欧拉公式 \(e^{i\pi} + 1 = 0\) 被誉为数学中最美的等式。
块级公式
\[\sum_{i=1}^{n} x_i^2 = x_1^2 + x_2^2 + \cdots + x_n^2\]
\[\begin{aligned}
&\mathcal{F}(x) = \lim_{n\to\infty} \sum_{k=0}^{n} \binom{n}{k} \left( \int_{\partial\Omega} \frac{\partial^{\alpha+\beta}}{\partial x^{\alpha}\partial y^{\beta}} \left[ e^{-\zeta \cdot \nabla} \Psi(\mathbf{r},t) \right] \cdot \mathbf{n} \, dS \right)^{k} \\
&\qquad \times \det\begin{pmatrix}
\frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_n} \\
\frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_n} \\
\vdots & \vdots & \ddots & \vdots \\
\frac{\partial f_n}{\partial x_1} & \frac{\partial f_n}{\partial x_2} & \cdots & \frac{\partial f_n}{\partial x_n}
\end{pmatrix} \\
&\qquad \times \left[ \prod_{i=1}^{\infty} \left(1 + \frac{z_i^2}{\lambda_i}\right)^{-\gamma_i} \right] \cdot \exp\left\{-\iiint_{\mathbb{R}^3} \frac{|\xi|^2}{2\sigma^2} \cdot \frac{1}{\sqrt{2\pi}} e^{-\frac{x^2+y^2+z^2}{2}} \, dV\right\} \\
&\qquad \times \begin{cases}
\displaystyle \frac{\Gamma\left(\frac{p}{2}\right) \cdot \zeta(3)}{\pi^{p/2} \cdot \mathrm{B}(a,b)} & \text{if } p \equiv 1 \pmod{2} \\[12pt]
\displaystyle \frac{\mathrm{Li}_2\left(e^{i\theta}\right) - \mathrm{Li}_2\left(e^{-i\theta}\right)}{2i\sin\theta} & \text{if } p \equiv 0 \pmod{2}
\end{cases} \\
&\qquad \times \left. \frac{d^{m}}{dt^{m}} \right|_{t=0} \left[ \operatorname{tr}\left( \mathbf{A}^{-1}(t) \cdot \frac{d\mathbf{A}}{dt} \right) \right] \cdot \oint_{\gamma} \frac{\omega(z)}{z-z_0} \, dz \\
&\qquad \times \langle \psi_1 | \left[ \hat{H}, \hat{O} \right] | \psi_2 \rangle \cdot \mathbf{A}^{\top} \xrightarrow{\text{a.s.}} \mathcal{N}(\mu,\Sigma^2) \\
&\qquad \times \sum_{n=0}^{\infty} \frac{(-1)^n}{(2n+1)!} \left( \frac{\partial}{\partial \theta} \right)^{2n+1} \left. \left( \theta \cot\theta \right) \right|_{\theta=0}
\end{aligned}\]
💡 转义支持
如果你只是想写一个美元符号,比如 \$100,使用反斜杠转义即可,不会被识别为公式定界符。
Mermaid 图表
用文本描述图表,前端自动渲染。文章中的图表不再是截图,而是可维护的文本代码。
交互提示 :以下图表均可使用鼠标滚轮缩放、拖拽平移查看细节,右上角 🔄 按钮可一键还原。
流程图
graph TD
A[开始写作] --> B{选择内容类型}
B -->|技术文章| C[使用代码块]
B -->|数学笔记| D[使用 KaTeX 公式]
B -->|项目文档| E[使用 Mermaid 图表]
C --> F[启用语法高亮]
D --> G[编写 LaTeX 公式]
E --> H[绘制流程图]
F --> I[发布文章]
G --> I
H --> I
时序图
sequenceDiagram
participant 用户
participant 浏览器
participant Typecho
participant 插件
用户->>浏览器: 编写 Markdown 文章
浏览器->>Typecho: 提交文章内容
Typecho->>插件: 触发 markdown Hook
插件->>插件: Parsedown 解析 + 扩展语法
插件-->>Typecho: 返回渲染后 HTML
Typecho-->>浏览器: 输出完整页面
浏览器->>浏览器: KaTeX/Mermaid 前端渲染
浏览er-->>用户: 展示最终效果
甘特图
gantt
title 插件开发计划
dateFormat YYYY-MM-DD
section 基础功能
解析引擎重构 :done, a1, 2026-05-26, 1d
GFM 语法支持 :done, a2, after a1, 1d
section 增强功能
数学公式支持 :done, b1, after a2, 1d
Mermaid 图表 :done, b2, after b1, 1d
section 优化
按需加载 :done, c1, after b2, 1d
Bug 修复 :done, c2, after c1, 1d
性能优化
插件在设计上追求零代价 ——不用的时候不产生任何开销。
按需加载机制
不是简单地判断"功能是否开启",而是扫描页面实际内容:
解析 Markdown 时检测输出 HTML 中是否包含 .math-block / .math-inline / .mermaid 元素
设置静态标志 \(hasMath` / `\) hasMermaid
CSS 注入(<head>)和 JS 注入(</body> 前)根据标志决定是否加载
✅ 性能对比
页面类型
优化前
优化后
纯文字文章
~4.5MB
0KB
含公式文章
~4.5MB
~300KB
含图表文章
~4.5MB
~3.2MB
:::
字体精简
KaTeX 字体文件从 TTF + WOFF + WOFF2 三种格式精简为仅 WOFF2:
TTF 格式(~600KB) → 已移除
WOFF 格式(~500KB) → 已移除
WOFF2 格式(300KB ) → 唯一保留
浏览器会优先加载 WOFF2 格式,自动跳过不存在的格式引用,无需修改 CSS。
技术实现(开发者视角)
📝 面向开发者
以下内容面向有 Typecho 插件开发经验的读者。如果你只是想使用插件,可以跳过这部分。
Hook 注册
插件通过 4 个 Hook 点接入 Typecho:
Php
|
复制
// ① 替换文章 Markdown 解析器
\Typecho\Plugin::factory('Widget\Base\Contents')->markdown = [__CLASS__, 'parse'];
// ② 替换评论 Markdown 解析器
\Typecho\Plugin::factory('Widget\Base\Comments')->markdown = [__CLASS__, 'parse'];
// ③ 注入 CSS 到 <head>
\Typecho\Plugin::factory('Widget\Archive')->header = [__CLASS__, 'injectStyles'];
// ④ 注入 JS 到 </body> 前
\Typecho\Plugin::factory('Widget\Archive')->footer = [__CLASS__, 'injectScripts'];
自定义语法扩展
基于 Parsedown 的扩展机制,注册自定义的行内元素和块级元素:
Php
|
复制
// 注册容器块语法(:::type 触发)
$this->BlockTypes[':'][] = 'Container';
// 注册上标语法(^ 触发)
$this->InlineTypes['^'] = ['Superscript'];
// 注册高亮语法(= 触发)
$this->InlineTypes['='] = ['Highlight'];
// 扩展扫描字符列表(Parsedown 只扫描此列表中的字符)
$this->inlineMarkerList .= '^=';
数学公式保护机制
数学公式中的 _、*、\ 等字符会被 Parsedown 误解析。解决方案是预处理-后处理两阶段 :
预处理 :在 Parsedown 解析前,用 \x00 占位符替换公式内容
Parsedown 解析 :占位符不包含特殊字符,不会被误解析
后处理 :将占位符替换为带有 KaTeX 定界符的 HTML 标签
Php
|
复制
// 块级公式占位符 → HTML(使用 \[...\] 定界符)
\(replacement = '<div class="math-block">\[' . \) escapedFormula . '\]</div>';
// 行内公式占位符 → HTML(使用 \(...\) 定界符)
\(replacement = '<span class="math-inline">\(' . \) escapedFormula . '\)</span>';
容器嵌套的脚注保护
🚫 技术陷阱
容器内容通过 $this->text() 递归解析,但 Parsedown 的 text() 方法内部会执行 DefinitionData = array(),这会清空容器外已收集的脚注定义 !必须使用保存/恢复机制来防止数据丢失。
Php
|
复制
// ① 保存当前定义数据(脚注、引用、缩写)
\(savedDefinitionData = \) this->DefinitionData;
// ② 递归解析容器内容(会触发 DefinitionData 重置)
\(contentHtml = \) this->text($Block['content']);
// ③ 合并子解析产生的定义回主数据
\(this->DefinitionData = \) savedDefinitionData;
安装与配置
安装步骤
配置项一览
所有 15 项配置均可独立设置,语法功能默认全部启用:
#
功能
语法示例
默认
1
TOC 目录
[toc]
启用
2
任务列表
- [x] / - [ ]
启用
3
上标
^text^
启用
4
下标
~text~
启用
5
高亮标记
==text==
启用
6
容器/提示块
:::type ... :::
启用
7
图片尺寸

启用
8
数学公式
\(...\) / $\(...\) $
启用
9
Mermaid 图表
```mermaid
启用
10
代码语法高亮
```language
启用
11
标题锚点 ID 格式
Slug 格式 / 数字格式
Slug 格式
12
KaTeX 资源来源
本地 / CDN
本地
13
KaTeX CDN 路径
自定义目录 URL
jsDelivr
14
Mermaid 资源来源
本地 / CDN
本地
15
Mermaid CDN 路径
自定义目录 URL
jsDelivr
文件结构
|
复制
EnhancedMarkdown/
├── Plugin.php # 插件主入口(Hook 注册、配置面板、CSS/JS 注入)
├── Parser.php # 增强解析器(基于 Parsedown 扩展)
├── Parsedown.php # Parsedown 核心引擎
├── ParsedownExtra.php # Parsedown Extra 扩展
├── katex/ # KaTeX 数学公式渲染库
│ ├── katex.min.js
│ ├── katex.min.css
│ ├── auto-render.min.js
│ └── fonts/ # WOFF2 字体(仅 300KB)
├── mermaid.min.js # Mermaid 图表渲染库
├── prism/ # Prism.js 代码语法高亮库
│ ├── prism.js # 核心 + 全部语言支持
│ └── prism.css # 主题样式
└── README.md
总结
💬 一句话总结
EnhancedMarkdown 的设计目标很明确:让 Typecho 的 Markdown 写作体验不输于任何现代写作平台 。
通过完全替换解析引擎而非打补丁的方式,从根本上保证了语法的正确性和扩展的可靠性。回到这篇文章本身——你所看到的目录、提示框、高亮、上下标、数学公式、流程图、甘特图、脚注、任务列表、定义列表……全部来自插件的实际渲染。
如果你在 Typecho 博客中需要用到这些丰富排版能力,不妨试试这个插件。
公司名称
总部所在地
成立年份
员工人数(万)
年营收(亿美元)
净利润(亿美元)
研发投入(亿美元)
核心业务
现任CEO
市值(亿美元)
公司简介
Apple
美国库比蒂诺
1976
16.4
3833
970
299
iPhone、Mac、服务
Tim Cook
33500
全球最具价值的科技公司之一,以iPhone、Mac、iPad等硬件产品为核心,构建了iOS、macOS封闭生态系统,并通过App Store、Apple Music、iCloud等服务持续提升用户粘性与利润空间,品牌溢价能力行业领先。
Microsoft
美国雷德蒙德
1975
22.1
2451
881
272
Windows、Azure、Office
Satya Nadella
31200
全球软件与云计算巨头,Windows操作系统长期垄断桌面市场,Office办公套件深入人心。近年来全力转型云服务,Azure增长迅猛,并通过OpenAI合作布局AI,企业级市场地位稳固,盈利能力持续增强。
Alphabet
美国山景城
1998
18.3
3074
738
454
搜索、YouTube、云
Sundar Pichai
22800
Google母公司,全球搜索引擎绝对霸主,搜索广告贡献主要收入。旗下YouTube是全球最大视频平台,Android系统主导移动生态。同时大力投入Waymo自动驾驶、量子计算等前沿技术,研发投入位居行业前列。
Amazon
美国西雅图
1994
152.5
5748
304
732
电商、AWS、广告
Andy Jassy
20500
全球最大电商平台,从网上书店起步发展为覆盖零售、物流、云计算的商业帝国。AWS是全球云服务市场领导者,贡献大部分利润。同时布局广告、流媒体、AI(Alexa)等领域,员工规模庞大,业务多元且协同性强。
NVIDIA
美国圣克拉拉
1993
2.96
1305
729
176
GPU、AI芯片
Jensen Huang
28700
全球图形处理器与AI芯片龙头,最初以游戏显卡闻名。随着大模型浪潮爆发,其GPU成为AI训练与推理的事实标准,数据中心业务爆发式增长,市值一度跃居全球前列,是本轮AI革命最核心的硬件受益者。
Meta
美国门洛帕克
2004
6.73
1349
391
465
Facebook、Instagram、元宇宙
Mark Zuckerberg
14600
全球最大社交网络公司,旗下Facebook、Instagram、WhatsApp、Messenger覆盖数十亿用户,广告收入为主要来源。近年来重金投入元宇宙(Reality Labs)与AI,短期亏损巨大,但长期押注下一代计算平台与社交形态。
Tesla
美国奥斯汀
2003
14.0
968
150
134
电动车、储能、自动驾驶
Elon Musk
7800
全球新能源汽车领军者,以纯电驱动、智能驾驶和OTA升级重新定义汽车产品。Model 3/Y等车型畅销全球,同时布局储能(Powerwall/Megapack)、太阳能及人形机器人Optimus,品牌影响力与创始人光环极强。
TSMC
中国台湾新竹
1987
7.35
900
344
144
晶圆代工
魏哲家
9200
全球最大专业集成电路制造服务公司,晶圆代工市场份额遥遥领先。掌握最先进制程工艺(3nm/2nm),为Apple、NVIDIA、AMD、高通等几乎所有顶级芯片设计公司代工,是全球半导体产业链中不可替代的关键环节。
Samsung
韩国水原
1969
27.0
2120
223
165
半导体、手机、显示
李在镕
3800
韩国最大跨国企业集团,业务覆盖电子、半导体、显示面板、家电、造船等众多领域。三星电子是全球存储芯片龙头,同时也是顶级智能手机厂商,OLED面板供应苹果等客户,产业链垂直整合能力行业罕见。
Tencent
中国深圳
1998
10.8
860
272
98
游戏、社交、云、金融
马化腾
4200
中国最大互联网综合服务提供商之一,微信与QQ构建了庞大的国民级社交生态。游戏业务全球领先(《王者荣耀》《和平精英》),同时布局金融科技、云计算、视频号、广告及大量对外投资,生态渗透力极强。