For循环按顺序打印出数组内容

For循环按顺序打印出数组内容

我已经有一些\forloop使用 LaTeX 的经验,但我不知道如何让它按顺序打印出给定“数组”中的每个项目......就像这个伪代码一样:

\foreach \n in {a_1,a_2,a_3}{a_i, }

将会得到:

a_1, a_2, a_3

(请注意后面没有逗号a_3)。

答案1

count以下是使用键存储当前索引的一种方法。这允许您对第一项使用不同的打印样式/技术:

在此处输入图片描述

\documentclass{article}
\usepackage{pgf,pgffor}% http://ctan.org/pkg/{pgf,pgffor}
\begin{document}
\foreach \x [count=\xi] in {a_1,a_2,a_3} {%
  \ifnum\xi=1
    $\x$%
  \else
    $,\x$%
  \fi
} \par
\foreach \x [count=\xi] in {1,...,10} {%
  \ifnum\xi=1
    $b_1$%
  \else
    $,b_{\xi}$%
  \fi
}
\end{document}

答案2

这是一个编程问题,而不是 TeX 问题,尽管 TeX 是一种编程语言,它有一个 TeX 答案。答案是,你必须能够告诉 TeX 循环中的最后一次迭代是什么,这样它才能表现不同。一种简单(但看起来很笨拙)的方法是写

\foreach \n in {a_1, a_2} {$\n$, }$a_3$

(从此TeX,我擅自在 周围加上了数学模式a_i;不这样做会导致下标错误)。另一种方法是定义一个“条件逗号”,比如

\usepackage{etoolbox}
\newcommand\comma[1]{\ifnumgreater{#1}{1}{,}{}}
\foreach \n [count = \c from 1] in {a_1, a_2, a_3} {\comma{\c}$\n$}

当计数\c(记录列表中打印的项目数)超过 1 时,它将打印一个逗号。这样就避免了每次调整列表时都需要更新“最后一个术语”代码。(显然,更好的算法取自 Werner 的答案。)

这里我使用了etoolbox包,它非常有用(虽然对于这一件事来说有点过头了),并且它还具有\foreach在其循环中计算迭代次数的功能。您应该阅读 PGF-2.10 手册的第 56 节,它很短,描述了此“函数”的一般行为。(TeX 中没有实际的函数。)

相关内容