9  如何在 Quarto 中优雅地展示 .ipynb 文件?

ChatGPT 对话

在撰写 Quarto 教学材料或公开笔记时,我们经常会附上 Jupyter Notebook 文件(.ipynb)供读者参考。然而,直接使用相对路径链接往往导致显示异常,影响阅读体验。

9.1 问题:原始 .ipynb 显示效果很糟

最常见的做法是使用如下相对路径:

[点击查看原始 .ipynb 文件](../examples/sample_notebook_python.ipynb)

链接虽然有效,但 Quarto 渲染后,读者点击跳转的是 .ipynb 文件的原始 JSON 内容,页面混乱难读:

{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "7c5e1f3e",
   "source": ["## 标题", "第一段说明"]
  },
  ...

这并不是一个理想的展示方式。

9.2 Good 1:用 GitHub 的仓库链接

GitHub 提供了对 .ipynb 文件的原生支持,能将其渲染为结构化、可阅读、可复制的 notebook 页面,非常适合教学阅读与代码学习。推荐链接格式如下:

[点击查看 notebook](https://github.com/lianxhcn/research_with_AI/blob/main/examples/sample_notebook_python.ipynb)

读者点击后会看到类似 Jupyter Lab 的网页视图,代码、Markdown 和输出完整呈现,体验良好。

缺点是默认字体不是等宽字体,导致代码的排版,尤其是对齐效果不佳。

9.3 Good 2:使用 nbviewer 进行在线预览

如果你希望 notebook 的展示界面更加简洁、无干扰,可以使用 nbviewer.org 提供的免费服务。只需将 GitHub 上的 .ipynb 链接粘贴进去,即可获得更清爽的预览链接:

[在线预览 notebook](https://nbviewer.org/github/lianxhcn/research_with_AI/blob/main/examples/sample_notebook_python.ipynb)

nbviewer 的亮点 包括:

  • 页面专注,仅保留 notebook 主体内容
  • 加载稳定,兼容性好,适合公开教学资料
  • 无需额外插件,直接生成纯 HTML 页面
  • 由 Project Jupyter 官方支持,长期稳定

适用于希望发布静态网站、课程材料或展示成果时提供「无 GitHub 视觉干扰」的 notebook 预览。

下图对比了 GitHub 渲染nbviewer 预览 的差异:

此外,nbviewer 还支持多种其他功能,如:

  • 直接从 URL 加载 notebook
  • 支持多种渲染主题
  • 在线执行代码

9.4 仅提供源文件下载?

若你希望读者能下载 notebook 文件进行本地运行,则可以保留相对路径链接,但务必提示读者「右键另存为」,防止误点后进入 JSON 混乱页面。如下写法更稳妥:

[下载原始 .ipynb 文件](../examples/sample_notebook_python.ipynb) ←(右键另存为)

并配合一个提示框:

::: {.callout-warning title="注意"}

此链接指向的是 `.ipynb` 原始文件(JSON 格式),直接点击可能乱码。   

建议:右键另存为以下载文件。

:::

9.5 总结:三种场景推荐链接

使用目的 推荐链接方式 示例格式
在线阅读 GitHub 渲染视图 github.com/.../xxx.ipynb
清爽展示 nbviewer 在线预览 nbviewer.org/github/.../xxx.ipynb
下载使用 相对路径 + 提示说明 ../examples/xxx.ipynb