问题

问题

问题

为什么我收到多个misplaced \noalign错误?

可重现的示例

\documentclass{scrartcl}
\usepackage{longtable}
\usepackage{booktabs}

\begin{document}

\section{Table test}

\begin{longtable}{llc}
\hline
 &  & \multicolumn{1}{c}{All} \\ 
\hline
m & \rule{0pt}{1.7\normalbaselineskip}April  & $1$ \\
 & \nopagebreak July  & $1$ \\
 & \nopagebreak June  & $1$ \\
l & \rule{0pt}{1.7\normalbaselineskip}C  & $1$ \\
 & \nopagebreak F  & $1$ \\
 & \nopagebreak S  & $1$ \\
nums & \rule{0pt}{1.7\normalbaselineskip}28  & $2$ \\
 & \nopagebreak 62  & $1$ \\
\hline 
\end{longtable}
\end{document}

期望输出(通过可重复的研究工具链 - 见下文)

期望输出

故障排除---手动文本编辑

它似乎misplaced /noalign错误可能是令人恼火. My\hline前面是\\评论关于booktabs在此处申请?如果是这样,我该如何解决?更改\\\\*\tabularnewline似乎没有帮助。据我所知,这不是一个\centering 问题

删除\nopagebreak似乎可以让错误消失,但我认为这对我来说不是正确的解决方案,因为该解决方案必须在使用 longtable 的报告上下文中处理长数据表。请参见下文。

语境

我相信这确实是一个 LaTeX 问题而不是 R 问题,但一些背景可能会有所帮助。

我正在尝试使用 R 和杂项包。

我想动态创建一个表,其中包含跨多个分解变量的观测频率计数,并且每个分解变量之间有一些垂直空间。

包帮助我使用一个不错的公式界面来实现这一点,让人想起 SAS proc tabulate。RowFactor()带有suppressfirst=FALSEspacing=X参数的函数产生必要的输出,只要我指定nopagebreak = ""而不是nopagebreak = "\\nopagebreak "。不幸的是,我的一些表格很长,跨越了分页符。tables 包支持 LaTeX长桌包,如表格第 26-28 页所示小插图;但它似乎不适用于我的数据表或我的最小可重现示例。

可重现的 R/Sweave 代码:

\documentclass{scrartcl}
\usepackage{longtable}
\usepackage{booktabs}

\begin{document}
\SweaveOpts{concordance=TRUE}
\section{Table test}

<<test, echo=TRUE, results=tex>>=
options(width=80)
require(tables)
set.seed(10)
df <- data.frame(id=seq(1,3,1), 
                 m=sample(month.name, 3, replace=TRUE), 
                 l=sample(LETTERS, 3, replace=TRUE), 
                 nums=sample(1:100, 3, replace=TRUE))
latex(
  tabular(
    RowFactor(m, 
              suppressfirst=FALSE,
              ## default argument
              nopagebreak = "\\nopagebreak ",
              ## works if specify the following
              #nopagebreak = "",
              spacing=3)
    +RowFactor(l, 
              suppressfirst=FALSE,
              ## default argument
              nopagebreak = "\\nopagebreak ",
              ## works if specify the following
              #nopagebreak = "",
              spacing=3)
    +RowFactor(nums, 
               suppressfirst=FALSE,
               ## default argument
               nopagebreak = "\\nopagebreak ",
               ## works if specify the following
               #nopagebreak = "",
               spacing=3) ~1, data=df), 
  options=list(tabular="longtable")
)

@
\section{Session info}
<<sessionInfo>>=
sessionInfo()
@


\end{document}

答案1

所有\nopagebreak的 都是不受欢迎的:

\documentclass{scrartcl}
\usepackage{longtable}
\usepackage{booktabs}

\begin{document}

\section{Table test}

\begin{longtable}{llc}
\hline
 &  & \multicolumn{1}{c}{All} \\ 
\hline
m & \rule{0pt}{1.7\normalbaselineskip}April  & $1$ \\
 &  July  & $1$ \\
 &  June  & $1$ \\
l & \rule{0pt}{1.7\normalbaselineskip}C  & $1$ \\
 &  F  & $1$ \\
 &  S  & $1$ \\
nums & \rule{0pt}{1.7\normalbaselineskip}28  & $2$ \\
 & 62  & $1$ \\
\hline 
\end{longtable}
\end{document}

在此处输入图片描述

答案2

这不是原始帖子的答案,但我来这里用谷歌搜索“Longtable misplaced noalign”,所以我的最终解决方案可能对某些人有用。

就我而言,我需要\\ 和。这对我来说似乎非常违反直觉,所以如果有人能解释原因或告诉我这在哪里有记载\caption\label我将不胜感激。

\documentclass{article}
\usepackage{booktabs}
\usepackage{longtable}
\begin{document}
\begin{longtable}{ll}
% Uncomment the \\ on the next line and the misplaced \noalign disappears!
\caption{Captions should appear on top of tables}\label{tbl:table}%\\
    \toprule
                  & foo \\
    \midrule
    \endfirsthead
    bar           & 1 \\
    baz           & 2 \\
    \bottomrule
\end{longtable}
\end{document}

相关内容