我已经有一些\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 中没有实际的函数。)