r - 从 RMarkdown 代码块生成 Latex 代码

标签 r latex knitr r-markdown

我想在报告顶部打印一个小标题。它最终应该是这样的:

enter image description here

该报告由 RMarkdown/Knitr 报告生成。我在 Latex 中混合以获得我需要的格式。数据基于我通过从 REST 查询中提取结果生成的表。 R 中的数据框如下所示:

enter image description here

我编写了 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}

到目前为止,还不错。但是文本的着色和单元格的颜色需要是动态的。标准如下:

  1. 如果环境是“触摸”环境,则该单元格应为绿色,文本应为白色。
  2. 如果环境是“无触摸”环境,则该单元格应为红色,文本应为白色。
  3. 每个部分中未着色的单元格应为白色背景和黑色文本。

没那么难,我在报告中创建了一个代码块,包裹在 \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/

相关文章:

latex - 如何在列表包中强制换行?

r - knitr:如何将子 .Rnw 文档与(相对)图形路径一起使用?

r - Sweave 诉 Knitr 诉 Rmarkdown : code chunk headers

根据第二个数据帧中的值替换数据帧中的 header

r - 如何下载geojson数据并将其读取到R

r - data.table 中圆括号前的点,.()

r - 如何禁用 knitr 图中的透明度?

css - 在 Shiny 中,如何更改范围 slider 标签的格式?

latex - vimrc - 当前工作目录

unicode - Emacs:自动将 LaTeX 替换为 Unicode 符号