\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\usepackage{filecontents}
\usepackage{indentfirst}
\usepackage{amsmath}
\usepackage{float}
\usepackage{hhline}
\usepackage{multirow}
\usepackage{datatool}
\begin{filecontents}{data.dat}
28.7 28.4 43.4
0.2416 0.2415 nan
0.2420 0.2416 nan
0.2421 0.2416 nan
0.2416 0.2422 nan
0.2410 0.2422 nan
35.9 35.6 50.4
0.2695 0.2691 nan
0.2679 0.2691 nan
0.2691 0.2697 nan
0.2691 0.2691 nan
0.2686 0.2694 nan
42.6 42.3 57.4
0.2951 0.2953 nan
0.2950 0.2951 nan
0.2952 0.2956 nan
0.2951 0.2957 nan
0.2951 0.2954 nan
47.2 46.9 61.9
0.3091 0.3104 nan
0.3095 0.3107 nan
0.3106 0.3107 nan
0.3105 0.3110 nan
0.3107 0.3103 nan
51.3 51.1 66.1
0.3234 0.3231 nan
0.3231 0.3235 nan
0.3238 0.3233 nan
0.3229 0.3241 nan
0.3243 0.3230 nan
57.4 57.2 72.3
0.3417 0.3431 nan
0.3426 0.3431 nan
0.3422 0.3437 nan
0.3430 0.3427 nan
0.3429 0.3437 nan
\end{filecontents}
\pgfplotsset{compat=1.14}
\pgfplotstableread{data.dat}\Data
\begin{document}
\begin{table}
\title{Pendulum Data for Steel Ball}
\begin{tabular}{|l|l|l|l|} \hline
$d$ (cm) & $y$ (cm) & $\tau$ (s) & $\tau^2$ (s) \\\hhline{|=|=|=|=|}
\foreach \row in {0,...,35}
{
\newcount\countuno
\countuno=\row
\divide\countuno by 6
\multiply\countuno by 6
\ifnum\countuno=\row
\pgfplotstablegetelem{\row}{2}\of\Data \pgfmathsetmacro\dval{\pgfplotsretval}
\pgfplotstablegetelem{\row}{0}\of\Data \pgfmathsetmacro\yval{\pgfplotsretval}
\multirow{5}{*}{$\pgfmathprintnumber{\dval}$} & \multirow{5}{*}{$\pgfmathprintnumber{\yval}$}
\else
\pgfplotstablegetelem{\row}{0}\of\Data \pgfmathsetmacro\tval{\pgfplotsretval}
\pgfmathsetmacro\tsqrval{\tval ^ 2}
\advance\countuno by 1
\ifnum\countuno<\row
&
\fi
& $\pgfmathprintnumber{\tval}$ & $\pgfmathprintnumber{\tsqrval}$ \\\hline
\fi
}
\end{tabular}
\end{table}
\end{document}
我得到了错误
! Missing \endgroup inserted.
<inserted text>
\endgroup
l.83 }
我不知道错误可能出在哪里。我花了一些时间研究 if 语句的语法,但它们似乎没有导致问题,而且据我所知 foreach 循环看起来也很好。可能它与 pgf 命令有关。如果有人能发现问题,那就太棒了。
答案1
您不能在一个单元格中开始循环并在另一个单元格中结束循环。
一种解决方法是在第一个单元格中构建表格并一次性传送所有内容。
因为我反对\multirow
和监禁表格,所以你可以这样做booktabs
。
\documentclass{article}
\usepackage{pgfplots, pgfplotstable}
\usepackage{filecontents}
\usepackage{amsmath}
\usepackage{booktabs}
\begin{filecontents}{\jobname.dat}
28.7 28.4 43.4
0.2416 0.2415 nan
0.2420 0.2416 nan
0.2421 0.2416 nan
0.2416 0.2422 nan
0.2410 0.2422 nan
35.9 35.6 50.4
0.2695 0.2691 nan
0.2679 0.2691 nan
0.2691 0.2697 nan
0.2691 0.2691 nan
0.2686 0.2694 nan
42.6 42.3 57.4
0.2951 0.2953 nan
0.2950 0.2951 nan
0.2952 0.2956 nan
0.2951 0.2957 nan
0.2951 0.2954 nan
47.2 46.9 61.9
0.3091 0.3104 nan
0.3095 0.3107 nan
0.3106 0.3107 nan
0.3105 0.3110 nan
0.3107 0.3103 nan
51.3 51.1 66.1
0.3234 0.3231 nan
0.3231 0.3235 nan
0.3238 0.3233 nan
0.3229 0.3241 nan
0.3243 0.3230 nan
57.4 57.2 72.3
0.3417 0.3431 nan
0.3426 0.3431 nan
0.3422 0.3437 nan
0.3430 0.3427 nan
0.3429 0.3437 nan
\end{filecontents}
\pgfplotsset{compat=1.14}
\pgfplotstableread{\jobname.dat}\Data
\newcount\countuno
\begin{document}
\begin{table}
\title{Pendulum Data for Steel Ball}
\begin{tabular}{llll}
\toprule
$d$ (cm) & $y$ (cm) & $\tau$ (s) & $\tau^2$ (s) \\
\midrule
\gdef\tablecontents{}%
\foreach \row in {0,...,35}
{%
\countuno=\row
\divide\countuno by 6
\multiply\countuno by 6
\ifnum\countuno=\row
\pgfplotstablegetelem{\row}{2}\of\Data
\pgfmathsetmacro\dval{\pgfplotsretval}%
\pgfplotstablegetelem{\row}{0}\of\Data
\pgfmathsetmacro\yval{\pgfplotsretval}%
\xdef\tablecontents{%
\unexpanded\expandafter{\tablecontents}%
\ifnum\row>0 \noexpand\midrule \fi
$\noexpand\pgfmathprintnumber{\dval}$ &
$\noexpand\pgfmathprintnumber{\yval}$
}%
\else
\pgfplotstablegetelem{\row}{0}\of\Data
\pgfmathsetmacro\tval{\pgfplotsretval}%
\pgfmathsetmacro\tsqrval{\tval ^ 2}%
\advance\countuno by 1
\xdef\tablecontents{%
\unexpanded\expandafter{\tablecontents}
\ifnum\countuno<\row &\fi
& $\noexpand\pgfmathprintnumber{\tval}$
& $\noexpand\pgfmathprintnumber{\tsqrval}$
\noexpand\\
}%
\fi
}%
\tablecontents
\bottomrule
\end{tabular}
\end{table}
\end{document}