table-helper — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited table-helper (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
\usepackage{booktabs} % required; no vertical rules
% optional but recommended for numerics:
\usepackage{siunitx}
\sisetup{detect-all, table-format=2.2}\begin{table}[t]
\centering
\caption{Caption goes ABOVE the tabular.} % position above for tables (below for figures)
\label{tab:results}
\begin{tabular}{l S[table-format=2.2] S[table-format=2.2]}
\toprule
Dataset & {Baseline (\%)} & {Ours (\%)} \\
\midrule
CIFAR-10 & 92.10 & 94.70 \\
CIFAR-100 & 71.20 & 75.40 \\
ImageNet & 76.30 & 78.20 \\
\bottomrule
\end{tabular}
\end{table}Three rules, three weights: \toprule and \bottomrule are heavy; \midrule is medium. Source: Simon Fear's "Publication quality tables in LATEX" (https://tug.ctan.org/macros/latex/contrib/booktabs/booktabs.pdf).
No vertical rules. This is a load-bearing convention from booktabs (and Tufte, and CMOS, and Nature/IEEE/ACM). Don't add | to column specs.
| Spec | Meaning |
|---|---|
l | left-aligned text |
c | centered text |
r | right-aligned text |
p{3cm} | paragraph column (text wraps in fixed width) |
S[table-format=N.M] | siunitx — decimal-aligned numerics |
S[round-mode=places, round-precision=2] | siunitx — auto-round |
For headers in S columns, wrap in {...} to prevent siunitx from interpreting:
\begin{tabular}{l S S}
\toprule
& {Baseline} & {Ours} \\ % {} prevents alignment-by-decimal
...\begin{tabular}{l c c c c}
\toprule
& \multicolumn{2}{c}{Dataset A} & \multicolumn{2}{c}{Dataset B} \\
\cmidrule(lr){2-3} \cmidrule(lr){4-5}
Method & Acc & F1 & Acc & F1 \\
\midrule
Baseline & 71.2 & 70.4 & 65.0 & 64.1 \\
Ours & 86.4 & 85.7 & 79.2 & 78.6 \\
\bottomrule
\end{tabular}\cmidrule(lr){i-j} draws a rule from column i to j with shortened ends so adjacent rules don't touch. Source: booktabs PDF §\cmidrule.
\usepackage{longtable}
\usepackage{booktabs}
\begin{longtable}{l c c}
\caption{Caption.} \label{tab:long} \\
\toprule
Header A & Header B & Header C \\
\midrule
\endfirsthead
\toprule
Header A & Header B & Header C \\
\midrule
\endhead
\bottomrule
\endfoot
Row 1 & x & y \\
Row 2 & x & y \\
...
\end{longtable}\usepackage{rotating}
\begin{sidewaystable}[t]
\centering
\caption{Wide table caption.}
\label{tab:wide}
\begin{tabular}{l c c c c c c}
\toprule
...
\bottomrule
\end{tabular}
\end{sidewaystable}For ad-hoc tables, the simplest path is a one-shot conversion. Given data.csv:
dataset,baseline,ours
CIFAR-10,92.1,94.7
CIFAR-100,71.2,75.4
ImageNet,76.3,78.2Conversion via awk:
awk -F',' 'NR==1{ for(i=1;i<=NF;i++) h[i]=$i; printf "%s",h[1]; for(i=2;i<=NF;i++) printf " & %s", h[i]; print " \\\\"; print "\\midrule"; next } { printf "%s",$1; for(i=2;i<=NF;i++) printf " & %s", $i; print " \\\\" }' data.csvOr use the pgfplotstable package for live CSV reading inside the .tex:
\usepackage{pgfplotstable}
\usepackage{booktabs}
\pgfplotstabletypeset[
col sep=comma,
every head row/.style={before row=\toprule, after row=\midrule},
every last row/.style={after row=\bottomrule},
columns/dataset/.style={string type, column name=Dataset},
columns/baseline/.style={column name=Baseline (\%), fixed, fixed zerofill, precision=1},
columns/ours/.style={column name=Ours (\%), fixed, fixed zerofill, precision=1},
]{data.csv}The pgfplotstable route is best when the CSV is updated regularly — recompile and the table updates.
\footnote doesn't work inside floats. Use threeparttable:
\usepackage{threeparttable}
\begin{table}[t]
\centering
\caption{Caption.}
\begin{threeparttable}
\begin{tabular}{l c c}
\toprule
Method & Acc & F1 \\
\midrule
Baseline & 71.2 & 70.4 \\
Ours\tnote{a} & 86.4 & 85.7 \\
\bottomrule
\end{tabular}
\begin{tablenotes}\small
\item[a] Trained for 100 epochs.
\end{tablenotes}
\end{threeparttable}
\end{table}\usepackage{multirow}
\begin{tabular}{l c c c}
\toprule
Group & Method & Acc & F1 \\
\midrule
\multirow{2}{*}{Strong} & Baseline & 71.2 & 70.4 \\
& Ours & 86.4 & 85.7 \\
\midrule
\multirow{2}{*}{Weak} & Baseline & 65.0 & 64.1 \\
& Ours & 79.2 & 78.6 \\
\bottomrule
\end{tabular}\hline between booktabs rules — the calibrated weights are spoiled by \hline's default thickness.| in column specs — academic style omits vertical rules.S columns assume the value is a number; non-numeric headers must be wrapped in {...}.For unusual table shapes (cross-tabulations, tables with rotated headers, mixed text+numerics), delegate to /academic-latex:docs-lookup. Booktabs / siunitx / pgfplotstable manuals have answers for everything.
2026-05-09 — booktabs PDF (Simon Fear), siunitx PDF, pgfplotstable manual.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.