Skip to content

TikZ 绘图插件完全指南

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

0 LaTeX 安装

Liii STEM 的 TikZ 插件需要本地 LaTeX\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 目前只支持加载装在 CProgram 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\LaTeX 中编写 TikZ 代码不同,Liii STEM 的会话系统支持增量式交互:修改代码后按 Enter 即可局部重新渲染,无需像 LaTeX\LaTeX 那样全文档编译等待。关于会话系统的完整机制(字段编辑,折叠,全部求值等)请参阅 《Liii STEM 作为统一接口:支持 Python,AI 及多语言计算环境》

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

方式二:可执行切换

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

方式三:静态代码块

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

语法与编译对比

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

Liii STEM 中的极简写法标准 LaTeX 中的繁琐写法
\draw (0,0) circle (1);
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (0,0) circle (1);
\end{tikzpicture}
\end{document}

1.2 路径与坐标

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

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

1. 直角坐标 (Cartesian)2. 极坐标 (Polar)3. 相对坐标 (Relative)
直角坐标示例
\draw[step=1, gray!20, thin] (0,0) grid (2,2);
\draw[thick, blue] (0,0) -- (1,2);
极坐标示例
\draw[gray!20, thin] (0,0) circle (1) circle (2);
\draw[thick, red] (0,0) -- (30:2);
相对坐标示例
\draw[step=1, gray!20, thin] (0,0) grid (2,2);
\draw[thick, violet] (0,0) -- ++(1,0)
-- ++(0,1);
4. 命名节点 (Node)5. 交点 (Intersection)6. 闭合路径 (cycle)
命名节点示例
\node[draw, circle] (A) at (0,0) {A};
\node[draw, rectangle] (B) at (2,0) {B};
\draw[->, thick, teal] (A) -- (B);
交点示例
\coordinate (A) at (0,0);
\coordinate (B) at (2,2);
\coordinate (C) at (0,2);
\coordinate (D) at (2,0);
\draw[gray, thin] (A) -- (B);
\draw[gray, thin] (C) -- (D);
\filldraw[red] (intersection of A--B
and C--D) circle (2pt);
闭合路径示例
\draw[step=1, gray!20, thin] (0,0) grid (2,2);
\draw[thick, blue] (0,0) -- (1,0)
-- (1,1) -- cycle;

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

坐标/路径形式示例语法细节解析与作用说明
直角坐标(1,2)标准二维笛卡尔坐标系统,单位默认为厘米。表示 x=1x=1, y=2y=2 的坐标点。
极坐标(30:2)格式为 (角度:半径)。以 3030^\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);

绘制与填充

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

命令 / 参数对应代码元素作用说明
线条颜色red指定绘制线条的颜色为红色。
线条粗细thick指定线条粗细属性为“粗线”(TikZ 支持 thinthickvery thick 等粗细层级)。
终点箭头->指示在路径的终点处(这里是右侧终点)绘制一个指向箭头。
绘制路径(0,0) -- (1,0)绘制一条从起点 (0,0) 到终点 (1,0) 的直线。
填充命令\fill指示填充封闭几何图形内部区域的命令。
填充颜色blue!30设定填充色为 30%30\% 浓度的蓝色(即 30%30\% 蓝色与 70%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);

节点与连接

各部分代码细节解析:

  • \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)系统,用于精确定位。常见锚点包括 centernorthsoutheastwestnorth eastsouth west 等。使用 node[above] 等价于 node[anchor=south]

定位参数锚点等效说明
aboveanchor=south节点位于坐标上方
belowanchor=north节点位于坐标下方
leftanchor=east节点位于坐标左侧
rightanchor=west节点位于坐标右侧
above rightanchor=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)(0,0)(1,0)(1,0) 画一条线段
\draw (0,0) rectangle (3,2);(0,0)(0,0)(3,2)(3,2) 为对角绘制矩形
\draw (1,1) circle (0.5);(1,1)(1,1) 为圆心,0.50.5 为半径画圆
\draw (0,0) -- (2,0) -- (1,1.5) -- cycle;绘制三角形并自动闭合
latex
\draw (0,0) -- (2,0) -- (1,1.5) -- cycle;

三角形绘制

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};

坐标系与刻度

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

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$};

抛物线 $y=x^2$

三角函数需使用弧度制,在函数参数后加 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$};

三角函数图像

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

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

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

示例一:三维三角函数波动面 (z=sin(x)cos(y)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}

三维三角函数曲面

示例二:三维旋转抛物面 (z=x2+y2z = 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}

三维抛物曲面

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

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

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);

极坐标与同心圆

坐标形式示例说明
直角坐标(1,2)标准 (x,y)(x,y)
极坐标(30:1)角度 30°30°,半径 11
相对坐标++(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}

韦恩图与集合运算示意图

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

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

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

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

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};

几何三角形角度标注原理图

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

命令与参数对应几何元素作用说明
\usetikzlibrary{angles, quotes}角度与引用标注库引入专门处理几何角标注的 angles 库,以及支持用字符串引言直接标注文本的 quotes 库。
(A) -- (B) -- (C) -- cycle;顺次连线并闭合连接三个端点,并通过 cycle 自动使终点闭合回起点 (A),确保闭合拐角平滑美观。
\pic [draw, ->, "$\alpha$"]绘制角标注图元(pic)专门绘制内角圆弧的语法,draw 表示描边,-> 表示带行进箭头,引号内包含要显示要显示的数学符号。
{angle = B--A--C}指定角的三点构成表示以中间点 A 为顶点,由射线 ABABACAC 所夹的逆时针角。顺序不能颠倒。
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);

节点样式

样式参数效果
draw显示边框
fill=blue!2020%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);

几何形状

形状参数
圆形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};

符号形状

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);

箭头样式

箭头样式代码
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);

交换图

语法效果
\node (A) at (0,2) {$A$};(0,2)(0,2) 定义名为 A 的节点
\draw (A) -- node[above] {$f$} (B);从 A 到 B 画箭头,上方标注 ff
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);

矩阵布局交换图

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^+$};

费曼图

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$};

夸克-胶子辐射

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);

单圈自能图

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

绘图参数 / 选项作用说明适用场景
\usetikzlibrary{decorations.pathmorphing}加载路径变形装饰库,这是绘制非直线传播子的基础。必须引入
decorate指定该路径需要应用修饰属性。波浪线/螺旋线等
decoration=snake设定装饰形状为波浪线(波蛇形)。虚拟光子 (γ\gamma)、弱相互作用玻色子 (W±,Z0W^\pm, Z^0)
decoration=coil设定装饰形状为圆卷螺旋线。胶子 (gg) 传播子
aspect=val设定螺旋线的扁平率/纵横比。数值越小螺旋越扁平。胶子微调
segment length=val设定波浪线或螺旋线单个完整周期的步长(这里是 4pt 或 6pt)。数值越小波形越紧密。紧密波形控制
amplitude=val设定波形的振幅(这里是 2.5pt 或 3pt)。数值越大波峰波谷越高。波形高度控制
arc (start:end:radius)圆弧算子(这里是 arc (180:0:1),起点角度 180180^\circ,终点 00^\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};

苯环结构

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

方法 2:chemfig 包(推荐)

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

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

chemfig 苯环

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);              % 从这个苯环画一个红色箭头到某处

chemfig 与 TikZ 互动绘图

chemfig 基于 TikZ 构建,在 Liii STEM 的 TikZ 会话中可直接使用,无需额外包裹 \begin{tikzpicture}。完整文档请参阅 CTAN 官方页面

6.2 反应方程式

使用节点放置化学式,箭头表示反应方向,abovebelow 标注反应条件。

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$};

化学反应方程式

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);

路易斯结构

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

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

本例展示如何绘制一个经典的 pzp_z 哑铃型原子轨道与 sp3sp^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) {$-$};

原子轨道示意图

7 流程图

流程图使用 shapes.geometricshapes.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);

流程图

形状流程图含义参数
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};

神经网络图

用途
positioning使用 above=ofleft=of 等相对定位
\foreach批量生成节点和连接
fill=color!nn%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};

卷积神经网络

9 树状图

树状图使用 positioningcalc 库手动布局节点,或使用 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);

树状图

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

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

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

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

激光物理光学系统图如果仅用纯线段拼接会显得非常原始。推荐使用专门针对激光光学系统开发的 LaTeX\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}

激光延迟线系统光路图

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

绘图命令 / 参数对应物理器件作用说明
\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}

量子纠缠态制备线路图

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

绘图命令功能作用说明适用场景
\begin{quantikz} / \end{quantikz}量子线路专门绘图容器环境。必须使用
\lstick{$ |0\rangle$}左侧量子比特初始状态输入标签(Left Stick)。标记输入态
\gate{H}单量子比特逻辑门。这里放置阿达马门(Hadamard Gate) HH量子逻辑门
\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};

双自由度机械臂原理图

各部分运动学连杆与关节特定图元(pic)解析:

绘图图元 (pic)对应机械部件参数结构与作用说明
frame pivot rounded固定接地机座绘制带有斜向排沙阴影和圆角的固定机械支撑基座(接地端)。
revolute pair planar平面旋转副/关节绘制平面内转动自由度的双层轴承转轴关节。
link bar generic={x,y/com/s/e}运动学连杆(Link)绘制带有质心 COM 标识的连杆。参数 2.5,1.2 为终点相对起点的 x,yx,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}

学术企鹅示意图

11 常用库速查

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

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

此外,以下宏包可通过 \usepackage 加载:

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

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

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

颜色使用 color!n 表示浓度,如 red!5050%50\% 红色。标准颜色名包括 redgreenbluecyanmagentayellowblackgraywhiteorangepurplebrown

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

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

12 后续阅读