1. 引言

本文将介绍如何在 LaTeX 文档中定义循环。LaTeX 本身不是编程语言,但它提供了多种方式来实现循环结构。我们将介绍几种常用的方法,包括使用 forloopforeachmultido 命令。

如果你需要生成重复内容,比如表格、图表节点、批量输出等,掌握这些技巧将非常有用。本文适合有一定 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-d array in Section 2

✅ 注意:循环变量从 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}

输出结果如下:

2d array in section 2.1

✅ 技巧:设置 \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}

输出结果如下:

foreach example in section 3

✅ 特点:范围是闭区间,包含 startend


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}

输出结果如下:

Multido example in Section 4

⚠️ 注意:浮点数运算可能会出现精度误差,这是 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}

输出结果如下:

Multiplication Table in Section 5

✅ 技巧:使用 \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}

输出结果如下:

Grid graph in Section 6.1

✅ 提示:count=\xi 用于获取当前索引值,方便绘制边。


7. 总结

本文介绍了 LaTeX 中几种常用的循环实现方式:

方法 类型 特点
\forloop forloop 计数器循环 支持嵌套,适合生成表格等结构
\foreach pgffor 枚举范围 语法简洁,适合处理枚举值
\multido multido 步长控制 支持整数、浮点数、固定点数,适合数学计算

✅ 推荐:根据具体需求选择合适的方式。表格生成推荐 forloop,绘图推荐 foreach,数值计算推荐 multido

掌握了这些技巧后,你可以更灵活地控制 LaTeX 文档的结构和内容,实现自动化排版、批量输出等高级功能。


原始标题:Defining Loops in a LaTeX Document