Jupyter Notebok中Markdown渲染失败的主要原因是单元格没有正确设置为Markdown类型:ESC进入命令模式后,按M键切换,然后用Shift+Enter渲染;语法上支持ComonMark子集,但不兼容GFM的所有特性。例如,表格需要空行,删除线可能失效,引用链接不支持,当地图像路径中的空格需要URL编码。
直接得出结论:Jupyter Notebook 里写 Markdown,本质是将单元格设置为单元格 Markdown 类型,然后使用标准 Markdown 语法写作,但如果不注意几个关键点,就会渲染失败或显示异常。
并不是所有的单元格都能渲染 Markdown —— 必须是显式切换类型。常见的错误是直接的 Code 单元格里写 # 标题,运行结果后,原始输出不转换为标题。
- 选择目标单元格,按
Esc退出编辑模式(进入命令模式) - 按
M键(不是 Shift+M,就是单击M),将显示单元格左上角Markdown - 再按
Enter输入内容后进入编辑Shift + Enter渲染 - 如果误切到
Raw NBConvert或Heading(已弃用),#不生效,必须切回Markdown
Jupyter 的 Markdown 渲染器基于 nbconvert,支持 CommonMark 子集,但并不完全兼容 GitHub Flavored Markdown(GFM)。容易踩坑的是:
-
```python代码块高亮有效,但是~~删除线~~可能不会渲染旧版内核(推荐使用)<del>文本</del>) - 表格前后必须有空行,否则将被视为普通文本;列出对齐符号
|:---|---:|:--:|有效,但省略对齐符也可以渲染 -
支持本地路径(相对于当前路径(相对于当前路径) .ipynb 目录),但路径中的空间需要 URL 编码,比如my%20pic.jpg -
[链接文本](https://example.com)正常,但[链接文本][ref]引用写法不支持(需要写成内联)
Markdown 允许嵌入单元格本身 HTML 和 LaTeX,但语法边界要清晰:
Editor.md构建Markdown富文本编辑器
Editor.md构建Markdown富文本编辑器
下载- 行内公式用
$a^2 + b^2 = c^2$,独立公式用$$\int_0^\infty e^{-x}dx = 1$$(双美元符)(双美元符) - HTML 标签如
<img src="logo.png" width="80">可以直接写,但不能混在一起 Markdown 段落中间-整段要么纯要么纯 Markdown,要么纯 HTML 块 - 如果用了
<p><p>...</p></p>,记住要关闭标签,否则以后再关闭标签。 Markdown 可能是错位渲染 - 想让某段文本强行换行?不要只敲回车,最后加两个空间,也不要用
<br>(更可靠)
Jupyter 原生不支持自动生成目录(TOC),所谓的“目录”实际上是由第三方扩展实现的,例如 jupyter_nbextensions_configurator。
- 在没有扩展的情况下,写
[TOC]或[toc]纯无效字符串,不会渲染成导航 - 安装扩展后,需要在 Notebook 左侧菜单点
Add notebook ToC cell,它会插入一个特殊的 HTML+JS 单元格,不是手动写的 Markdown - 依赖目录级别
#到######但是,如果标题中含有标题语法,_、*锚点链接在未转换字符时可能会断裂 - 导出为 HTML 后目录仍然可用,但导出 PDF 时 TOC 需通过
nbconvert --to pdf --no-paginate配合 LaTeX 模板才生效
真正的麻烦不是语法本身,而是语法本身。 Markdown 单元格和 Code 单元格的类型混淆,渲染时机错位,以及当地路径和导出场景之间的行为差异——如果不再次验证这些细节,很容易认为“如果你写对了,就没有效果”。