我收到了一个表格模板,我打算使用 Java 动态生成数据。但是当表格变得太大时,使用 LaTeX 编译会失败。这个模板的具体特点是,它将表格宽度拉伸到最大页面宽度,并且所有数据列(第一列除外)的列宽都相同。
这是完整模板的最小版本,但仍然可以正常工作:
\documentclass[final,authoryear,3p,twocolumn]{elsarticle}
\usepackage{amssymb,amsmath}
\usepackage{calc}
\usepackage{array}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
\usepackage{eurosym}
\usepackage{microtype}
\usepackage{needspace}
\usepackage{fp}
\usepackage{graphicx}
\DeclareGraphicsExtensions{.pdf}
\input{pgfexternal}
\newcommand\tabt{\rule{0pt}{2.6ex}}
\newcommand\tabb{\rule[-1.2ex]{0pt}{0pt}}
\begin{document}
\begin{table*}[t]
\footnotesize
\begin{tabular*}{\linewidth}{@{}L{2em}@{}*9{R{(\linewidth-2em)/9}@{}}}\hline\tabt
$i$ & $1$ & $2$ & $3$ & $4$ & $5$ & $6$ & $7$ & $8$ & $9$\tabb\tabularnewline\hline\tabt
$1$ & & $48.87$ & $0.01$ & $0.05$ & $1.23$ & $0.00$ & $0.20$ & $5.67$ & $2.35$\tabularnewline
\end{tabular*}
\end{table*}
\end{document}
但是,当通过另一列扩展此示例时,表格看起来将类似于以下示例,但它失败了:
\begin{table*}[t]
\footnotesize
\begin{tabular*}{\linewidth}{@{}L{2em}@{}*10{R{(\linewidth-2em)/10}@{}}}\hline\tabt
$i$ & $1$ & $2$ & $3$ & $4$ & $5$ & $6$ & $7$ & $8$ & $9$ & a\tabb\tabularnewline\hline\tabt
$1$ & & $48.87$ & $0.01$ & $0.05$ & $1.23$ & $0.00$ & $0.20$ & $5.67$ & $2.35$ & b\tabularnewline
\end{tabular*}
\end{table*}
无论我添加多少列,这都会失败。到目前为止,对我来说,除以 10 似乎是一个问题。难道 LaTeX 默认情况下无法正确处理这个问题?我该如何解决这个问题,并使用此模板让更大的表格也能正常工作。或者这是我尚未发现的其他问题?感谢您的帮助!
答案1
*10
是*{1}{0}
因此0
将被视为列说明符重复 1 次并生成
! Package array Error: Illegal pream-token (0): `c' used.
使用*{10}
由于你无论如何都要强制宽度,你可以使用tabular
而不是`tabular*,这会导致你因舍入误差而成为小数
Underfull \hbox (badness 10000) in alignment at lines 24--27