问题

问题

问题

目前,我正在尝试缩短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

我遇到了同样的问题,发现解决方案很简单,即我忘记在表格末尾添加换行符。尝试在表格内容末尾添加换行符或 \\。

相关内容