LaTeX 入门 · 第7篇 索引、绘图与自定义
1. 索引:makeindex
长文档(尤其书籍)常需要索引——按关键词列出页码。LaTeX 用 makeidx 宏包和 \makeindex、\index、\printindex 三条命令配合 makeindex 程序生成。
1.1 基本流程
导言区:
\usepackage{makeidx}\makeindex正文中需要建索引的地方插入标记:
关键词 \index{关键词} 出现在这一页。文档末尾输出索引:
\printindex1.2 编译流程
索引需要三步编译:
xelatex 文档名 # 收集 \index 写入 .idxmakeindex 文档名 # 处理 .idx 排序,生成 .indxelatex 文档名 # 读入 .ind 输出索引1.3 索引项的进阶语法
\index{} 的参数支持丰富的层级和格式控制:
| 语法 | 效果 |
|---|---|
\index{hello} | 顶层条目 hello |
\index{hello!Peter} | 二级条目,hello 下的 Peter |
\index{hello!Peter!Jack} | 三级条目 |
\index{alpha@$\alpha$} | 排序用 alpha,显示用 α |
\index{morning|(} … \index{morning|)} | 页码范围 |
| `\index{Joe | see{Jenny}}` |
索引用得不多,这里点到为止。更详细的内容见原书 6.2 节或 texdoc makeindex。
2. 绘图:TikZ
TikZ(TikZ ist kein Zeichenprogramm)是 LaTeX 最强大的绘图宏包,能画流程图、几何图、函数图、电路图等。它的代码直接嵌在 .tex 源文件里,和文档共享字体,输出是矢量图形。
2.1 加载与基本结构
\usepackage{tikz}\usetikzlibrary{arrows.meta, positioning, shapes.geometric}\usetikzlibrary 加载额外的绘图库。常用的有:
| 库 | 用途 |
|---|---|
arrows.meta | 更多箭头样式 |
positioning | 节点的相对定位(below=of、right=of) |
shapes.geometric | 圆柱、菱形等几何形状 |
calc | 坐标计算 |
decorations.pathreplacing | 路径装饰(大括号、波浪线) |
绘图代码放在 tikzpicture 环境里:
\begin{tikzpicture} \draw (0,0) -- (2,0) -- (2,1) -- (0,1) -- cycle;\end{tikzpicture}2.2 坐标与路径
TikZ 的坐标用 (x,y) 表示,默认单位是厘米。也支持极坐标 (角度:距离),如 (60:2) 表示距原点 2cm、60 度方向。
路径用一系列坐标和连接符组成:
| 连接符 | 含义 |
|---|---|
-- | 直线 |
rectangle | 矩形(两个对角点) |
circle | 圆 |
ellipse | 椭圆 |
arc | 弧 |
.. controls (x,y) .. | 贝塞尔曲线 |
cycle | 闭合路径 |
\begin{tikzpicture} \draw (0,0) -- (2,0) -- (2,1) -- (0,1) -- cycle; \draw[blue, thick] (3,0) rectangle (5,1); \draw (0,-0.5) circle [radius=0.5]; \draw[red, ->] (0,-1.5) -- (5,-1.5);\end{tikzpicture}渲染效果:

2.3 节点 node
节点是 TikZ 中带文字标注的元素,用 \node 创建:
\node[选项] (名字) at (坐标) {文字};\begin{tikzpicture} \node (A) at (0,0) {$A$}; \node (B) at (2,0) {$B$}; \node (C) at (60:2) {$C$}; \draw (A) -- (B) -- (C) -- (A);\end{tikzpicture}定义了节点后,可以用节点名(而非坐标)来连线,TikZ 会自动连接节点的边缘。node 也可以附加在路径中间标注:
\draw (A) -- node[above] {$c$} (C);这会在 A 到 C 的连线中点上方标注 。
2.4 样式与选项
[...] 里的选项控制线条颜色、粗细、箭头等:
| 选项 | 含义 |
|---|---|
color/draw | 线条颜色 |
fill | 填充颜色 |
thick/thin/ultra thick | 线宽 |
dashed/dotted | 虚线/点线 |
->/<-/<-> | 箭头方向 |
rounded corners | 圆角 |
scale=1.5 | 缩放 |
可复用的样式用 .style 定义:
\begin{tikzpicture}[ box/.style={draw, rounded corners, fill=blue!10, minimum width=2cm}, arrow/.style={-Stealth, thick}] \node[box] (a) {开始}; \node[box, below=of a] (b) {结束}; \draw[arrow] (a) -- (b);\end{tikzpicture}2.5 实战:流程图
结合节点、样式和 positioning 库的相对定位,可以画结构化的流程图:
\begin{tikzpicture}[ node distance=1.2cm, box/.style={draw, rounded corners, minimum width=2.5cm, minimum height=0.8cm, align=center, font=\small}, arrow/.style={-Stealth, thick}] \node[box, fill=blue!10] (start) {开始}; \node[box, fill=green!10, below=of start] (input) {读取数据}; \node[box, fill=yellow!20, below=of input] (process) {处理数据}; \node[box, fill=red!10, below=of process] (end) {结束};
\draw[arrow] (start) -- (input); \draw[arrow] (input) -- (process); \draw[arrow] (process) -- (end);\end{tikzpicture}渲染效果:

TikZ 功能极其丰富(函数绘图、树形图、数据可视化等),一篇讲不完。深入用法建议查
texdoc tikz(PGF 手册,1300 多页),或参考texdoc pgfplots(数据图表)、texdoc tkz-euclide(几何作图)。
3. 自定义命令:\newcommand
当某些内容反复输入,或某段代码冗长时,用 \newcommand 定义快捷命令能提高效率和一致性。
3.1 无参数命令
\newcommand{\name}{定义内容}\newcommand{\latex}{\LaTeX{} 排版系统}
% 正文中:\latex 是一套高质量排版系统。% 输出:LaTeX 排版系统 是一套高质量排版系统。3.2 带参数的命令
\newcommand{\name}[参数个数]{定义内容}参数在定义中用 #1、#2、… 表示:
\newcommand{\kw}[1]{\textbf{#1}}
% 正文中:\kw{关键词} % 输出粗体的「关键词」最多可以有 9 个参数。
3.3 带可选参数的命令
\newcommand{\name}[参数个数][默认值]{定义内容}\newcommand{\seq}[2][b]{#1_1, #1_2, \ldots, #1_{#2}}
% 正文中:$\seq{3}$ % 输出:b_1, b_2, ..., b_3(用默认值 b)$\seq[a]{3}$ % 输出:a_1, a_2, ..., a_3第一个方括号参数 [b] 是可选参数的默认值,正文中不写方括号就用默认值。
3.4 重定义与条件定义
| 命令 | 行为 |
|---|---|
\newcommand | 定义新命令;若已存在则报错 |
\renewcommand | 重定义已存在的命令;若不存在则报错 |
\providecommand | 仅在命令不存在时才定义 |
\renewcommand{\contentsname}{目录} % 把默认的 "Contents" 改成 "目录"
\newcommand定义的命令名如果和 LaTeX 内置命令冲突(如\vec、\box),会报Command already defined错误。此时要么换个名字,要么用\renewcommand。
完整示例:
\newcommand{\latex}{\LaTeX{} 排版系统}\newcommand{\kw}[1]{\textbf{#1}}\newcommand{\seq}[2][b]{#1_1, #1_2, \ldots, #1_{#2}}渲染效果:

4. 自定义环境:\newenvironment
类似 \newcommand,\newenvironment 定义新的环境:
\newenvironment{环境名}[参数个数]{开始部分}{结束部分}\newenvironment{note}[1][注意] {\par\vspace{3pt}\noindent\textbf{#1:}\itshape} {\par\vspace{3pt}}
% 正文中:\begin{note}这是一个提示环境。\end{note}
\begin{note}[警告]可选参数改变提示词。\end{note}「开始部分」放在 \begin{环境名} 之后执行,「结束部分」放在 \end{环境名} 之前执行。参数只在开始部分可用。
重定义环境用 \renewenvironment。
5. 自定义宏包
把多个自定义命令和环境收集到一个 .sty 文件里,就构成了一个个人宏包。例如 mypack.sty:
% mypack.sty\ProvidesPackage{mypack} % 声明宏包名
\newcommand{\latex}{\LaTeX{} 排版系统}\newcommand{\kw}[1]{\textbf{#1}}\newenvironment{note}[1][注意] {\par\noindent\textbf{#1:}} {\par}然后在文档导言区加载:
\usepackage{mypack}\ProvidesPackage{包名} 是声明宏包名的标准做法,让 LaTeX 记录宏包的加载信息,便于排查冲突。个人宏包适合收集常用的命令和环境,跨多个文档复用。
6. 小结
这一篇是系列的最后一篇,覆盖了进阶主题:
- 索引:
makeidx宏包 +\makeindex/\index/\printindex,配合 makeindex 程序三步编译; - TikZ 绘图:
tikzpicture环境、坐标与路径、\node节点、.style样式、流程图实战; - 自定义命令:
\newcommand的无参数/带参数/带可选参数形式、\renewcommand; - 自定义环境:
\newenvironment的开始/结束部分; - 自定义宏包:
.sty文件 +\ProvidesPackage。
系列完结
至此,从环境搭建到文字、文档结构、图表、数学公式、中文与字体、参考文献与超链接,再到绘图与自定义——LaTeX 的核心内容已经覆盖完毕。
这套系列基于《一份(不太)简短的 LaTeX2e 介绍》(lshort-zh-cn)整理,目标是提供一套可操作的实战参考。遇到更深入的问题,几个可靠的信息源:
texdoc 宏包名:本地查阅宏包官方文档,最快最准;- CTAN:宏包仓库,可查任何宏包的最新文档;
- TeX Stack Exchange:疑难问题搜索,几乎所有坑都有人踩过。
本系列基于《一份(不太)简短的 LaTeX2e 介绍》(lshort-zh-cn)整理,辅以实战讲解和渲染示例。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!













