我有一个小标题,想要在报告的顶部打印出来。最终应该看起来像这样:
这份报告是由RMarkdown/Knitr生成的。我混合使用Latex以获得所需的格式。数据基于我从REST查询中提取结果生成的表格。在R中,数据框看起来像:我编写了LaTex代码以获得所需的结果,代码如下:
\begin{spacing}{.7}
\begin{center}
ECC \begin{tabular}{|C|C|} \hline \cellcolor{red} \textbf{\scriptsize \textcolor{white}{TOUCH}} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
DOC \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
CCC \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
GEN \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
IT \begin{tabular}{|C|C|} \hline \textbf{\scriptsize TOUCH} & \textbf{\scriptsize NO TOUCH} \\ \hline \end{tabular} \hspace{.9em}
\end{center}
\end{spacing}
到目前为止,一切都很好。但是文本和单元格颜色需要是动态的。标准如下:
- 如果环境是“触摸”环境,则该单元格应呈绿色,文本应呈白色。
- 如果环境是“非触摸”环境,则该单元格应呈红色,文本应呈白色。
- 每个部分未着色的单元格应具有白色背景和黑色文本。
\begin{center}
和 \begin{spacing}{.7}
项中,看起来像这样:```{r echo = FALSE, warning = FALSE, message=FALSE, results='asis'}
# Add row to data frame to build table options
touchNoTouchDF$tableOption <- NA
for(i in 1:nrow(touchNoTouchDF)) {
if(strsplit(touchNoTouchDF[i,1], ":")[[1]][2] == "Touch") {
touchNoTouchDF[i,2] <- paste(strsplit(touchNoTouchDF[i,1], ":")[[1]][1],"\\begin{tabular}{|C|C|} \\hline \\cellcolor{OliveGreen!85} \\textbf{\\scriptsize \\textcolor{white}{TOUCH}} \& \\textbf{\\scriptsize NO TOUCH} \\newline \\hline \\end{tabular} \\hspace{.9em}")
} else {
touchNoTouchDF[i,2] <- paste(strsplit(touchNoTouchDF[i,1], ":")[[1]][1],"\\begin{tabular}{|C|C|} \\hline \\textbf{\\scriptsize TOUCH} \& \\cellcolor{red} \\textbf{\\scriptsize \\textcolor{white}{NO TOUCH}} \\newline \\hline \\end{tabular} \\hspace{.9em}")
}
}
for(i in 1: nrow(touchNoTouchDF)) {
print(touchNoTouchDF[i,2])
}
```
我在这里做的是创建一个外观,根据第一列包含的内容,在数据框的不同列中生成正确的LaTex代码。运行那个循环后,我得到了你在上面看到的数据框。到目前为止,非常好。现在我的问题来了。我想让R代码块打印出LaTex,以便呈现。我认为使用简单的for循环和print语句就可以解决,但没成功。我尝试了cat(),但也不起作用。
我困惑于如何将最后一行的内容打印出来,以便生成的pdf报告包含该图形表示。有什么想法吗?提示?我相信这很简单,但我已经做了几个小时并且以各种方式搜索了谷歌......提前感谢!
编辑:
如请求所示,下面是我得到的输出。我确保使用cat(),如果我手动运行它,它会毫无问题地将LaTex打印到控制台。当我尝试编织文档时,我得到以下结果:
! Misplaced \noalign.
\hline ->\noalign
{\ifnum 0=`}\fi \let \hskip \vskip \let \vrule \hrule \let...
l.143 ...tbf{\scriptsize NO TOUCH} \newline \hline
pandoc.exe: Error producing PDF
Error: pandoc document conversion failed with error 43
In addition: Warning messages:
1: package 'knitr' was built under R version 3.3.2
2: package 'prettyR' was built under R version 3.3.2
3: package 'magick' was built under R version 3.3.2
4: running command '"C:/Users/z10987/AppData/Local/Pandoc/pandoc" +RTS -K512m -RTS pdfReport.utf8.md --to latex --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output pdfReport.pdf --template "C:\R\R-3.3.1\library\rmarkdown\rmd\latex\default-1.17.0.2.tex" --highlight-style tango --latex-engine xelatex --include-in-header header1.tex --variable graphics=yes' had status 43
Execution halted
我想,也许是因为我在表格中没有转义 "&",但当我尝试时却得到了:
Error: \& is an unrecognized escape character in string...
再次感谢!
更新:
我找到了解决方法——在表格中,每行末尾原本有一个\\
。我试图通过\\\
来转义它,但是出现了错误。我认为\\
代表换行,所以我决定用\\newline
替换它。但是,如果表格末尾没有\\
,它会报错。
所以......我把\\
放回去了。但是我仍然遇到了转义的问题。突发奇想,我想,“如果一个\转义另一个\,也许我需要两个,一个用于转义每个反斜杠......”我用\\\\
替换了\\
,然后就成功了。唉,这么简单的事情......我想把这个解决方案发布出来。
cat()
而不是print()
。展示一下它打印的内容,以及你遇到的错误或问题。 - user2554330