我想在报告顶部打印一个小标题。它最终应该是这样的:
该报告由 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}
到目前为止,还不错。但是文本的着色和单元格的颜色需要是动态的。标准如下:
- 如果环境是“触摸”环境,则该单元格应为绿色,文本应为白色。
- 如果环境是“无触摸”环境,则该单元格应为红色,文本应为白色。
- 每个部分中未着色的单元格应为白色背景和黑色文本。
没那么难,我在报告中创建了一个代码块,包裹在 \being{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 代码。运行该 for 循环后,我得到了您在上面看到的数据框。到目前为止,非常好。现在是我的问题所在。我想让那个 R 代码块打印那个 LaTex,以便它被渲染。我认为我使用 print 语句进行简单的 for 循环就可以了,没有骰子。我试过 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
。我猜你必须在表的末尾有 \\
,否则它不喜欢它。
所以...我把 \\
放回去了。现在,但我仍然遇到了转义它的问题。只是一时兴起,我想,好吧,“如果一个\转义另一个\,也许我需要两个,一个来转义每个反斜杠......”我用 \替换了
瞧!有效。呃,这么简单的事情……我想发布解决方案。\\
\\\
最佳答案
全部 - 发布官方答案,我的错误是认为我可以用一个“\”转义“\”,因此,我粘贴到我的字符串“\\”中。但是,由于每个“\”都必须进行转义。我不得不转义第一个“\”,然后转义第二个“\”,因此以“\\”结尾。第一个逃脱了第二个,第三个逃脱了第四个。可能是一些基本的东西,但是如果你不注意的话很容易疏忽。只是想为其他人发布答案。
关于r - 从 RMarkdown 代码块生成 Latex 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42309283/