---
title: Liii STEM TikZ 绘图插件教程
description: Liii STEM TikZ 插件完整教程，涵盖基础绘图，函数图像，交换图，费曼图，化学结构，流程图，神经网络图等场景。
keywords: Liii STEM, TikZ, 绘图, 插件, 教程, 交换图, 费曼图, 流程图
---

> ## Documentation Index
> Fetch the complete documentation index at: https://liiistem.cn/docs/llms.txt
> Use this file to discover all available pages before exploring further.


# TikZ 绘图插件完全指南

Liii STEM 内置 TikZ 绘图引擎，可直接在文档中插入 TikZ 会话并实时渲染矢量图形。

> 此功能仅 Liii STEM v2026.2.7 之后的版本支持。Liii STEM 内点击 `帮助` -> `欢迎` 可查看版本信息。

## 0 LaTeX 安装

Liii STEM 的 TikZ 插件需要本地 $\LaTeX$ 环境支持。按操作系统选择安装方式。

### macOS

macOS 通过 Homebrew 安装 MacTeX 最为便捷。若尚未安装 Homebrew，在终端执行：

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

Homebrew 就绪后，执行：

```bash
brew install --cask mactex
```

安装包体积约 4 GB，耗时取决于网络状况。安装完成后重启 Liii STEM，TikZ 插件即可使用。

> 可以在终端中输入 `which pdflatex` 验证是否安装成功。

> MacTeX 包含完整 TikZ 宏包及常用库，无需额外配置。

### Windows

Windows 目前只支持加载装在 `C` 盘 `Program files` 里的 `MiKTeX`。且由于Windows版本和系统语言的问题有时会无法加载，用户请自行解决。

> 付费用户之后可以享受 TikZ 云服务，无需安装。

## 1 基本概念

### 1.1 插入 TikZ 内容

Liii STEM 提供三种方式插入 TikZ 内容，分别适用于不同的使用场景。

**方式一：TikZ 会话（推荐）**

点击模式工具栏 `插入会话` → `TikZ`，或按 `\` 输入 `\tikz` 后回车，进入 TikZ 会话环境。输入代码后按 `Shift`+`Enter` 换行，`Enter` 执行并渲染。

| 操作           | 方式                           |
| -------------- | ------------------------------ |
| 插入 TikZ 会话 | 模式工具栏 `插入会话` → `TikZ` |
| 命令插入       | `\tikz`                        |
| 换行不执行     | `Shift`+`Enter`                |
| 执行渲染       | `Enter`                        |

与在 $\LaTeX$ 中编写 TikZ 代码不同，Liii STEM 的会话系统支持**增量式交互**：修改代码后按 `Enter` 即可局部重新渲染，无需像 $\LaTeX$ 那样全文档编译等待。关于会话系统的完整机制（字段编辑，折叠，全部求值等）请参阅 [《Liii STEM 作为统一接口：支持 Python，AI 及多语言计算环境》](guide-computing-environments.md)。

> **重要提示（会话依赖性差异）**：与 Python 等支持变量、状态上下传递的计算会话不同，TikZ 的会话字段（Session Fields）在底层是作为**独立图片**编译与渲染的。不同 TikZ 会话字段之间**不存在上下依赖关系**（一个字段内定义的坐标或对象无法在另一个字段中被直接引用）。因此，每个 TikZ 会话字段内输入的代码都应当是完整且独立的绘图指令。

**方式二：可执行切换**

点击 `插入` → `折叠` → `可运行`，选择 TikZ 语言，即可在文档正文中插入一个可折叠的 TikZ 代码块。执行后源码会被隐藏，通过 `Ctrl` + `*` 或点击焦点工具栏可在源码与渲染结果之间反复切换。这种方式适合在段落中嵌入小型图形，不占用独立会话区域。详细用法请参阅 [《Liii STEM 作为统一接口》的 2.1 节](guide-computing-environments.md#21-可执行切换)。

**方式三：静态代码块**

若仅需展示 TikZ 源码而不执行渲染，输入 `\code` 后回车，或点击 `插入` → `程序` → `代码块` 并选择语言。代码块保留语法高亮与缩进，但不生成图形输出。如需显示行号，将代码块置于 `\listing` 环境内即可。详细用法请参阅 [《文本模式完全指南》的 7.1 节](base-editing/guide-text-mode.md#71-代码块)。

**语法与编译对比**

与在 $\LaTeX$ 中使用 TikZ 相比，Liii STEM 不仅消除了繁琐的编译等待（实时交互渲染），更在**语法层级**上进行了大幅简化。在 $\LaTeX$ 中，即便只是画一个简单的圆，也必须编写包含文档类型声明、引入宏包、建立 `document` 与 `tikzpicture` 环境等多行样板代码。而在 Liii STEM 的 TikZ 插件中，你只需直接输入单行绘图指令即可（例如 `\draw (0,0) circle (1);`，其中 `(0,0)` 是圆心坐标，`circle` 是绘制圆的几何算子，括号中的 `(1)` 指定圆的半径为 1 厘米）。

<div align="center">

| Liii STEM 中的极简写法                                                                                                                                                                                                                                                                    | 标准 LaTeX 中的繁琐写法                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <pre style="background: #1e1e1e; padding: 10px; border-radius: 5px; text-align: left; margin: 0; font-family: Consolas, Monaco, monospace; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\draw</span> (0,0) circle (1);</code></pre> | <pre style="background: #1e1e1e; padding: 10px; border-radius: 5px; text-align: left; margin: 0; font-family: Consolas, Monaco, monospace; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\documentclass</span>{standalone}<br><span style="color: #569cd6;">\usepackage</span>{tikz}<br><span style="color: #569cd6;">\begin</span>{document}<br><span style="color: #569cd6;">\begin</span>{tikzpicture}<br> <span style="color: #569cd6;">\draw</span> (0,0) circle (1);<br><span style="color: #569cd6;">\end</span>{tikzpicture}<br><span style="color: #569cd6;">\end</span>{document}</code></pre> |

</div>

### 1.2 路径与坐标

TikZ 的核心是**路径**（path）。路径是由直线段和曲线段连接而成的几何序列，通过 `\draw` 等命令绘制。所有路径都从坐标开始。

坐标默认以厘米为单位。原点在图形的左下角，向右为 $x$ 轴正方向，向上为 $y$ 轴正方向。TikZ 支持以下五种核心坐标形式与闭合路径操作：

<div align="center">

| **1. 直角坐标 (Cartesian)**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | **2. 极坐标 (Polar)**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | **3. 相对坐标 (Relative)**                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| <img src="../images/tikz/coord-cartesian.png" alt="直角坐标示例" style="max-height: 150px; display: block; margin: 0 auto 10px auto;"><pre style="background: #1e1e1e; padding: 6px; border-radius: 4px; font-size: 11px; margin: 0; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\draw</span>[step=1, gray!20, thin] (0,0) grid (2,2);<br><span style="color: #569cd6;">\draw</span>[thick, blue] (0,0) -- (1,2);</code></pre>                                                                    | <img src="../images/tikz/coord-polar.png" alt="极坐标示例" style="max-height: 150px; display: block; margin: 0 auto 10px auto;"><pre style="background: #1e1e1e; padding: 6px; border-radius: 4px; font-size: 11px; margin: 0; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\draw</span>[gray!20, thin] (0,0) circle (1) circle (2);<br><span style="color: #569cd6;">\draw</span>[thick, red] (0,0) -- (30:2);</code></pre>                                                                                                                                                                                                                                                                                                                                                              | <img src="../images/tikz/coord-relative.png" alt="相对坐标示例" style="max-height: 150px; display: block; margin: 0 auto 10px auto;"><pre style="background: #1e1e1e; padding: 6px; border-radius: 4px; font-size: 11px; margin: 0; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\draw</span>[step=1, gray!20, thin] (0,0) grid (2,2);<br><span style="color: #569cd6;">\draw</span>[thick, violet] (0,0) -- ++(1,0)<br> -- ++(0,1);</code></pre> |
| **4. 命名节点 (Node)**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | **5. 交点 (Intersection)**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | **6. 闭合路径 (cycle)**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| <img src="../images/tikz/coord-node.png" alt="命名节点示例" style="max-height: 150px; display: block; margin: 0 auto 10px auto;"><pre style="background: #1e1e1e; padding: 6px; border-radius: 4px; font-size: 11px; margin: 0; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\node</span>[draw, circle] (A) at (0,0) {A};<br><span style="color: #569cd6;">\node</span>[draw, rectangle] (B) at (2,0) {B};<br><span style="color: #569cd6;">\draw</span>[->, thick, teal] (A) -- (B);</code></pre> | <img src="../images/tikz/coord-intersection.png" alt="交点示例" style="max-height: 150px; display: block; margin: 0 auto 10px auto;"><pre style="background: #1e1e1e; padding: 6px; border-radius: 4px; font-size: 11px; margin: 0; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\coordinate</span> (A) at (0,0);<br><span style="color: #569cd6;">\coordinate</span> (B) at (2,2);<br><span style="color: #569cd6;">\coordinate</span> (C) at (0,2);<br><span style="color: #569cd6;">\coordinate</span> (D) at (2,0);<br><span style="color: #569cd6;">\draw</span>[gray, thin] (A) -- (B);<br><span style="color: #569cd6;">\draw</span>[gray, thin] (C) -- (D);<br><span style="color: #569cd6;">\filldraw</span>[red] (intersection of A--B<br> and C--D) circle (2pt);</code></pre> | <img src="../images/tikz/coord-cycle.png" alt="闭合路径示例" style="max-height: 150px; display: block; margin: 0 auto 10px auto;"><pre style="background: #1e1e1e; padding: 6px; border-radius: 4px; font-size: 11px; margin: 0; color: #d4d4d4;"><code style="color: #d4d4d4; font-family: inherit;"><span style="color: #569cd6;">\draw</span>[step=1, gray!20, thin] (0,0) grid (2,2);<br><span style="color: #569cd6;">\draw</span>[thick, blue] (0,0) -- (1,0)<br> -- (1,1) -- cycle;</code></pre> |

</div>

各部分代码细节解析与说明：

| 坐标/路径形式 | 示例语法                | 细节解析与作用说明                                                           |
| :------------ | :---------------------- | :--------------------------------------------------------------------------- |
| **直角坐标**  | `(1,2)`                 | 标准二维笛卡尔坐标系统，单位默认为厘米。表示 $x=1$, $y=2$ 的坐标点。         |
| **极坐标**    | `(30:2)`                | 格式为 `(角度:半径)`。以 $30^\circ$ 方向、距离起点 2 厘米定位的坐标点。      |
| **相对坐标**  | `++(1,0)`               | 坐标前缀 `++` 指示当前坐标是相对于上一个已知坐标点的位移增量。               |
| **命名节点**  | `(A)`                   | 引用已命名节点的几何边界中心。常用于在其间连线且箭头自动终止于节点轮廓边缘。 |
| **交点**      | `(intersection of ...)` | 线段相交算子。指示 TikZ 自动计算并返回两已知线段在空间中的几何交点坐标。     |
| **闭合路径**  | `cycle`                 | 路径闭合算子。指示折线自动连线回到路径的起点，构成封闭的完美多边形。         |

### 1.3 绘图命令

TikZ 提供多种路径操作命令，均以反斜杠 `\` 开头：

| 命令        | 作用             | 示例                                    |
| ----------- | ---------------- | --------------------------------------- |
| `\draw`     | 绘制路径         | `\draw (0,0) -- (1,0);`                 |
| `\fill`     | 填充封闭区域     | `\fill[blue!20] (0,0) rectangle (1,1);` |
| `\filldraw` | 绘制并填充       | `\filldraw[red] (0,0) circle (0.5);`    |
| `\node`     | 放置文本节点     | `\node at (0,0) {A};`                   |
| `\path`     | 构造路径但不绘制 | `\path (0,0) -- (1,0);`                 |

每个命令后的方括号 `[...]` 为可选参数，用于指定颜色、线型、箭头、填充等属性：

```latex
\draw[red, thick, ->] (0,0) -- (1,0);
\fill[blue!30] (0,0) circle (0.5);
```

<p align="center">
  <img src="../images/tikz/draw-fill.png" alt="绘制与填充" style="width: 20%;">
</p>

各部分代码细节解析与说明：

| 命令 / 参数  | 对应代码元素     | 作用说明                                                                              |
| :----------- | :--------------- | :------------------------------------------------------------------------------------ |
| **线条颜色** | `red`            | 指定绘制线条的颜色为红色。                                                            |
| **线条粗细** | `thick`          | 指定线条粗细属性为“粗线”（TikZ 支持 `thin`、`thick`、`very thick` 等粗细层级）。      |
| **终点箭头** | `->`             | 指示在路径的终点处（这里是右侧终点）绘制一个指向箭头。                                |
| **绘制路径** | `(0,0) -- (1,0)` | 绘制一条从起点 `(0,0)` 到终点 `(1,0)` 的直线。                                        |
| **填充命令** | `\fill`          | 指示填充封闭几何图形内部区域的命令。                                                  |
| **填充颜色** | `blue!30`        | 设定填充色为 $30\%$ 浓度的蓝色（即 $30\%$ 蓝色与 $70\%$ 白色的均匀混合）。            |
| **圆形算子** | `circle (0.5)`   | 以其左侧相邻坐标 `(0,0)` 为圆心，绘制半径为 `0.5` 厘米的圆。其中 `0.5` 代表圆的半径。 |

### 1.4 节点

**节点**（node）是 TikZ 中放置文本和构建结构化图形的基本单元。节点可被命名、定位，并作为路径的连接端点。

```latex
\node[draw, circle] (A) at (0,0) {$A$};
\node[draw, rectangle] (B) at (2,0) {$B$};
\draw[->] (A) -- (B);
```

<p align="center">
  <img src="../images/tikz/basic-nodes.png" alt="节点与连接" style="width: 20%;">
</p>

各部分代码细节解析：

- `\node[draw, circle] (A) at (0,0) {$A$};`：放置一个命名的文本节点。
  - `draw`：指示绘制该节点的外部轮廓边框线。
  - `circle`：指定边框轮廓形状为圆形。
  - `(A)`：为该节点指定唯一标识名称 `A`，便于后续直接引用。
  - `at (0,0)`：指定节点的中心定位在坐标 `(0,0)`。
  - `{$A$}`：节点中显示的文本内容（支持数学公式）。
- `\draw[->] (A) -- (B);`：在节点之间画一条带箭头的连接直线。TikZ 会自动计算圆形节点 `A` 与矩形节点 `B` 的轮廓边界，并使箭头的起终点交汇在它们的外边缘，无需手动测算。

节点拥有**锚点**（anchor）系统，用于精确定位。常见锚点包括 `center`、`north`、`south`、`east`、`west`、`north east`、`south west` 等。使用 `node[above]` 等价于 `node[anchor=south]`。

| 定位参数      | 锚点等效            | 说明             |
| ------------- | ------------------- | ---------------- |
| `above`       | `anchor=south`      | 节点位于坐标上方 |
| `below`       | `anchor=north`      | 节点位于坐标下方 |
| `left`        | `anchor=east`       | 节点位于坐标左侧 |
| `right`       | `anchor=west`       | 节点位于坐标右侧 |
| `above right` | `anchor=south west` | 右上方           |

### 1.5 库与扩展

TikZ 的基础功能通过**库**（library）扩展，使用 `\usetikzlibrary{库名}` 导入。此外，`\usepackage{包名}` 语法可用于加载完整宏包（如 `chemfig`）。macOS 的 MacTeX 发行版通常已包含常用库；Windows 的 MiKTeX 在首次使用时会自动下载缺失的库，无需手动安装。

| 库名                       | 功能                               |
| -------------------------- | ---------------------------------- |
| `shapes.geometric`         | 几何形状：菱形，星形，梯形，三角形 |
| `shapes.symbols`           | 符号形状：云形，信号形，矩形十字   |
| `arrows.meta`              | 现代箭头样式（推荐）               |
| `calc`                     | 坐标计算                           |
| `positioning`              | 相对定位                           |
| `decorations.pathmorphing` | 路径变形：波浪线，螺旋线，随机步   |
| `matrix`                   | 矩阵节点布局                       |

## 2 基础绘图

### 2.1 点，线与封闭图形

| 指令                                        | 效果                                 |
| ------------------------------------------- | ------------------------------------ |
| `\draw (0,0);`                              | 在坐标原点绘制一个点                 |
| `\draw (0,0) -- (1,0);`                     | 从 $(0,0)$ 到 $(1,0)$ 画一条线段     |
| `\draw (0,0) rectangle (3,2);`              | 以 $(0,0)$ 和 $(3,2)$ 为对角绘制矩形 |
| `\draw (1,1) circle (0.5);`                 | 以 $(1,1)$ 为圆心，$0.5$ 为半径画圆  |
| `\draw (0,0) -- (2,0) -- (1,1.5) -- cycle;` | 绘制三角形并自动闭合                 |

```latex
\draw (0,0) -- (2,0) -- (1,1.5) -- cycle;
```

<p align="center">
  <img src="../images/tikz/triangle.png" alt="三角形绘制" style="width: 20%;">
</p>

### 2.2 坐标系与网格

使用 `node` 可为坐标轴添加标签，`grid` 可绘制背景网格，`foreach` 可批量生成刻度。

```latex
\draw[->] (-2,0) -- (2,0) node[right] {$x$};
\draw[->] (0,-2) -- (0,2) node[above] {$y$};
\foreach \x in {-2,-1,0,1,2}
  \draw (\x,0.1) -- (\x,-0.1) node[below] {\x};
\foreach \y in {-2,-1,0,1,2}
  \draw (0.1,\y) -- (-0.1,\y) node[left] {\y};
```

<p align="center">
  <img src="../images/tikz/coordinate-system.png" alt="坐标系与刻度" style="width: 20%;">
</p>

| 指令                                           | 效果                                 |
| ---------------------------------------------- | ------------------------------------ |
| `\draw[->] (a,b) -- (c,d);`                    | 带箭头的线段                         |
| `node[right] {$x$}`                            | 在线段终点右侧标注 $x$               |
| `\draw[step=0.5, gray!30] (-2,-2) grid (2,2);` | 以 $0.5$ 为步长，$30\%$ 灰度绘制网格 |
| `\foreach \x in {0,30,...,330}`                | 以 $30$ 为步长循环 $0$ 到 $330$      |

### 2.3 函数图像

TikZ 的 `plot` 指令可直接绘制函数曲线。`domain` 指定定义域，`samples` 控制采样密度，`smooth` 启用平滑插值。

```latex
\draw[->] (-3,0) -- (3,0) node[right] {$x$};
\draw[->] (0,-2) -- (0,4) node[above] {$y$};
\draw[blue, domain=-2:2, smooth, variable=\x] plot ({\x}, {\x*\x});
\node[blue] at (1.5,2.5) {$y=x^2$};
```

<p align="center">
  <img src="../images/tikz/parabola.png" alt="抛物线 $y=x^2$" style="width: 20%;">
</p>

三角函数需使用弧度制，在函数参数后加 `r` 表示弧度。

```latex
\draw[->] (-3.5,0) -- (3.5,0);
\draw[->] (0,-2.5) -- (0,2.5);
\draw[red, domain=-pi:pi, smooth, samples=100, variable=\x] plot ({\x}, {sin(\x r)});
\draw[blue, domain=-pi:pi, smooth, samples=100, variable=\x] plot ({\x}, {cos(\x r)});
\node[red] at (2,0.5) {$\sin x$};
\node[blue] at (-2,0.8) {$\cos x$};
```

<p align="center">
  <img src="../images/tikz/trig-functions.png" alt="三角函数图像" style="width: 20%;">
</p>

| 参数          | 说明                         |
| ------------- | ---------------------------- |
| `domain=a:b`  | 定义域范围                   |
| `samples=n`   | 采样点数，数值越大曲线越平滑 |
| `smooth`      | 启用平滑曲线                 |
| `variable=\x` | 声明自变量                   |
| `{sin(\x r)}` | `r` 表示弧度制               |

#### 2.3.1 三维函数图像 (3D Surface Plots)

在 Liii STEM 中绘制精美的三维数学曲面，推荐使用基于 TikZ 构建的 $\LaTeX$ 标准绘图宏包 `pgfplots`。它提供了强大的三维网格、色差图及视角渲染能力。在会话顶部使用 `\usepackage{pgfplots}` 加载，并用 `\pgfplotsset{compat=1.18}` 保证兼容性。

**示例一：三维三角函数波动面 ($z = \sin(x)\cos(y)$)**

```latex
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{axis}[
    title={$z = \sin(x)\cos(y)$},
    colormap/viridis,
    view={60}{30},
    width=6.5cm, height=6.5cm
]
\addplot3[
    surf,
    domain=-3:3,
    domain y=-3:3,
    samples=20
] {sin(deg(x))*cos(deg(y))};
\end{axis}
```

<p align="center">
  <img src="../images/tikz/trig-3d-surface.png" alt="三维三角函数曲面" style="width: 40%;">
</p>

**示例二：三维旋转抛物面 ($z = x^2 + y^2$)**

```latex
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\begin{axis}[
    title={$z = x^2 + y^2$},
    colormap/hot,
    view={60}{30},
    width=6.5cm, height=6.5cm
]
\addplot3[
    surf,
    domain=-2:2,
    domain y=-2:2,
    samples=20
] {x^2 + y^2};
\end{axis}
```

<p align="center">
  <img src="../images/tikz/paraboloid-3d.png" alt="三维抛物曲面" style="width: 40%;">
</p>

各部分三维绘图参数解析：

| 参数 / 键             | 作用说明                                                                           |
| :-------------------- | :--------------------------------------------------------------------------------- |
| `\begin{axis}`        | 三维坐标轴容器环境，负责自动生成坐标框、标题及轴标签。                             |
| `\addplot3`           | 绘制三维曲线或网格表面的核心命令。                                                 |
| `surf`                | 指定绘制类型为三维彩色表面网格（Surface）。                                        |
| `colormap/viridis`    | 设定学术界通用的 Viridis 蓝绿黄高对比渐变色彩表。                                  |
| `colormap/hot`        | 设定 Hot 黑红黄白热量图渐变色彩表。                                                |
| `view={theta}{phi}`   | 设定相机的观测视角。`theta`（这里是 60）为水平旋转角，`phi`（这里是 30）为俯仰角。 |
| `domain` / `domain y` | 分别指定自变量 $x$ 和 $y$ 在三维空间中的采样定义域。                               |
| `deg(x)`              | 将弧度自变量 $x$ 转换为度数（因为 `pgfplots` 的 `sin` 等三角函数默认接受度数）。   |

### 2.4 极坐标与参数方程

TikZ 支持极坐标 `(angle:radius)` 和参数方程绘图。

```latex
\draw (0,0) circle (1);
\draw (0,0) circle (1.5);
\draw (0,0) circle (2);
\foreach \angle in {0,30,...,330}
  \draw (0,0) -- (\angle:2);
```

<p align="center">
  <img src="../images/tikz/polar-grid.png" alt="极坐标与同心圆" style="width: 20%;">
</p>

| 坐标形式 | 示例      | 说明                 |
| -------- | --------- | -------------------- |
| 直角坐标 | `(1,2)`   | 标准 $(x,y)$         |
| 极坐标   | `(30:1)`  | 角度 $30°$，半径 $1$ |
| 相对坐标 | `++(1,0)` | 相对于上一点的偏移   |

### 2.5 韦恩图与集合运算 (Venn Diagrams)

在离散数学和概率论中，韦恩图（Venn Diagrams）常用于可视化集合之间的交集、并集和补集关系。在 TikZ 中，可以通过在 `scope` 环境内使用 `\clip` 算子，非常精美地对交集区域进行高亮填充。

```latex
\begin{tikzpicture}
  % 1. 定义两个 overlapping 集合圈
  \def\circleA{(0,0) circle (1.2)}
  \def\circleB{(1.5,0) circle (1.2)}

  % 2. 使用 scope 裁剪出 A ∩ B 区域并填充颜色
  \begin{scope}
    \clip \circleA;
    \fill[red!30] \circleB;
  \end{scope}

  % 3. 绘制两个集合的圆形边界
  \draw[thick] \circleA node[left, xshift=-10pt] {$A$};
  \draw[thick] \circleB node[right, yshift=0pt] {$B$};

  % 4. 标注交集文本
  \node[font=\small] at (0.75,0) {$A \cap B$};
\end{tikzpicture}
```

<p align="center">
  <img src="../images/tikz/set-venn.png" alt="韦恩图与集合运算示意图" style="width: 40%;">
</p>

各部分图形与集合操作算子解析：

| 代码段 / 命令                   | 作用与含义                     | 绘图作用说明                                                                                    |
| :------------------------------ | :----------------------------- | :---------------------------------------------------------------------------------------------- |
| `\def\circleA{...}`             | 局部宏定义（Macro Definition） | 定义常用的几何元素（此处为圆），方便在后续填充和描边中复用，降低冗余。                          |
| `\begin{scope}` / `\end{scope}` | 局部绘图上下文环境             | 限制 `\clip` 裁剪指令的有效范围，保证裁剪操作不会影响 scope 外部的几何图形。                    |
| `\clip \circleA;`               | 裁剪剪切算子                   | 将当前的绘图有效区域限定在圆 $A$ 内部。后续的所有填充命令都只能在圆 $A$ 内生效。                |
| `\fill[red!30] \circleB;`       | 限定区域填充                   | 在被圆 $A$ 裁剪的区域内，对圆 $B$ 的范围填充 $30\%$ 浓度的浅红色，从而完美呈现交集 $A \cap B$。 |

### 2.6 几何多边形与角度标注 (Geometry & Angle Markings)

在初等几何与数理证明中，绘制带有顶点、边长、以及内角标注（带弧度或箭头）的三角形是最基础的教学画图需求。自 TikZ 3.0 起，推荐使用内置的 `angles` 与 `quotes` 库进行角和文字的智能标注，使得复杂的几何关系排版变得异常紧凑。

```latex
\usetikzlibrary{calc, angles, quotes}

% 1. 定义三角形的三个物理顶点坐标
\coordinate (A) at (0,0);
\coordinate (B) at (3.2,0);
\coordinate (C) at (1.0,2.2);

% 2. 绘制闭合多边形三角形主体
\draw[thick] (A) -- (B) -- (C) -- cycle;

% 3. 标注顶点的文本标签
\node[below left] at (A) {$A$};
\node[below right] at (B) {$B$};
\node[above] at (C) {$C$};

% 4. 使用 pic 自动计算并标记内角（由三点确定角，逆时针方向）
\pic [draw, ->, "$\alpha$", angle radius=15pt, angle eccentricity=1.2] {angle = B--A--C};
\pic [draw, -{Latex}, "$\beta$", angle radius=18pt, angle eccentricity=1.2] {angle = C--B--A};
```

<p align="center">
  <img src="../images/tikz/geom-triangle.png" alt="几何三角形角度标注原理图" style="width: 40%;">
</p>

各部分初等几何绘图算子与宏库解析：

| 命令与参数                        | 对应几何元素             | 作用说明                                                                                         |
| :-------------------------------- | :----------------------- | :----------------------------------------------------------------------------------------------- |
| `\usetikzlibrary{angles, quotes}` | 角度与引用标注库         | 引入专门处理几何角标注的 `angles` 库，以及支持用字符串引言直接标注文本的 `quotes` 库。           |
| `(A) -- (B) -- (C) -- cycle;`     | 顺次连线并闭合           | 连接三个端点，并通过 `cycle` 自动使终点闭合回起点 `(A)`，确保闭合拐角平滑美观。                  |
| `\pic [draw, ->, "$\alpha$"]`     | 绘制角标注图元（pic）    | 专门绘制内角圆弧的语法，`draw` 表示描边，`->` 表示带行进箭头，引号内包含要显示要显示的数学符号。 |
| `{angle = B--A--C}`               | 指定角的三点构成         | 表示以中间点 `A` 为顶点，由射线 $AB$ 与 $AC$ 所夹的逆时针角。顺序不能颠倒。                      |
| `angle radius=15pt`               | 内角圆弧半径             | 标注圆弧到顶点的距离尺寸。                                                                       |
| `angle eccentricity=1.2`          | 文字标签偏移度（离心率） | 控制角标签（如 $\alpha$）偏离圆弧中心的系数，`1.0` 表示刚好位于圆弧线上，大于 `1.0` 偏向外侧。   |

## 3 节点与形状库

### 3.1 基本节点样式

`\node` 用于放置文本或标记点，可附加 `draw`（描边），`fill`（填充），`circle`（圆形边界）等样式。

```latex
\node[draw, circle] at (0,0) {A};
\node[draw, rectangle] at (2,0) {B};
\draw[->] (0,0) -- (2,0);
```

<p align="center">
  <img src="../images/tikz/node-styles.png" alt="节点样式" style="width: 20%;">
</p>

| 样式参数             | 效果                     |
| -------------------- | ------------------------ |
| `draw`               | 显示边框                 |
| `fill=blue!20`       | 以 $20\%$ 浓度的蓝色填充 |
| `circle`             | 圆形边框                 |
| `rectangle`          | 矩形边框                 |
| `minimum width=2cm`  | 最小宽度                 |
| `minimum height=1cm` | 最小高度                 |

### 3.2 几何形状库

使用 `\usetikzlibrary{shapes.geometric}` 可加载扩展形状，包括菱形，星形，梯形等。

```latex
\usetikzlibrary{shapes.geometric}
\node[draw, circle] at (0,0) {A};
\node[draw, rectangle] at (2,0) {B};
\node[draw, diamond] at (1,1.5) {C};
\node[draw, star] at (3,1.5) {D};
\draw[->] (0,0) -- (2,0);
\draw[->] (2,0) -- (1,1.5);
```

<p align="center">
  <img src="../images/tikz/geometric-shapes.png" alt="几何形状" style="width: 20%;">
</p>

| 形状       | 参数                 |
| ---------- | -------------------- |
| 圆形       | `circle`             |
| 矩形       | `rectangle`          |
| 菱形       | `diamond`            |
| 星形       | `star`               |
| 椭圆形     | `ellipse`            |
| 等腰三角形 | `isosceles triangle` |
| 梯形       | `trapezium`          |

符号形状库 `shapes.symbols` 提供云形，信号形等特殊节点。

```latex
\usetikzlibrary{shapes.symbols}
\node[draw, cloud] at (0,0) {Cloud};
\node[draw, signal] at (2,0) {Signal};
```

<p align="center">
  <img src="../images/tikz/symbol-shapes.png" alt="符号形状" style="width: 20%;">
</p>

### 3.3 箭头与样式

`arrows.meta` 库提供现代箭头样式，`calc` 库支持坐标计算。

```latex
\usetikzlibrary{calc}
\usetikzlibrary{arrows.meta}
\draw[-{Stealth}] (0,0) -- (1,1);
\draw[-{Latex}] (0,1) -- (1,1);
\draw[-{Triangle}] (0,2) -- (1,2);
```

<p align="center">
  <img src="../images/tikz/arrow-styles.png" alt="箭头样式" style="width: 20%;">
</p>

| 箭头样式 | 代码          |
| -------- | ------------- |
| stealth  | `-{Stealth}`  |
| latex    | `-{Latex}`    |
| triangle | `-{Triangle}` |
| 双向箭头 | `<->`         |
| 右箭头   | `->`          |
| 左箭头   | `<-`          |

## 4 交换图

交换图用于表示范畴论或代数结构中的映射关系。使用 `arrows` 库并在节点之间绘制带标签的箭头。

```latex
\usetikzlibrary{arrows}
\node (A) at (0,2) {$A$};
\node (B) at (2,2) {$B$};
\node (C) at (0,0) {$C$};
\node (D) at (2,0) {$D$};
\draw[->] (A) -- node[above] {$f$} (B);
\draw[->] (A) -- node[left] {$g$} (C);
\draw[->] (B) -- node[right] {$h$} (D);
\draw[->] (C) -- node[below] {$k$} (D);
```

<p align="center">
  <img src="../images/tikz/commutative-diagram.png" alt="交换图" style="width: 20%;">
</p>

| 语法                                  | 效果                           |
| ------------------------------------- | ------------------------------ |
| `\node (A) at (0,2) {$A$};`           | 在 $(0,2)$ 定义名为 A 的节点   |
| `\draw (A) -- node[above] {$f$} (B);` | 从 A 到 B 画箭头，上方标注 $f$ |
| `node[midway, above]`                 | 箭头中点上方放置标签           |
| `node[near start, left]`              | 箭头起点附近左侧放置标签       |
| `node[near end, right]`               | 箭头终点附近右侧放置标签       |

复杂交换图可使用 `matrix` 库对节点进行网格布局。

```latex
\usetikzlibrary{matrix}
\matrix (m) [matrix of math nodes, row sep=2em, column sep=2em] {
  A & B \\
  C & D \\
};
\draw[->] (m-1-1) -- node[above] {$f$} (m-1-2);
\draw[->] (m-1-1) -- node[left] {$g$} (m-2-1);
\draw[->] (m-1-2) -- node[right] {$h$} (m-2-2);
\draw[->] (m-2-1) -- node[below] {$k$} (m-2-2);
```

<p align="center">
  <img src="../images/tikz/matrix-diagram.png" alt="矩阵布局交换图" style="width: 20%;">
</p>

## 5 费曼图

费曼图（Feynman Diagrams）是粒子物理学中描述粒子相互作用的重要工具。在 TikZ 中，费曼图的绘制依赖于 `decorations.pathmorphing` 路径变形库，它可以将直线变形为波浪线（光子/弱玻色子）、螺旋线（胶子）等不同类型的传播子。

### 5.1 基础示例：电子-缪子散射 (Photon Exchange)

这是最基本的费曼图，展示电子和缪子通过交换一个虚拟光子 ($\gamma$) 进行散射。

```latex
\usetikzlibrary{decorations.pathmorphing}
\draw[thick] (-2,1) -- (0,0) node[midway, above left] {$e^-$};
\draw[thick] (-2,-1) -- (0,0) node[midway, below left] {$e^+$};
\draw[thick, decorate, decoration=snake] (0,0) -- (2,0) node[midway, above] {$\gamma$};
\draw[thick] (2,0) -- (4,1) node[midway, above right] {$\mu^-$};
\draw[thick] (2,0) -- (4,-1) node[midway, below right] {$\mu^+$};
```

<p align="center">
  <img src="../images/tikz/feynman.png" alt="费曼图" style="width: 40%;">
</p>

### 5.2 进阶示例一：夸克-胶子辐射 (Gluon Emission)

强相互作用中的胶子传播子通常使用紧密的螺旋线（Coil）来表示。可以使用 `aspect`（纵横比）、`amplitude`（振幅）和 `segment length`（段长）微调螺旋线的紧密程度。

```latex
\usetikzlibrary{decorations.pathmorphing}
\draw[thick] (-2,1.2) -- (0,0) node[midway, above left] {$q$};
\draw[thick] (0,0) -- (2,1.2) node[midway, above right] {$q$};
\draw[thick, decorate, decoration={coil, aspect=0.3, segment length=4pt, amplitude=3pt}] (0,0) -- (0,-2) node[midway, right] {$g$};
```

<p align="center">
  <img src="../images/tikz/feynman-gluon.png" alt="夸克-胶子辐射" style="width: 40%;">
</p>

### 5.3 进阶示例二：单圈自能图 (Self-Energy Loop)

在量子场论的微扰展开中，常常需要绘制包含闭合圈的圈图。这里使用 `arc` 几何算子绘制半圆，展示电子在传播过程中发射并重新吸收一个虚拟光子的自能修正过程。

```latex
\usetikzlibrary{decorations.pathmorphing}
\draw[thick] (-2,0) -- (2,0) node[midway, below] {$e^-$};
\draw[thick, decorate, decoration={snake, amplitude=2.5pt, segment length=6pt}] (-1,0) arc (180:0:1) node[midway, above] {$\gamma$};
\filldraw (-1,0) circle (1.5pt);
\filldraw (1,0) circle (1.5pt);
```

<p align="center">
  <img src="../images/tikz/feynman-loop.png" alt="单圈自能图" style="width: 60%;">
</p>

各部分费曼图特定参数解析：

| 绘图参数 / 选项                             | 作用说明                                                                             | 适用场景                                             |
| :------------------------------------------ | :----------------------------------------------------------------------------------- | :--------------------------------------------------- |
| `\usetikzlibrary{decorations.pathmorphing}` | 加载路径变形装饰库，这是绘制非直线传播子的基础。                                     | 必须引入                                             |
| `decorate`                                  | 指定该路径需要应用修饰属性。                                                         | 波浪线/螺旋线等                                      |
| `decoration=snake`                          | 设定装饰形状为波浪线（波蛇形）。                                                     | 虚拟光子 ($\gamma$)、弱相互作用玻色子 ($W^\pm, Z^0$) |
| `decoration=coil`                           | 设定装饰形状为圆卷螺旋线。                                                           | 胶子 ($g$) 传播子                                    |
| `aspect=val`                                | 设定螺旋线的扁平率/纵横比。数值越小螺旋越扁平。                                      | 胶子微调                                             |
| `segment length=val`                        | 设定波浪线或螺旋线单个完整周期的步长（这里是 4pt 或 6pt）。数值越小波形越紧密。      | 紧密波形控制                                         |
| `amplitude=val`                             | 设定波形的振幅（这里是 2.5pt 或 3pt）。数值越大波峰波谷越高。                        | 波形高度控制                                         |
| `arc (start:end:radius)`                    | 圆弧算子（这里是 `arc (180:0:1)`，起点角度 $180^\circ$，终点 $0^\circ$，半径 1cm）。 | 圈图（Loop）绘制                                     |
| `node[midway]`                              | 在线段或弧线几何中心点正下方/上方放置粒子标签。                                      | 粒子标签排版                                         |

## 6 化学结构

### 6.1 苯环

**方法 1：纯 TikZ 极坐标绘制**

手动计算极坐标画六边形并添加双键，适合展示 TikZ 坐标系统的应用。

```latex
\draw (30:1) -- (90:1) -- (150:1) -- (210:1) -- (270:1) -- (330:1) -- cycle;
\draw (30:0.8) -- (90:0.8);
\draw (150:0.8) -- (210:0.8);
\draw (270:0.8) -- (330:0.8);
\draw (90:1) -- (90:1.5) node[above] {OH};
```

<p align="center">
  <img src="../images/tikz/benzene.png" alt="苯环结构" style="width: 20%;">
</p>

| 参数               | 说明                       |
| ------------------ | -------------------------- |
| `(30:1)`           | 极坐标，$30°$ 方向半径 $1$ |
| `cycle`            | 自动闭合六边形             |
| `node[above] {OH}` | 在键上方标注羟基           |

**方法 2：chemfig 包（推荐）**

Liii STEM 的 TikZ 插件支持 `\usepackage` 语法导入 `chemfig` 宏包，与 `\usetikzlibrary` 用法一致，置于代码顶部即可。此外，Liii STEM 在后台内置了智能优化：即使没有手动加载该包，只要检测到你使用了 `\chemfig` 命令，编辑器便会在内部**隐式自动加载** `chemfig`，因此直接输入化学指令也能正常渲染。

```latex
\chemfig{*6(=-=-=-)}
```

<p align="center">
  <img src="../images/tikz/chemfig-benzene.png" alt="chemfig 苯环" style="width: 20%;">
</p>

`chemfig` 语法中 `*6(...)` 表示六元环，括号内为各边的键型，`-` 为单键，`=` 为双键，`~` 为叁键。圆角内画圈用 `**6(...)` 表示芳香体系。

| 化学结构命令                    | 效果             |
| ------------------------------- | ---------------- |
| `\chemfig{*6(=-=-=-)}`          | 凯库勒式苯环     |
| `\chemfig{**6(------)}`         | 芳香圈           |
| `\chemfig{*6((-OH)-=-=-=)}`     | 带羟基取代的苯环 |
| `\chemfig{*4(----)}`            | 环丁烷           |
| `\chemfig{A-B(-[2]C)(-[6]D)-E}` | 分支结构         |

**方法 3：chemfig 与 TikZ 互动绘图**

由于 `chemfig` 本身基于 TikZ 构建，你可以直接将 `\chemfig` 命令作为 TikZ 节点（Node）的内容，并在节点间绘制连接或指向箭头，非常适合展现分子相互作用或电子转移。而且由于其隐式自动加载机制，你同样无需手动在开头加入 `\usepackage{chemfig}`：

```latex
\node (molecule) at (2,0) {\chemfig{*6(-=-=-=)}};  % 将节点置于 (2,0) 避免边界裁剪
\draw[->, red] (molecule) -- (4,1);              % 从这个苯环画一个红色箭头到某处
```

<p align="center">
  <img src="../images/tikz/chemfig-tikz-interact.png" alt="chemfig 与 TikZ 互动绘图" style="width: 20%;">
</p>

> `chemfig` 基于 TikZ 构建，在 Liii STEM 的 TikZ 会话中可直接使用，无需额外包裹 `\begin{tikzpicture}`。完整文档请参阅 [CTAN 官方页面](https://ctan.org/pkg/chemfig)。

### 6.2 反应方程式

使用节点放置化学式，箭头表示反应方向，`above` 和 `below` 标注反应条件。

```latex
\node at (0,0) {$2H_2 + O_2$};
\node at (4,0) {$2H_2O$};
\draw[->] (1,0) -- (3,0) node[midway, above] {点燃} node[midway, below] {$\Delta$};
```

<p align="center">
  <img src="../images/tikz/chemical-reaction.png" alt="化学反应方程式" style="width: 20%;">
</p>

### 6.3 路易斯结构与电子对

使用 `.. controls ..` 绘制曲线表示孤对电子，或使用小圆点表示电子。

```latex
\node at (0,0) {O};
\node at (1.5,0) {H};
\node at (-1.5,0) {H};
\draw (0.2,0.1) -- (1.3,0.1);
\draw (0.2,-0.1) -- (1.3,-0.1);
\draw (-0.2,0.1) -- (-1.3,0.1);
\draw (-0.2,-0.1) -- (-1.3,-0.1);
\filldraw (0,0.6) circle (2pt);
\filldraw (0.5,0.4) circle (2pt);
```

<p align="center">
  <img src="../images/tikz/lewis-structure.png" alt="路易斯结构" style="width: 20%;">
</p>

### 6.4 电子轨道示意图 (Atomic & Molecular Orbitals)

在结构化学与量子化学教学中，绘制原子轨道（如 $s$ 轨道、$p$ 轨道）或共价键杂化轨道（如 $sp^3$ 轨道）是极高频的需求。通过使用 TikZ 的三维透明填充与阴影功能，可以轻松绘制高对比度、空间感极强的轨道图形。

本例展示如何绘制一个经典的 **$p_z$ 哑铃型原子轨道与 $sp^3$ 杂化轨道示意图**：

```latex
\usetikzlibrary{calc}

% 绘制 pz 轨道：上叶（正相位，蓝色填充，带渐变阴影）
\shadedraw[ball color=blue!30, opacity=0.8] (0,0) .. controls (0.6,0.8) and (0.6,1.8) .. (0,1.8) .. controls (-0.6,1.8) and (-0.6,0.8) .. (0,0);
% 绘制 pz 轨道：下叶（负相位，红色填充，带渐变阴影）
\shadedraw[ball color=red!30, opacity=0.8] (0,0) .. controls (0.6,-0.8) and (0.6,-1.8) .. (0,-1.8) .. controls (-0.6,-1.8) and (-0.6,-0.8) .. (0,0);

% 标注相位符号 + 和 -
\node[white] at (0,1.0) {$+$};
\node[white] at (0,-1.0) {$-$};
```

<p align="center">
  <img src="../images/tikz/chem-orbitals.png" alt="原子轨道示意图" style="width: 60%;">
</p>

## 7 流程图

流程图使用 `shapes.geometric` 和 `shapes.misc` 库中的 `rounded rectangle`（开始/结束），`rectangle`（处理），`diamond`（判断）等形状。

```latex
\usetikzlibrary{shapes.geometric, shapes.misc}
\node[draw, rounded rectangle] (start) at (0,4) {Start};
\node[draw, rectangle] (proc) at (0,2.5) {Input $x$};
\node[draw, diamond, aspect=2] (dec) at (0,0.5) {$x > 0$?};
\node[draw, rectangle] (yes) at (4,0.5) {Print "Positive"};
\node[draw, rounded rectangle] (stop) at (0,-1.5) {Stop};
\draw[->] (start) -- (proc);
\draw[->] (proc) -- (dec);
\draw[->] (dec) -- node[above] {Yes} (yes);
\draw[->] (dec) -- node[left] {No} (stop);
\draw[->] (yes) -- (stop);
```

<p align="center">
  <img src="../images/tikz/flowchart.png" alt="流程图" style="width: 50%;">
</p>

| 形状                | 流程图含义  | 参数                                 |
| ------------------- | ----------- | ------------------------------------ |
| `rounded rectangle` | 开始 / 结束 | `rounded rectangle`                  |
| `rectangle`         | 处理步骤    | `rectangle`                          |
| `diamond`           | 判断分支    | `diamond, aspect=2`                  |
| `parallelogram`     | 输入 / 输出 | `trapezium, trapezium left angle=60` |

## 8 神经网络图

神经网络可通过多层节点矩阵实现。使用 `positioning` 库简化节点相对定位。

```latex
\usetikzlibrary{positioning}
\foreach \i in {1,2,3}
  \node[circle, draw, fill=blue!20] (i\i) at (0,\i-2) {};
\foreach \i in {1,2,3,4}
  \node[circle, draw, fill=green!20] (h\i) at (2,\i-2.5) {};
\foreach \i in {1,2}
  \node[circle, draw, fill=red!20] (o\i) at (4,\i-1.5) {};
\foreach \i in {1,2,3}
  \foreach \j in {1,2,3,4}
    \draw (i\i) -- (h\j);
\foreach \i in {1,2,3,4}
  \foreach \j in {1,2}
    \draw (h\i) -- (o\j);
\node[left=0.5cm of i2] {Input};
\node[above=0.3cm of h2] {Hidden};
\node[right=0.5cm of o1.5] {Output};
```

<p align="center">
  <img src="../images/tikz/neural-network.png" alt="神经网络图" style="width: 40%;">
</p>

| 库             | 用途                                  |
| -------------- | ------------------------------------- |
| `positioning`  | 使用 `above=of`，`left=of` 等相对定位 |
| `\foreach`     | 批量生成节点和连接                    |
| `fill=color!n` | 以 $n\%$ 浓度填充颜色                 |

卷积网络可使用矩形节点表示特征图。

```latex
\usetikzlibrary{positioning}
\node[draw, fill=orange!30, minimum width=2cm, minimum height=2cm] (f1) at (0,0) {};
\node[draw, fill=orange!30, minimum width=1.5cm, minimum height=1.5cm, right=of f1] (f2) {};
\node[draw, fill=orange!30, minimum width=1cm, minimum height=1cm, right=of f2] (f3) {};
\draw[->] (f1) -- (f2);
\draw[->] (f2) -- (f3);
\node[below=0.2cm of f1] {Input};
\node[below=0.2cm of f2] {Conv};
\node[below=0.2cm of f3] {Pool};
```

<p align="center">
  <img src="../images/tikz/convolutional.png" alt="卷积神经网络" style="width: 40%;">
</p>

## 9 树状图

树状图使用 `positioning` 和 `calc` 库手动布局节点，或使用 `tikz-qtree` 风格的括号表示法（Liii STEM TikZ 插件支持标准 TikZ 语法）。

```latex
\node[circle, draw] (root) at (0,0) {A};
\node[circle, draw] (b) at (-2,-2) {B};
\node[circle, draw] (c) at (2,-2) {C};
\node[circle, draw] (d) at (-3,-4) {D};
\node[circle, draw] (e) at (-1,-4) {E};
\node[circle, draw] (f) at (1,-4) {F};
\node[circle, draw] (g) at (3,-4) {G};
\draw (root) -- (b);
\draw (root) -- (c);
\draw (b) -- (d);
\draw (b) -- (e);
\draw (c) -- (f);
\draw (c) -- (g);
```

<p align="center">
  <img src="../images/tikz/tree.png" alt="树状图" style="width: 40%;">
</p>

| 技巧     | 说明                                              |
| -------- | ------------------------------------------------- |
| 层级布局 | 按 $y$ 坐标分层，$x$ 坐标均匀分布                 |
| 技巧     | 说明                                              |
| -------- | ------------------------------------------------- |
| 层级布局 | 按 $y$ 坐标分层，$x$ 坐标均匀分布                 |
| 二叉树   | 左子节点 $x$ 坐标偏移 $-2^n$，右子节点偏移 $+2^n$ |
| 边样式   | `\draw[thick, blue]` 设置边的粗细和颜色           |

## 10 物理与工程图 (Physics & Engineering Diagrams)

物理与工程图（如激光光路、量子计算、机器人运动学分析）在学术报告与科研文献中占据极大比重。TikZ 强大的第三方宏包生态，使得绘制 these 复杂前沿学科原理图变得异常高雅与迅速。

### 10.1 激光延迟线系统 (Optical Delay Line)

激光物理光学系统图如果仅用纯线段拼接会显得非常原始。推荐使用专门针对激光光学系统开发的 $\LaTeX$ 宏包 **`optikz`**（由 Martin Beyer 开发，CTAN 官方收录，内置于现代 TeX 发行版中）。

通过在会话顶部使用 `\usepackage{optikz}`，可以极为便捷地放置具有拟真高对比度渐变阴影的透镜、分束镜、反射镜、激光源及光束探测器，并精确控制光路。本例展示了一个标准的激光延迟线（Optical Delay Stage）实验原理图，直接采用了 `optikz` 官方文档的教学标准：

```latex
\begin{tikzpicture}
    % 定义延迟级镜组的核心物理坐标
    \coordinate (M1) at (-1,0);
    \coordinate (M2) at (-1,2);
    \coordinate (M3) at (1,2);
    \coordinate (M4) at (1,0);

    % ======= 1. 绘制极细红色指示激光光路 =======
    \draw[very thick, -{latex}] (-3,0) -- (M1) -- (M2) -- (M3) -- (M4) -- (3,0);

    % ======= 2. 放置高仿真光学元器件 =======
    % 放置第一个平面反射镜（旋转 -45°）
    \mirror[angle=-45] at (M1);

    % 放置第二个平面反射镜（旋转 135°，设定为 optikzred 学术红，微移 0.5 作为调节指示）
    \mirror[angle=135, color=optikzred, shift=0.5] at (M2);

    % 放置第三个平面反射镜（旋转 45°，设定为 optikzred 学术红，负微移 -0.5 作为调节指示）
    \mirror[angle=45, color=optikzred, shift=-0.5] at (M3);

    % 放置第四个平面反射镜（旋转 225°）
    \mirror[angle=225] at (1,0);
\end{tikzpicture}
```

<p align="center">
  <img src="../images/tikz/optics-delay-stage.png" alt="激光延迟线系统光路图" style="width: 60%;">
</p>

各部分光路图几何参数解析与说明：

| 绘图命令 / 参数               | 对应物理器件     | 作用说明                                                                                            |
| :---------------------------- | :--------------- | :-------------------------------------------------------------------------------------------------- |
| `\coordinate`                 | 器件物理坐标锚点 | 在空间精确指定四个反射镜的对齐参考坐标，这也是 TikZ 连线绘制的基础。                                |
| `\draw[very thick, -{latex}]` | 激光指示路径     | 使用 `very thick` 粗线段和 LaTeX 标准箭头，依序穿过反射镜坐标，高质感展现光行进方向。               |
| `\mirror[angle=...]`          | 平面反射高反镜   | 在指定的物理坐标上放置学术质感的平面镜。其背面自动带有高仿真、黑红交替的避光防反吸光带。            |
| `color=optikzred`             | 调节指示高亮色   | `optikz` 预设的学术专属深红色，常用于在光路系统中将部分可动或需精调的元件（如延迟滑动镜）高亮区分。 |
| `shift=0.5` / `shift=-0.5`    | 镜面物理滑动偏置 | 极其优雅的平面反射镜宏参数。可以模拟镜片在滑轨上的轴向微调偏置位移，而不需要手动去重算物理坐标。    |

### 10.2 量子线路图 (Quantum Circuits - quantikz)

量子计算学术界在撰写论文和报告时，绘制量子逻辑门演化线路图是不可或缺的。**`quantikz`** 宏包是排版量子线路图的行业绝对标准，它采用类似矩阵排版表格的优雅语法，可以直接与 TikZ 结合使用。在顶部使用 `\usepackage{quantikz}` 加载即可。

本例展示如何用其绘制一个简单的 **Bell 态（最大纠缠态）制备线路图**：

```latex
\usepackage{quantikz}
\begin{quantikz}
  \lstick{$|0\rangle$} & \gate{H} & \ctrl{1} & \meter{} & \qw \\
  \lstick{$|0\rangle$} & \qw      & \targ{}  & \meter{} & \qw
\end{quantikz}
```

<p align="center">
  <img src="../images/tikz/quantum-bell-state.png" alt="量子纠缠态制备线路图" style="width: 60%;">
</p>

各部分量子线路图特定算子解析：

| 绘图命令                              | 功能作用说明                                                              | 适用场景   |
| :------------------------------------ | :------------------------------------------------------------------------ | :--------- |
| `\begin{quantikz}` / `\end{quantikz}` | 量子线路专门绘图容器环境。                                                | 必须使用   |
| `\lstick{$ \|0\rangle$}`              | 左侧量子比特初始状态输入标签（Left Stick）。                              | 标记输入态 |
| `\gate{H}`                            | 单量子比特逻辑门。这里放置阿达马门（Hadamard Gate） $H$。                 | 量子逻辑门 |
| `\ctrl{1}`                            | 受控量子比特门的控制端（Control）。参数 `1` 代表向下连接 1 个量子比特线。 | 控制信号   |
| `\targ{}`                             | 受控非门（CNOT）的目标端（Target），自动绘制带有十字叉的目标环。          | 目标控制门 |
| `\meter{}`                            | 量子态测量计（Measurement），自动绘制拟真的仪表指针与表盘形状。           | 量子测量   |
| `\qw`                                 | 传送量子态状态的通用量子线路导线（Quantum Wire）。                        | 导线连接   |

### 10.3 工业机械机构与运动学 (Robotics & Kinematics - kinematikz)

在机器人技术、机械结构设计及动力学分析中，精细地绘制多连杆结构、旋转关节或接地接地端是分析运动链（Kinematic Chains）的基础。**`kinematikz`** 宏包由 Vitor Santos 开发，它采用标准的 TikZ `pic`（图元）机制，提供了一套符合 ISO 国际标准的平面及空间机械原理结构符号。在顶部使用 `\usepackage{kinematikz}` 载入即可。

本例展示如何绘制一个经典的 **2-DOF（双自由度）平面工业机械臂机构原理图**：

```latex
\usepackage{kinematikz}

% 1. 放置接地机座：定位在原点 (0,0)
\pic (O) at (0,0) {frame pivot rounded};

% 2. 放置第一级旋转关节
\pic (J1) at (0,0) {revolute pair planar};

% 3. 绘制第一级连杆：起点为 (0,0)，相对矢量偏移为 2.5,1.2
\pic (L1) at (0,0) {link bar generic={2.5,1.2/1/1/1}};

% 4. 放置第二级旋转关节：定位于连杆 1 的物理终点 (2.5,1.2)
\pic (J2) at (2.5,1.2) {revolute pair planar};

% 5. 绘制第二级连杆：起点为 (2.5,1.2)，相对水平位移 2,0
\pic (L2) at (2.5,1.2) {link bar generic={2,0/1/1/1}};

% 6. 放置末端旋转关节：定位于连杆 2 的终点 (4.5,1.2)
\pic (J3) at (4.5,1.2) {revolute pair planar};

% 7. 放置末端平行夹爪 (Gripper)
\pic[scale=0.8] (G) at (4.5,1.2) {gripper};

% 8. 标注部件标签
\node[above, blue, yshift=4pt] at (1.25,0.6) {Link 1};
\node[above, blue, yshift=4pt] at (3.5,1.2) {Link 2};
\node[below, gray] at (0,-0.5) {Base};
\node[above, gray] at (4.5,1.5) {Gripper};
```

<p align="center">
  <img src="../images/tikz/robot-arm-2dof.png" alt="双自由度机械臂原理图" style="width: 60%;">
</p>

各部分运动学连杆与关节特定图元（pic）解析：

| 绘图图元 (pic)                   | 对应机械部件            | 参数结构与作用说明                                                                                              |
| :------------------------------- | :---------------------- | :-------------------------------------------------------------------------------------------------------------- |
| `frame pivot rounded`            | 固定接地机座            | 绘制带有斜向排沙阴影和圆角的固定机械支撑基座（接地端）。                                                        |
| `revolute pair planar`           | 平面旋转副/关节         | 绘制平面内转动自由度的双层轴承转轴关节。                                                                        |
| `link bar generic={x,y/com/s/e}` | 运动学连杆（Link）      | 绘制带有质心 COM 标识的连杆。参数 `2.5,1.2` 为终点相对起点的 $x,y$ 偏置；后续布尔值控制是否绘制质心及两端轴孔。 |
| `gripper`                        | 工业末端夹爪（Gripper） | 自动在给定的旋转关节旁绘制标准的双爪式机器人末端执行器。                                                        |

### 10.4 趣味科研与学术插图 (Fun Research Diagrams - tikz-pingu)

为了让学术报告和 LaTeX Beamer 幻灯片更加生动、富有趣味性，排版学者们时常会在文档中插入一些卡通或动物形象标识。**`tikz-pingu`** 是学术界极具人气的一个绘图包（由 Florian Sieland 开发），专门用于生成高度可定制的企鹅卡通插图。只需在会话顶部引入 `\usepackage{tikz-pingu}` 即可。

本例展示如何绘制一个经典的 **戴眼镜、拿激光笔讲课的学术企鹅 (Academic Penguin)**：

```latex
\usepackage{tikz-pingu}
\begin{tikzpicture}
  \pingu[
    wings=grab, % 设定企鹅双翼姿态为“抓取/握持”
    glasses=pink, % 戴粉色框眼镜
    laserpointer=red, % 右翼拿一根红色激光笔
    tie=blue!80, % 佩戴一根深蓝色领带
    body=black!90 % 身体底色
  ]
\end{tikzpicture}
```

<p align="center">
  <img src="../images/tikz/fun-pingu.png" alt="学术企鹅示意图" style="width: 60%;">
</p>

## 11 常用库速查

使用 `\usetikzlibrary{库名}` 导入 TikZ 库，或使用 `\usepackage{包名}` 加载完整宏包。macOS 的 MacTeX 通常已包含以下常用库；Windows 的 MiKTeX 会在首次使用时自动下载缺失库。

| 库名                       | 功能                               |
| -------------------------- | ---------------------------------- |
| `shapes.geometric`         | 几何形状：菱形，星形，梯形，三角形 |
| `shapes.symbols`           | 符号形状：云形，信号形，矩形十字   |
| `shapes.misc`              | 杂项形状：圆角矩形，十字形         |
| `arrows`                   | 传统箭头样式                       |
| `arrows.meta`              | 现代箭头样式（推荐）               |
| `calc`                     | 坐标计算：如 `($(A)+(1,0)$)`       |
| `positioning`              | 相对定位：`above=of`，`right=of`   |
| `decorations.pathmorphing` | 路径变形：波浪线，螺旋线，随机步   |
| `matrix`                   | 矩阵节点布局                       |
| `fit`                      | 用矩形或椭圆包围一组节点           |
| `backgrounds`              | 背景层绘制                         |

此外，以下宏包可通过 `\usepackage` 加载：

| 包名      | 功能             |
| --------- | ---------------- |
| `chemfig` | 化学分子结构绘制 |

此外，以下宏包可以通过 `\usepackage` 引入，进行专门的高级图表排版：

| 包名       | 功能                                         |
| ---------- | -------------------------------------------- |
| `pgfplots` | 极高学术水准的二维与三维数学函数曲面图像绘制 |
| `optikz`   | 高度定制化的光学元件及激光光路实验系统绘制   |

颜色使用 `color!n` 表示浓度，如 `red!50` 为 $50\%$ 红色。标准颜色名包括 `red`，`green`，`blue`，`cyan`，`magenta`，`yellow`，`black`，`gray`，`white`，`orange`，`purple`，`brown`。

| 颜色浓度      | 效果                   |
| ------------- | ---------------------- |
| `red!100`     | 纯红                   |
| `red!50`      | 半透明红               |
| `red!20`      | 极淡红，适合填充背景   |
| `red!50!blue` | 红蓝各 $50\%$ 的混合色 |

> 在 Liii STEM 中，TikZ 代码修改后按 `Enter` 即可重新渲染，无需编译等待。若需微调图形尺寸，可在代码中调整坐标值，或通过焦点工具栏缩放输出图像。

## 12 后续阅读

- [Liii STEM 文本模式完全指南](base-editing/guide-text-mode.md)
- [数学模式完全指南](guide-equation.md)
- [Liii STEM 计算环境指南](guide-computing-environments.md)
- [Python 会话插件](guide-python.md)
- [Gnuplot 绘图教程](guide-gnuplot/docs/guide-gnuplot_1.md)
- [自定义宏命令](guide-macro.md)
