# tikz-chemlab

**版本：** v1.0.0

基于 TikZ 的化学实验室玻璃器皿绘图宏包，是著名 [pst-labo](https://ctan.org/pkg/pst-labo) 宏包的 TikZ 重实现版本。

## 概述

tikz-chemlab 提供了一组宏命令，用于绘制化学实验中常用的各类仪器设备。由于这些设备具有标准化的设计，tikz-chemlab 免去了手动绘制的麻烦。所有底层形状对象包含在 `tikz-chemlabObj.tex` 文件中，在宏包加载时自动读入。

本宏包是 pst-labo（v2.07, 2025/07/15，作者 Denis Girou、Christophe Jorssen、Manuel Luque、Herbert Voß）的 TikZ 移植版。移植版使用英语命令名加 `tkz` 前缀，替代原始法语 `pst` 前缀，所有选项键名也已翻译为英语。

## 文件

| 文件 | 作用 |
|------|------|
| `tikz-chemlab.sty` | LaTeX 宏包封装（加载 TikZ 和主文件） |
| `tikz-chemlab.tex` | 主实现（参数系统 + 高级宏命令） |
| `tikz-chemlabObj.tex` | 形状库（底层绘图原语） |

将这三个文件放在同一目录或 TeX 搜索路径中。

## 安装

在导言区加载宏包：

```latex
\usepackage{tikz-chemlab}
```

这将自动加载 TikZ 及所需库（`arrows.meta`、`calc`、`patterns`、`shadings`、`decorations.pathmorphing`、`decorations.pathreplacing`）。

## 编译

tikz-chemlab 支持所有支持 TikZ 的 LaTeX 引擎：

- **pdflatex** — 完全支持（与 pst-labo 不同，无需 PostScript）
- **xelatex** — 完全支持
- **lualatex** — 完全支持
- **tectonic** — 完全支持

无 PostScript 依赖，无需 `latex → dvips → ps2pdf` 流程。

## 快速入门

```latex
\documentclass{standalone}
\usepackage{tikz-chemlab}
\begin{document}
\begin{tikzpicture}[scale=0.5]
  \tkzTestTube
\end{tikzpicture}
\end{document}
```

## 可用宏命令

| 宏命令 | 说明 |
|-------|------|
| `\tkzTestTube` | 试管/玻璃容器（tube, roundFlask, beaker, erlenmeyer, reagentBottle, volumetricFlask, watchGlass） |
| `\tkzHeatTube` | 加热试管（本生灯、加热板、鼓泡） |
| `\tkzRoundFlask` | 圆底烧瓶（回流冷凝器、双管） |
| `\tkzHeatFlask` | 加热烧瓶（带本生灯） |
| `\tkzFunnel` | 漏斗（配试管） |
| `\tkzGraduatedCylinder` | 量筒 |
| `\tkzPipette` | 移液管 |
| `\tkzLargePipette` | 大移液管 |
| `\tkzTitration` | 滴定装置（滴定管 + 烧杯 + 可选 pH 计） |
| `\tkzDistillation` | 分馏装置 |
| `\tkzSeparatoryFunnel` | 分液漏斗（带支架） |
| `\tkzStand` | 支架（铁架台，带夹子） |
| `\tkzColumn` | 蒸馏柱 |

## 主要选项

| 选项 | 默认值 | 说明 |
|------|--------|------|
| `glassType` | `tube` | 玻璃容器类型 |
| `stopper` | `false` | 插入塞子 |
| `clamp` | `false` | 添加试管夹 |
| `tiltAngle` | `0` | 倾斜角度（度，−65…+65） |
| `liquidLevel1/2/3` | `50/0/0` | 液位（0–100，百分比） |
| `liquidStyle1/2/3` | `liquidStyle1/2/3` | 液体样式 |
| `substance` | `(空)` | 物质宏命令 |
| `solid` | `(空)` | 固体物质宏命令 |
| `burette` | `true` | 显示/隐藏滴定管 |
| `pHMeter` | `false` | 显示 pH 计 |
| `magneticStirrer` | `true` | 显示磁力搅拌器/加热板 |
| `bunsenBurner` | `true` | 显示本生灯 |
| `bubbling` | `false` | 添加鼓泡试管 |
| `gasCollection` | `false` | 添加气体收集容器 |
| `label` | `false` | 显示标签 |
| `Number` | `(空)` | 标签文本 |
| `buretteLevel` | `20` | 滴定管液位 |
| `buretteColor` | `VeryPaleOrange` | 滴定管液体颜色 |
| `TapOpen` | `false` | 分液漏斗活塞开/关 |

## 线宽样式

通过 `\chemlabset{style=...}` 可使用六种预设样式：

| 样式 | 轮廓 | 椭圆 | 管口椭圆 | 刻度 |
|------|------|------|----------|------|
| `default` | 0.053 cm | 0.07 cm | 0.08 cm | 0.02 cm |
| `publication` | 0.4 pt | 0.6 pt | 0.8 pt | 0.4 pt |
| `presentation` | 0.8 pt | 1.2 pt | 1.6 pt | 0.6 pt |
| `schematic` | 0.6 pt | 0.8 pt | 1.2 pt | 0.4 pt |
| `draft` | 0.4 pt | 0.4 pt | 0.4 pt | 0.4 pt |
| `bold` | 1.2 pt | 1.6 pt | 1.6 pt | 0.8 pt |

线宽随 TikZ `scale` 因子自动缩放。

## 从 pst-labo 迁移

| pst-labo | tikz-chemlab |
|----------|--------------|
| `\pstTubeEssais` | `\tkzTestTube` |
| `\pstDosage` | `\tkzTitration` |
| `\pstEprouvette` | `\tkzGraduatedCylinder` |
| `\pstBallon` | `\tkzRoundFlask` |
| `\pstEntonnoir` | `\tkzFunnel` |
| `\pstSeparateFunnel` | `\tkzSeparatoryFunnel` |
| `\pstChauffageTube` | `\tkzHeatTube` |
| `\pstChauffageBallon` | `\tkzHeatFlask` |
| `\pstDistillation` | `\tkzDistillation` |
| `\pstpipette` | `\tkzPipette` |
| `\pstSupport` | `\tkzStand` |
| `\pscolon` | `\tkzColumn` |

选项键映射：`tubePenche` → `tiltAngle`，`niveauLiquide1` → `liquidLevel1`，`bouchon` → `stopper`，`becBunsen` → `bunsenBurner`，`etiquette` → `label` 等。

完整映射表请参阅使用手册。

## 文档

- `tikz-chemlab-doc.tex` / `tikz-chemlab-doc.pdf` — 英文使用手册
- `tikz-chemlab-zh-doc.tex` / `tikz-chemlab-zh-doc.pdf` — 中文使用手册

## 致谢

原 pst-labo 作者：

- Denis Girou
- Christophe Jorssen
- Manuel Luque
- Herbert Voß

tikz-chemlab 是 pst-labo 的 TikZ 移植版，尽可能保留了原始的视觉外观和默认值。所有形状坐标均源自原始 `pst-laboObj.tex`。

## 代码仓库与技术支持

- **代码仓库：** https://github.com/aihua/tikz-chemlab
- **技术支持：** https://github.com/aihua/tikz-chemlab/issues

## 许可证

本作品依据 LaTeX Project Public License v1.3c 许可证发布。
