LaTeX 入门 · 第7篇 索引、绘图与自定义

1738 字
9 分钟
LaTeX 入门 · 第7篇 索引、绘图与自定义

1. 索引:makeindex#

长文档(尤其书籍)常需要索引——按关键词列出页码。LaTeX 用 makeidx 宏包和 \makeindex\index\printindex 三条命令配合 makeindex 程序生成。

1.1 基本流程#

导言区:

\usepackage{makeidx}
\makeindex

正文中需要建索引的地方插入标记:

关键词 \index{关键词} 出现在这一页。

文档末尾输出索引:

\printindex

1.2 编译流程#

索引需要三步编译:

xelatex 文档名 # 收集 \index 写入 .idx
makeindex 文档名 # 处理 .idx 排序,生成 .ind
xelatex 文档名 # 读入 .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{Joesee{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=ofright=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}

渲染效果:

TikZ 基础图形
TikZ 基础图形

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 的连线中点上方标注 cc

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 流程图
TikZ 流程图

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)整理,辅以实战讲解和渲染示例。

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
LaTeX 入门 · 第7篇 索引、绘图与自定义
https://xingyun8.fun/posts/latex-index-tikz-custom/
作者
nanashi
发布于
2026-07-12
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
nanashi
众生皆苦,唯有自渡
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
20
分类
3
标签
37
总字数
27,069
运行时长
0
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.8
文章许可
CC BY-NC-SA 4.0