LaTeX表格单元格中使用parbox命令报错如何解决
问题说明
编写甘特图LaTeX最小工作示例(MWE)时,取消注释代码中被注释的\parbox相关代码块后,编译抛出错误:
! Missing number, treated as zero.\c@ }
暂无法确认错误是未引入必要宏包,还是代码写法问题导致。
可复现原始代码
\documentclass[11pt]{report} \usepackage{boldline,multirow} \usepackage[table]{xcolor} \usepackage{booktabs} \usepackage{pbox} \usepackage[left=2.5cm,top=2.5cm,bottom=2.5cm,right=2.5cm ]{geometry} \begin{document} \begin{tabular}{| p{4.4cm}V{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}} \hline \raggedleft Months & \multicolumn{4}{V{2.5}cV{2.5}}{1} & \multicolumn{4}{cV{2.5}}{2} & \multicolumn{4}{cV{2.5}}{3} & \multicolumn{4}{cV{2.5}}{4} & \multicolumn{4}{cV{2.5}}{5} & \multicolumn{4}{cV{2.5}}{6} \\ \hline %\parbox{.99\linewidth}{ %\begin{enumerate}[noitemsep, label=\alph*), leftmargin=*] %\item First programme execution %\item First program completion %\end{enumerate} %} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & & & & & & & & & & & & & \\ %\parbox{.99\linewidth}{ %\begin{enumerate}[noitemsep, label=\alph*), leftmargin=*] %\item second programme execution %\item second program completion %\end{enumerate} %} & & & & & & & & & & & & & & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} \\ \hline \end{tabular} \end{document}
报错原因
报错由两个问题共同导致:
- 核心原因:代码中
enumerate环境使用了noitemsep、自定义标签格式、leftmargin等键值对形式的配置参数,但导言区未加载enumitem宏包。LaTeX原生的enumerate环境不支持这类键值配置,解析参数时会误将格式配置识别为计数器赋值,触发\c@(LaTeX计数器命令前缀)相关的缺数字报错。 - 冗余写法问题:表格第一列已经定义为
p{4.4cm}段落列,本身就支持列表、多行文本等段落模式内容,不需要额外嵌套\parbox,多余的嵌套反而容易引发宽度溢出、对齐异常。
修复方案
- 在导言区添加
\usepackage{enumitem},加载列表自定义功能支持。 - 移除第一列单元格内多余的
\parbox嵌套,直接写入enumerate列表即可。如果确实需要用\parbox控制宽度,建议添加顶部对齐参数t,即\parbox[t]{<宽度值>}{内容},避免和同行其他单元格垂直对齐错乱。
修复后可正常编译的代码
\documentclass[11pt]{report} \usepackage{boldline,multirow} \usepackage[table]{xcolor} \usepackage{booktabs} \usepackage{pbox} \usepackage{enumitem} % 新增,提供列表自定义参数支持 \usepackage[left=2.5cm,top=2.5cm,bottom=2.5cm,right=2.5cm]{geometry} \begin{document} \begin{tabular}{| p{4.4cm}V{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}ccccV{2.5}} \hline \raggedleft Months & \multicolumn{4}{V{2.5}cV{2.5}}{1} & \multicolumn{4}{cV{2.5}}{2} & \multicolumn{4}{cV{2.5}}{3} & \multicolumn{4}{cV{2.5}}{4} & \multicolumn{4}{cV{2.5}}{5} & \multicolumn{4}{cV{2.5}}{6} \\ \hline \begin{enumerate}[noitemsep, label=\alph*), leftmargin=*] \item First programme execution \item First program completion \end{enumerate} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & \cellcolor{blue!100} & & & & & & & & & & & & & \\ \begin{enumerate}[noitemsep, label=\alph*), leftmargin=*] \item second programme execution \item second program completion \end{enumerate} & & & & & & & & & & & & & & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} & \cellcolor{green!100} \\ \hline \end{tabular} \end{document}
内容的提问来源于stack exchange,提问作者Zilore Mumba
相关产品推荐
相关产品推荐

