\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}