问题
目前,我正在尝试缩短tabularx
具有预定义标题的小型表的创建时间,但不知何故,尝试使用环境tabularx
,即使我使用了\tabularx
和\endtabularx
命令,但在我自己的内部也会产生我无法理解的错误。
我目前的做法是:
\newenvironment{predtable}[1]%
{%
\par\nolinenumbers%
\captionof{table}{#1}%
\tabularx{\textwidth}{|l| c c c |}%
\hline%
& Heading & Heading & Heading \\%
\hline%
}%
{%
\hline%
\endtabularx%
\linenumbers%
}
这本来是为了简化表格的创建,比如写
\begin{predtable}
item1 & item2 & item3 & item4\\
\end{predtable}
就足够了。
但是,虽然我在定义环境时没有收到错误,但使用它却会出现错误Misplaced \noalign \end{predtable}
。
工作示例
\documentclass[12pt,a4paper]{article}
\usepackage[top=2.5cm, left=2.5cm, bottom=2cm, right=2cm]{geometry}
\usepackage{array}
\usepackage{tabularx}
\usepackage[font=footnotesize,labelfont=sc]{caption}
\usepackage{subcaption}
\usepackage[pagewise, modulo]{lineno}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newenvironment{predtable}[1]%
{%
\par\nolinenumbers%
\captionof{table}{#1}%
\tabularx{\textwidth}{|l| C C C |}%
\hline%
& Heading 1 & Heading 1 & Heading 1 \tabularnewline%
\hline%
}%
{%
\hline%
\endtabularx%
\linenumbers%
}
\begin{document}
\begin{predtable}{Caption goes here!}
Label & Contents & go & here!\tabularnewline
\end{predtable}
\end{document}
line 26: Misplaced \noalign \end{predtable}
答案1
我觉得将任何对齐材料(包括\hline
)放在这里的结束子句中都是行不通的,这是因为tabularx
表格材料的扫描方式是提前进行的。
幸运的是,有一种更简单的方法,使用environ
包。首先是一个简单的基本示例:
\documentclass[12pt,a4paper]{article}
\usepackage{tabularx,environ}
\NewEnviron{simplepredtable}{%
\begin{tabularx}{0.9\textwidth}{|l| XXX |}
\hline
& Heading 1 & Heading 1 & Heading 1 \tabularnewline
\hline
\BODY
\hline
\end{tabularx}
}
\begin{document}
\begin{simplepredtable}
Label & Contents & go & here!\tabularnewline
\end{simplepredtable}
\end{document}
该environ
包将新环境的文本收集到命令中\BODY
,然后可以将其插入到其他代码中。这使我们能够编写一个看起来像通常的块\begin{xtabular}...\end{xtabular}
。我缩小了表格的宽度,只是为了避免框过满。
对于您的情况,工作原理非常相似,我们也可以传递您的标题参数:
\documentclass[12pt,a4paper]{article}
\usepackage[top=2.5cm, left=2.5cm, bottom=2cm, right=2cm]{geometry}
\usepackage{tabularx,environ}
\usepackage[font=footnotesize,labelfont=sc]{caption}
\usepackage{subcaption}
\usepackage[pagewise,modulo]{lineno}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\NewEnviron{predtable}[1]{%
\par\nolinenumbers%
\captionof{table}{#1}%
\begin{tabularx}{\textwidth}{|l| C C C |}
\hline
& Heading 1 & Heading 1 & Heading 1 \tabularnewline
\hline
\BODY
\hline
\end{tabularx}
\vspace{\partopsep}
\par\linenumbers%
}
\usepackage{lipsum} %For demonstration text
\begin{document}
\linenumbers
\lipsum[1]
\begin{predtable}{Caption goes here!}
Label & Contents & go & here!\tabularnewline
\end{predtable}
\lipsum[2]
\end{document}
包lipsum
已添加,因此我们得到一些文本来演示行号,注意额外的\par
命令。我还在表格后面留了一些垂直空间,这样它就不会与下面的文本冲突。但是,我会认真考虑将它包装在环境中center
,这本身会提供一些垂直间距。
答案2
我遇到了同样的问题,发现解决方案很简单,即我忘记在表格末尾添加换行符。尝试在表格内容末尾添加换行符或 \\。