问题
为什么我收到多个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 问题,但一些背景可能会有所帮助。
我想动态创建一个表,其中包含跨多个分解变量的观测频率计数,并且每个分解变量之间有一些垂直空间。
这表包帮助我使用一个不错的公式界面来实现这一点,让人想起 SAS proc tabulate。RowFactor()
带有suppressfirst=FALSE
和spacing=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}