图片和图表#

图片#

MyST Markdown 提供了几种不同的语法,用于在文档中插入图片,如下所述。

首先是标准的 Markdown 语法,通过这种方式:

![fishy](../images/fun-fish.png)

会产生:

fishy

这会将图片正确复制到构建文件夹,并在所有输出格式(HTML、TeX 等)中渲染它。然而,它在可配置性方面有限制。例如,无法通过这种语法设置图片的宽度。

正如在这一节中讨论的,MyST 允许使用如 imagefigure 这样的指令(参见 Sphinx 文档了解可用选项)。

例如:

```{image} ../images/fun-fish.png
:alt: fishy
:class: bg-primary mb-1
:width: 200px
:align: center
```

将包含以下 自定义 图片:

fishy

这些指令允许你使用指令参数控制图片的各个方面。

原始 HTML 图片#

上述图片语法提供了更多的自定义性,但请注意,这种语法在常见的 Markdown 查看器(例如在 GitHub 上查看文件时)中不会显示图片。

一种解决方法是直接使用 HTML,而 MyST 可以通过 html_image 扩展直接解析 HTML 图片。

Warning

使用原始 HTML 通常是一个糟糕的选择(参见此解释),所以在这样做之前要小心!

要解析原始 HTML 图片语法,请在 _config.yml 中的扩展列表中启用 html_image 扩展:

parse:
  myst_enable_extensions:
    # 不要忘记列出你想要启用的其他扩展,
    # 包括那些默认启用的扩展!参见这里:https://jupyterbook.org/en/stable/customize/config.html
    - html_image

HTML 图片将被解析为任何其他图片。例如:

<img src="../images/fun-fish.png" alt="fishy" class="bg-primary" width="200px">

将正确渲染:

fishy

这也将在 PDF LaTeX 构建中输出!

允许的属性与 image 指令相同:srcaltclasswidthheight。任何其他属性将被忽略。

支持的图片格式#

标准的光栅化图片格式,如 .pngjpg,对 HTML 和 LaTeX/PDF 输出格式都支持。相比之下,矢量格式如 .svg.pdf.eps 通常是构建器特定的。参见每个 Sphinx 构建器的 supported_image_types 规范这里

为了支持多个构建器,Jupyter Book 允许你使用 * 星号作为扩展名。例如,对于 HTML:

<img src="../images/fun-fish.*" alt="fishy" class="bg-primary mb-1" width="200px">

所有匹配所提供模式的图片将被搜索,每个构建器从可用候选中选择最佳图片。

上述代码生成了以下图片:

fishy

你可以使用像 imagemagick 这样的工具,在构建你的书之前将图片转换为多种格式。

或者,你可能希望查看这些 Sphinx 扩展:

图表#

MyST Markdown 还允许你在页面中包含 图表。图表类似于图片,但它们更容易在书的其他地方引用,并且包含如标题等内容。要包含一个图表,使用以下语法:

```{figure} ../images/C-3PO_droid.png
---
height: 150px
name: directive-fig
---
这是我的图表标题!
```

这将产生以下内容:

../_images/C-3PO_droid.png

Fig. 2 这是我的图表标题!#

Note

你还可以包含由笔记本中的代码生成的图表。 要做到这一点,参见 content:executable:output-insert

Markdown 图表#

Markdown 图表结合了冒号样式提示HTML 图片解析,以产生一种“Markdown 友好”的图表语法,其行为与上述 figure 指令相同。

Note

使用此功能需要启用 HTML 图片解析

图表块必须 包含两个组件;一个图片,可以是 Markdown 或 HTML 语法,以及一个用于标题的段落。请参见下面的示例。

与提示一样,图表可以设置额外的类。 警告的“标题”用作可由交叉引用定位的标签。

例如,代码

:::{figure-md} markdown-fig
<img src="../images/fun-fish.png" alt="fishy" class="bg-primary mb-1" width="200px">

这是一个用 **Markdown** 编写的标题!
:::

生成以下图片:

fishy

Fig. 3 这是一个用 Markdown 编写的标题!#

正如我们在这里看到的,我们可以引用该图片:

去看看鱼!

我们只需使用警告的标题作为目标:

[去看看鱼!](markdown-fig)

引用图片#

然后你可以通过使用 {ref} 角色或 Markdown 风格的引用方式来引用你的图片,例如:

- {ref}`directive-fig`
- [](markdown-fig)

这将用图片标题替换引用,如下所示:

编号引用#

另一种创建交叉引用的便捷方式是使用 {numref} 角色,它通过对象自动获得的编号来引用它们。例如,{numref}`directive-fig` 将产生如下引用:Fig. 2

如果提供了明确的文本,此标题将作为引用的标题。例如,

- {ref}`飞向机器人 <directive-fig>`
- [游向鱼](markdown-fig)

产生以下交叉引用:

使用 numref,你还可以单独访问图片编号和标题:序列 “%s” 和 “{number}” 将被替换为图片编号,而 “{name}” 将被替换为图片标题。

例如,{numref}`图 {number}: {name} <directive-fig>` 将产生 图 2: 这是我的图表标题!

图片或表格列表#

如果你正在撰写如论文或书籍等大型文档,创建 LaTeX 构建输出中的 图片列表 或“表格列表”索引可能会有用。目前默认情况下无法实现这一点,因为图片/表格标题中不支持“短标题”。不过,可以参考 此 GitHub 评论 了解解决方法。

边距标题和图片#

你可以使用 :figclass: margin-caption 在边距中包含图片标题,如 Fig. 4 所示:

../_images/cool.jpg

Fig. 4 这是我的图片标题!#

另一种选择是使用 :figclass: margin 在边距中包含图片,如 Fig. 5 所示:

../_images/cool.jpg

Fig. 5 这是我的图片标题!#

图片缩放和对齐#

图片也可以通过使用选项 :align: right:align: left 来对齐。默认情况下,图片居中对齐(见 Fig. 2)。

要将图片左对齐,你可以写

```{figure} ../images/cool.jpg
---
scale: 50%
align: left
---
这是我的图片标题!
```

得到

../_images/cool.jpg

Fig. 6 这是我的图片标题!#

同样,如果你写

```{figure} ../images/cool.jpg
---
scale: 50%
align: right
---
这是我的图片标题!
```

你的图片将右对齐:

../_images/cool.jpg

Fig. 7 这是我的图片标题!#

图片参数#

支持以下选项:

scale : 整数百分比

均匀缩放图片。默认值为“100”,表示无缩放。符号“%”是可选的。

width : 长度或百分比

你可以用以下单位设置图片宽度:“em”、“ex”、“px”、“in”、“cm”、“mm”、“pt”、“pc”、“%”。

height : 长度

你可以用以下单位设置图片高度:“em”、“ex”、“px”、“in”、“cm”、“mm”、“pt”、“pc”。

alt : 文本

如果图片无法显示或读者使用辅助技术时显示的文本。通常包含图片的简短描述。

align : “left”, “center”, 或 “right”

将图片左对齐、居中或右对齐。默认对齐方式为居中。

name : 文本

图片的唯一标识符,你可以使用 {ref}{numref} 角色引用它。不能包含空格或特殊字符。

figclass : 文本

图片的类属性值,可用于添加自定义 CSS 或 JavaScript。预定义选项包括:

  • “margin” : 在边距中显示图片

  • “margin-caption” : 在边距中显示图片标题