表中放错 \noalign 错误,但仅在使用 include{} 时出现

表中放错 \noalign 错误,但仅在使用 include{} 时出现

我使用xtable()R创建一个 LaTeX 表格,.rnw并通过 将其导入到文件中\input{}。如文档所述这里,我试图突出显示取决于一个变量的某个值的行。

我的问题R已经解决了。现在我正在努力解决 LaTeX 问题,这就是我在这里发帖的原因。

以下R代码创建我的表:

  wd <- "yourpath"
  setwd(wd)
# create data frame
  my.df=data.frame(a=c(1:10),b=letters[1:10],c=c(1,1,0,0,1,1,0,0,1,1))

# identify index of rows to highlight
  row.i.1 <- which(my.df$c==1)

print(xtable(my.df),
      only.contents=TRUE,
      include.rownames=FALSE,
      include.colnames=FALSE,
      hline.after=NULL,
      type="latex",
      add.to.row=list(
        pos=list(as.list(row.i.1))[[1]],
        command=rep("\\rowcolor{green!20!white}",
                    length(seq(from=1,to=length(row.i.1),by=1)))),
      sanitize.text.function=identity,
      file="testtbl.tex"

以下是 的内容testtbl.tex

% latex table generated in R 3.0.1 by xtable 1.7-1 package
% Tue Nov 12 10:23:27 2013
   1 & a & 1.00 \\ 
   \rowcolor{green!20!white}  2 & b & 1.00 \\ 
   \rowcolor{green!20!white}  3 & c & 0.00 \\ 
    4 & d & 0.00 \\ 
    5 & e & 1.00 \\ 
   \rowcolor{green!20!white}  6 & f & 1.00 \\ 
   \rowcolor{green!20!white}  7 & g & 0.00 \\ 
    8 & h & 0.00 \\ 
    9 & i & 1.00 \\ 
   \rowcolor{green!20!white} 10 & j & 1.00 \\ 
   \rowcolor{green!20!white}

由于某种原因,行突出显示向下移动了一行。 SO 上的一位评论者指示我更改pos=list(as.list(row.i.1))[[1]],pos=list(as.list(row.i.1-1))[[1]],(添加-1),这给出了正确的分配:

% latex table generated in R 3.0.1 by xtable 1.7-1 package
% Tue Nov 12 10:26:16 2013
  \rowcolor{green!20!white}  1 & a & 1.00 \\ 
   \rowcolor{green!20!white}  2 & b & 1.00 \\ 
    3 & c & 0.00 \\ 
    4 & d & 0.00 \\ 
   \rowcolor{green!20!white}  5 & e & 1.00 \\ 
   \rowcolor{green!20!white}  6 & f & 1.00 \\ 
    7 & g & 0.00 \\ 
    8 & h & 0.00 \\ 
   \rowcolor{green!20!white}  9 & i & 1.00 \\ 
   \rowcolor{green!20!white} 10 & j & 1.00 The problem now comes when I try to include this table in a `.rnw` file. 

(1)如果我将表格直接粘贴到我的.rnw文件中,一切正常:

\documentclass{article}
\usepackage{colortbl, xcolor}
\usepackage{booktabs}
\begin{document}
\begin{table}
  \begin{tabular}{lll}
  \toprule
  var1 & var2 & var3 \\
  \midrule
% latex table generated in R 3.0.1 by xtable 1.7-1 package
% Tue Nov 12 10:26:16 2013
  \rowcolor{green!20!white}  1 & a & 1.00 \\ 
   \rowcolor{green!20!white}  2 & b & 1.00 \\ 
    3 & c & 0.00 \\ 
    4 & d & 0.00 \\ 
   \rowcolor{green!20!white}  5 & e & 1.00 \\ 
   \rowcolor{green!20!white}  6 & f & 1.00 \\ 
    7 & g & 0.00 \\ 
    8 & h & 0.00 \\ 
   \rowcolor{green!20!white}  9 & i & 1.00 \\ 
   \rowcolor{green!20!white} 10 & j & 1.00 \\
  \bottomrule
  \end{tabular}
\end{table}
\end{document}

(2) 但是,如果我尝试通过 导入表include(为了可重复性我需要这样做),我会收到以下错误:Error: testtbl.tex:3: Misplaced \noalign

\documentclass{article}
\usepackage{colortbl, xcolor}
\usepackage{booktabs}
\begin{document}
\begin{table}
  \begin{tabular}{lll}
  \toprule
  var1 & var2 & var3 \\
  \midrule
  \input{testtbl}
  \bottomrule
  \end{tabular}
\end{table}
\end{document}

(3) 如果我返回并使用原始xtable代码,pos=list(as.list(row.i.1))[[1]]从而不减 1,则pdf将会编译,但我的突出显示会发生偏移。

所以我的问题是:为什么我Misplaced \noalign通过 (2) 获取表格内容时会得到一个include错误,而直接将完全相同的内容复制并粘贴到文档 (1) 中时却不会得到错误。 (3) 可以编译(但突出显示不正确)这一事实让我认为这与我尝试纠正偏移突出显示的方式有关。

答案1

问题在于LaTeX \input“不可扩展”。代码中提出了两种解决方案,要么使用TeX原始原语,要么先将文件内容输入到宏中,以便于使用catchfile包。

\documentclass{article}
\usepackage{colortbl, xcolor}
% Plain old TeX is the best!
\makeatletter\let\expandableinput\@@input\makeatother
% alternative
% \usepackage{catchfile}
% \CatchFileDef{\testtblasmacro}{testtbl}{} % don't forget empty braces

\usepackage{booktabs}
\begin{document}\thispagestyle{empty}
\begin{table}
  \begin{tabular}{lll}
  \toprule
  var1 & var2 & var3 \\
  \midrule
  \expandableinput testtbl.tex
% or 
% \testtblasmacro
  \bottomrule
  \end{tabular}
\end{table}
\end{document}

有颜色的表格

相关内容