Github 使用 MathJax 在 Colab 笔记本中渲染 bash 脚本,但它不应该

问题描述 投票:0回答:1

我的 Google Colab 笔记本中有一个单元格,保存在 github 存储库中。该笔记本和其他一些笔记本中的某些单元在 github 浏览中未正确呈现。

单元格的实际代码是:

!redis-cli $REDIS_CONN PING
!redis-cli $REDIS_CONN SET hello world
!redis-cli $REDIS_CONN GET hello

但是随后它在 GitHub 视图中渲染 就搞砸了(见下图)。

问题出在 github 视图上 - 本地 git 克隆或“在 colab 中打开”后的实际代码仍然可以。

原始文件是通过 Colab 在 Github 中创建的 -> 将副本保存到 Github,但在我使用 VSCode 本地更改代码并提交更改后仍然存在。

我在这里做错了什么或者有任何解决方法可以使其正确渲染吗?

更新: 经过一番挖掘,两个美元符号之间的字符串似乎被解释为数学表达式,并由 GitHub 预览版使用 MathJax 进行渲染。实际上,您可以右键单击错误渲染的部分,它将显示 MathJax 菜单。所以问题就变成了:

如何在 GitHub 笔记本预览中选择性禁用 MathJax 渲染?

github jupyter-notebook google-colaboratory mathjax
1个回答
0
投票

首先检查单元格的元数据将其指定为代码单元格:

{
 "cell_type": "code",
 "metadata": {},
 "source": [
  "!redis-cli $REDIS_CONN PING\n",
  "!redis-cli $REDIS_CONN SET hello world\n",
  "!redis-cli $REDIS_CONN GET hello\n"
 ]
}

并尝试使用三个反引号:在某些 Markdown 渲染器中,用三个反引号封装代码并指定语言可以帮助正确渲染。

```bash
!redis-cli $REDIS_CONN PING
!redis-cli $REDIS_CONN SET hello world
!redis-cli $REDIS_CONN GET hello
```

为了测试,您还可以尝试将 bash 命令分离到单独的代码单元中,看看这是否有助于渲染:

Cell 1:
!redis-cli $REDIS_CONN PING

Cell 2:
!redis-cli $REDIS_CONN SET hello world

Cell 3:
!redis-cli $REDIS_CONN GET hello

其他一些建议:

您可以尝试使用

&&
将命令合并到一行中,这是在一行中执行多个命令的 shell 命令。

!redis-cli $REDIS_CONN PING && redis-cli $REDIS_CONN SET hello world && redis-cli $REDIS_CONN GET hello

在你的笔记本中,它看起来像:

{
  "cell_type": "code",
  "execution_count": 6,
  "metadata": {
    "colab": {
      "base_uri": "https://localhost:8080/"
    },
    "id": "6FFP3eCRBTzk",
    "outputId": "4b27822f-fd36-4392-cfb5-4edee6050c55"
  },
  "outputs": [
    {
      "name": "stdout",
      "output_type": "stream",
      "text": [
        "PONG\n",
        "OK\n",
        "\"world\"\n"
      ]
    }
  ],
  "source": [
    "!redis-cli $REDIS_CONN PING && redis-cli $REDIS_CONN SET hello world && redis-cli $REDIS_CONN GET hello"
  ]
}

如果渲染问题仍然存在,并且可以接受,您可以考虑将 bash 命令移至外部 bash 脚本,然后从笔记本调用该脚本。

# save as commands.sh
redis-cli $REDIS_CONN PING
redis-cli $REDIS_CONN SET hello world
redis-cli $REDIS_CONN GET hello

在你的笔记本中:

!bash commands.sh

或者:您可以在单元格开头使用

!
魔术命令,而不是使用
%%bash
运行 bash 命令。这样,GitHub 就可以正确呈现单元格内容,因为它被显式标记为 bash 代码。

{
 "cell_type": "code",
 "metadata": {...},
 "source": [
  "%%bash\n",
  "redis-cli $REDIS_CONN PING\n",
  "redis-cli $REDIS_CONN SET hello world\n",
  "redis-cli $REDIS_CONN GET hello\n"
 ]
}

检查(以防万一)在单元格开头添加 HTML 注释是否有助于解决渲染问题。

{
 "cell_type": "code",
 "metadata": {...},
 "source": [
  "<!-- Bash Commands -->\n",
  "!redis-cli $REDIS_CONN PING\n",
  "!redis-cli $REDIS_CONN SET hello world\n",
  "!redis-cli $REDIS_CONN GET hello\n"
 ]
}

由于将命令拆分为单独的单元格并不是理想的解决方案,并且 GitHub 的渲染问题仍然存在,因此解决方法可能是使用外部渲染服务,例如 Jupyter 的 nbviewer。您可以在 GitHub 上的 README.md 文件顶部添加一个徽章,链接到笔记本的 nbviewer 渲染。

[![nbviewer](https://img.shields.io/badge/render-nbviewer-orange.svg)](https://nbviewer.jupyter.org/github/antonum/Redis-Workshops/blob/3d9084ac3f43348ea2a32c5c5265c32afe91e4cf/00-Setup/00-Setup_Redis_Workshops.ipynb)

单击徽章将使查看者看到正确渲染的笔记本版本。

© www.soinside.com 2019 - 2024. All rights reserved.