1. 引言
本文将介绍如何在 LaTeX 文档中定义循环。LaTeX 本身不是编程语言,但它提供了多种方式来实现循环结构。我们将介绍几种常用的方法,包括使用 forloop
、foreach
和 multido
命令。
如果你需要生成重复内容,比如表格、图表节点、批量输出等,掌握这些技巧将非常有用。本文适合有一定 LaTeX 使用经验的开发者,因此不会过多讲解基础语法。
2. 使用 forloop
包
forloop
是一个专门用于实现循环的 LaTeX 包。它允许我们定义计数器并进行条件控制,类似于传统编程语言中的 for
循环。
基本语法
\forloop{counter}{startValue}{condition}{body}
counter
:控制变量(需先用\newcounter{}
定义)startValue
:起始值condition
:继续循环的条件body
:每次循环执行的内容
示例代码
\documentclass{article}
\usepackage{forloop}
\begin{document}
\newcounter{x}
\forloop{x}{1}{\value{x} < 10}{
\arabic{x}
}
\\
\end{document}
输出结果如下:
✅ 注意:循环变量从 1 到 9,不包含 10。
2.1 嵌套循环
可以使用嵌套的 forloop
实现二维结构,比如生成坐标对。
\documentclass{article}
\usepackage{forloop}
\setlength{\parindent}{0pt}
\begin{document}
\newcounter{x}
\newcounter{y}
\forloop{y}{0}{\value{y} < 5}{
\forloop{x}{0}{\value{x} < 10}{
(\arabic{x},\arabic{y})
}
\\
}
\end{document}
输出结果如下:
✅ 技巧:设置
\setlength{\parindent}{0pt}
可以避免段落缩进影响排版。
3. 使用 foreach
命令
如果你希望直接指定变量的取值范围,可以使用 pgffor
包中的 \foreach
命令。
基本语法
\foreach \var in {range}{body}
\var
:控制变量range
:取值范围,例如{start,...,end}
示例代码
\documentclass{article}
\usepackage{pgffor}
\begin{document}
\foreach \n in {0,...,10}{
\n
}
\\
\end{document}
输出结果如下:
✅ 特点:范围是闭区间,包含
start
和end
。
4. 使用 multido
命令
multido
是一个功能强大的循环命令,支持整数、浮点数、固定点数等多种类型,并允许指定起始值、步长和迭代次数。
基本语法
\multido{\var=start+increment}{numValues}{body}
\var
:控制变量,可以是i
(整数)、r
(浮点数)、n
(固定点数)start
:起始值increment
:步长numValues
:循环次数
示例代码
\documentclass[12pt]{article}
\usepackage{multido}
\setlength{\parindent}{0pt}
\thispagestyle{empty}
\begin{document}
Integer, i (positive increment):\\
\multido{\i=3+4}{10}{\i\ }
Integer, i (negative, increment):\\
\multido{\i=7+-2}{12}{\i\ }
Real, r (floating point):\\
\multido{\r=3.50+0.55}{6}{\r\ }
Number, n (fixed point):\\
\multido{\n=3.50+0.55}{8}{\n\ }
\end{document}
输出结果如下:
⚠️ 注意:浮点数运算可能会出现精度误差,这是 IEEE 754 的常见现象。
5. 生成九九乘法表
我们可以使用嵌套循环生成一个标准的 tabular
表格结构,实现一个九九乘法表。
示例代码
\documentclass{article}
\usepackage{forloop}
\usepackage{calc} % 支持乘法操作
\begin{document}
\newcounter{x}
\newcounter{y}
\newcounter{z}
\begin{tabular}{||r||r|r|r|r|r|r|r|r|r|r||}\hline\hline
\ &
\forloop{x}{0}{\value{x} < 10}{
\arabic{x} \ifthenelse{\value{x}<9}{&}{}
}
\\\hline\hline
\forloop{y}{0}{\value{y} < 10}{
\arabic{y} \ifthenelse{\value{y}<10}{&}{}
\forloop{x}{0}{\value{x} < 10}{
\setcounter{z}{\value{x}*\value{y}}
\arabic{z} \ifthenelse{\value{x}<9}{&}{}
}
\\\hline
}
&\multicolumn{10}{|c||}{Multiplication Table}\\\hline
\end{tabular}
\end{document}
输出结果如下:
✅ 技巧:使用
\ifthenelse
控制&
的数量,避免最后一列多出一个&
。
6. 生成二维网格图
我们使用 tikz
绘图库结合 foreach
实现一个二维网格图,节点使用圆圈表示,并绘制有向边。
示例代码
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[myNode/.style={circle,draw,fill=teal,text=white}]
\foreach \x in {0,...,4}
\foreach \y in {0,...,4}
\node [myNode] (\x\y) at (1.5*\x,1.5*\y) {\x,\y};
\foreach \x in {0,...,4}
\foreach \y [count=\yi] in {0,...,3}{
\draw[-latex] (\x\y)--(\x\yi);
\draw[-latex] (\y\x)--(\yi\x);
}
\foreach \x [count=\xi] in {0,...,3}
\foreach \y [count=\yi] in {0,...,3}
\draw[-latex] (\x\y)--(\xi\yi);
\end{tikzpicture}
\end{document}
输出结果如下:
✅ 提示:
count=\xi
用于获取当前索引值,方便绘制边。
7. 总结
本文介绍了 LaTeX 中几种常用的循环实现方式:
方法 | 包 | 类型 | 特点 |
---|---|---|---|
\forloop |
forloop |
计数器循环 | 支持嵌套,适合生成表格等结构 |
\foreach |
pgffor |
枚举范围 | 语法简洁,适合处理枚举值 |
\multido |
multido |
步长控制 | 支持整数、浮点数、固定点数,适合数学计算 |
✅ 推荐:根据具体需求选择合适的方式。表格生成推荐
forloop
,绘图推荐foreach
,数值计算推荐multido
。
掌握了这些技巧后,你可以更灵活地控制 LaTeX 文档的结构和内容,实现自动化排版、批量输出等高级功能。