我只是为了好玩而测试代码并发现“表格”环境中的计数器有一种奇怪的行为(对我来说):
\documentclass{article}
\usepackage{ifthen}
\begin{document}
\def\yy{&}
\newcounter{numk}
\begin{tabular}{ll}\hline
numk \yy actual numk\\\hline
\setcounter{numk}{1}
\whiledo{\value{numk}<5}{
\thenumk
\yy
\multiply\value{numk} by 3\relax\; \; \thenumk \\%
\ifnum\value{numk}=4\hline\end{tabular}\fi
\stepcounter{numk}
}
\end{document}
但是,我想知道...为什么第二列中的计数器“numk”被修改了,而第一列中它又恢复到了原来的状态?也就是说,如果“numk =3”,那么\stepcounter{numk}
应该是“4”,但事实并非如此。
但如果我改变代码,那么计数器“numk”就会按照“预期”的方式改变
\newcounter{numk}
\setcounter{numk}{1}
\whiledo{\value{numk}<5}{
\thenumk
\;**\;
\multiply\value{numk} by 3\relax\; \thenumk\\
\stepcounter{numk}
}
那么,计数器在“表格”中会发生什么?
答案1
如果\multiply
被设为\global
,它将以预期的方式运行。因此,我猜想虽然\setcounter
是自动的\global
,\multiply
但 不是。如果不是全局的,那么 的效果\multiply
将在单元格末尾丢失tabular
,单元格是其自己的组。
\documentclass{article}
\usepackage{ifthen}
\begin{document}
\def\yy{&}
\newcounter{numk}
\begin{tabular}{ll}\hline
numk \yy actual numk\\\hline
\setcounter{numk}{1}
\whiledo{\value{numk}<120}{
\thenumk
\yy
\global\multiply\value{numk} by 3\relax\; \; \thenumk \\%
\stepcounter{numk}
}
\end{tabular}
\end{document}