【发布时间】:2021-08-02 10:51:50
【问题描述】:
我想将 rmarkdown 和 latex 结合起来,并遍历一个数据集列。有什么方法可以处理下面的代码
```{r}
for (i in 1:10){
\begin{itemize}
\item i
\end{itemize}
}
```
【问题讨论】:
标签: r latex r-markdown pdflatex
我想将 rmarkdown 和 latex 结合起来,并遍历一个数据集列。有什么方法可以处理下面的代码
```{r}
for (i in 1:10){
\begin{itemize}
\item i
\end{itemize}
}
```
【问题讨论】:
标签: r latex r-markdown pdflatex
您可以使用pgffor 包来创建循环:
---
output:
pdf_document:
keep_tex: true
header-includes:
- \usepackage{pgffor}
---
\begin{itemize}
\foreach \x in {1,...,10}{
\item \x
}
\end{itemize}
【讨论】:
\begin{itemize} \foreach \x in {1,...,nrow(df)}{ \item df[\x,] } \end{itemize}是这样通过循环列的
一种解决方法
```{r, echo=FALSE, results='asis'}
dfex <- data.frame(x=letters[1:10], y=LETTERS[1:10])
cat("\\begin{itemize}")
for(i in 1:nrow(dfex)){
cat(paste("\\item", dfex[i,1]))
}
cat("\\end{itemize}")
```
需要注意的重要一点:results='asis' 和 cat 确保它生成为干净的乳胶输出而不是 R 输出。需要双 \\ 来明确声明我们想要的是反斜杠而不是一些特殊字符,例如\i.
使用 (knitr::asis_output) 无需 result='asis' 的示例
```{r, echo=FALSE}
latexItemize <- function(items){
knitr::asis_output(paste0(
"\\begin{itemize}",
paste("\\item", items, collapse=" "),
"\\end{itemize}"
))
}
```
```{r, echo=FALSE}
latexItemize(dfex[,2])
```
【讨论】: