为什么从 r-exams 生成的 table 没有出现在 Moodle 中?
Why doesn't the table generated from r-exams appear in Moodle?
我已经在 RMarkdown 中定义了生成频率 table 所需的变量和数据,以便使用 R-exams 将其导出到 Moodle:
xsubio<-c(sample(5:35,5))
xsubi<-sort(xsubio)
frecuencias<-sample(0:30 ,5)
tabla<-data.frame(xsubi,frecuencias)
colnames(tabla)<-c(" Edades" ,"Personas")
通过块我生成 table:
```{r, eval=TRUE,echo=FALSE,results='asis',warning=FALSE,message=FALSE,error=FALSE}
library(exams)
print(xtable(tabla), include.rownames=FALSE)
```
导出为PDF时,使用exams2pdf,完美显示table:
但是,当使用 exams2moodle 导出到 Moodle 时,table 消失了:
我需要做什么才能让它出现?
问题: 您在 Markdown 中进行了格式化练习,并使用 xtable()
在 LaTeX 中插入了一个 table。这种 Markdown + LaTeX 的混合在将练习转换为 PDF 时没有问题。在内部,这保留了 LaTeX table 并在将 LaTeX 渲染为 PDF 之前将 Markdown 部分也转换为 LaTeX。但是,在将 Markdown 练习转换为 Moodle 的 HTML 时,无法自动 。然后转换器不会自动分离 LaTeX 部分以将其转换为 HTML.
简而言之:不同的标记必须充分同步。 PDF 输出的 Markdown+LaTeX 标记有效,HTML 输出的 Markdown+HTML 有效。但更好的是让标记完全同步,即 LaTeX+LaTeX 或 Markdown+Markdown。然后可以将此类练习自动呈现为 PDF 或 HTML。
可能的解决方案:
Markdown+Markdown: Markdown table markup in R/Markdown (Rmd) exercise
我建议您通过 knitr::kable()
而不是 xtable::xtable()
在 Markdown 中简单地生成 tables。因此,table 的代码块简单地变成了
knitr::kable(tabla, format = "markdown")
然后 table 可以在 PDF 和基于 HTML 的格式(如 Moodle)中正确呈现。
LaTeX+LaTeX:LaTeX table R/LaTeX (Rnw) 练习中的标记
如果您希望继续使用 xtable()
生成 LaTeX tables,另一条路线是将 R/exams 练习的标记更改为 Rnw (R/LaTeX)。请参阅 R/exams 网页上的 First steps 教程了解如何操作。
Markdown+自适应:根据输出格式选择正确的table标记
使用 match_exams_call()
函数,您可以在 运行 练习中确定正在使用哪个 exams2xyz()
接口来处理它。所以你可以做
type <- if(match_exams_call() %in% c("exams2pdf", "exams2nops")) "latex" else "html"
print(xtable(tabla), type = type, ...)
然后 LaTeX 或 HTML 格式由 xtable()
生成。
原则上这三种解决方案都有效,但我认为解决方案 1 (kable()
) 是您的情况下最好和最稳健的。
附注: 如果您使用的是 R/exams 2.4-0(撰写本文时的当前开发版本),您可以使用 exams2moodle(...,table = TRUE)
来在 Moodle 中获得更好的 table 格式。
当我需要 PDF 输出时,我使用以下代码片段(type = "latex"):
```{r, eval=TRUE, only.contents=TRUE, echo=FALSE, results='asis',
warning=FALSE, message=FALSE, error=FALSE, comment=FALSE}
library(exams)
library(xtable)
print(xtable(tabla), include.rownames=FALSE, type = "latex", comment=F)
```
并且,当我需要 Moodle 的输出时,我使用以下代码片段(类型 =“html”):
```{r, eval=TRUE, only.contents=TRUE, echo=FALSE, results='asis',
warning=FALSE, message=FALSE, error=FALSE, comment=FALSE}
library(exams)
library(xtable)
print(xtable(tabla), include.rownames=FALSE, type = "html",
comment=F)
```
PDF 格式的结果:
Moodle 的结果:
我已经在 RMarkdown 中定义了生成频率 table 所需的变量和数据,以便使用 R-exams 将其导出到 Moodle:
xsubio<-c(sample(5:35,5))
xsubi<-sort(xsubio)
frecuencias<-sample(0:30 ,5)
tabla<-data.frame(xsubi,frecuencias)
colnames(tabla)<-c(" Edades" ,"Personas")
通过块我生成 table:
```{r, eval=TRUE,echo=FALSE,results='asis',warning=FALSE,message=FALSE,error=FALSE}
library(exams)
print(xtable(tabla), include.rownames=FALSE)
```
导出为PDF时,使用exams2pdf,完美显示table:
但是,当使用 exams2moodle 导出到 Moodle 时,table 消失了:
我需要做什么才能让它出现?
问题: 您在 Markdown 中进行了格式化练习,并使用 xtable()
在 LaTeX 中插入了一个 table。这种 Markdown + LaTeX 的混合在将练习转换为 PDF 时没有问题。在内部,这保留了 LaTeX table 并在将 LaTeX 渲染为 PDF 之前将 Markdown 部分也转换为 LaTeX。但是,在将 Markdown 练习转换为 Moodle 的 HTML 时,无法自动 。然后转换器不会自动分离 LaTeX 部分以将其转换为 HTML.
简而言之:不同的标记必须充分同步。 PDF 输出的 Markdown+LaTeX 标记有效,HTML 输出的 Markdown+HTML 有效。但更好的是让标记完全同步,即 LaTeX+LaTeX 或 Markdown+Markdown。然后可以将此类练习自动呈现为 PDF 或 HTML。
可能的解决方案:
Markdown+Markdown: Markdown table markup in R/Markdown (Rmd) exercise
我建议您通过knitr::kable()
而不是xtable::xtable()
在 Markdown 中简单地生成 tables。因此,table 的代码块简单地变成了knitr::kable(tabla, format = "markdown")
然后 table 可以在 PDF 和基于 HTML 的格式(如 Moodle)中正确呈现。
LaTeX+LaTeX:LaTeX table R/LaTeX (Rnw) 练习中的标记
如果您希望继续使用xtable()
生成 LaTeX tables,另一条路线是将 R/exams 练习的标记更改为 Rnw (R/LaTeX)。请参阅 R/exams 网页上的 First steps 教程了解如何操作。Markdown+自适应:根据输出格式选择正确的table标记
使用match_exams_call()
函数,您可以在 运行 练习中确定正在使用哪个exams2xyz()
接口来处理它。所以你可以做type <- if(match_exams_call() %in% c("exams2pdf", "exams2nops")) "latex" else "html" print(xtable(tabla), type = type, ...)
然后 LaTeX 或 HTML 格式由
xtable()
生成。
原则上这三种解决方案都有效,但我认为解决方案 1 (kable()
) 是您的情况下最好和最稳健的。
附注: 如果您使用的是 R/exams 2.4-0(撰写本文时的当前开发版本),您可以使用 exams2moodle(...,table = TRUE)
来在 Moodle 中获得更好的 table 格式。
当我需要 PDF 输出时,我使用以下代码片段(type = "latex"):
```{r, eval=TRUE, only.contents=TRUE, echo=FALSE, results='asis',
warning=FALSE, message=FALSE, error=FALSE, comment=FALSE}
library(exams)
library(xtable)
print(xtable(tabla), include.rownames=FALSE, type = "latex", comment=F)
```
并且,当我需要 Moodle 的输出时,我使用以下代码片段(类型 =“html”):
```{r, eval=TRUE, only.contents=TRUE, echo=FALSE, results='asis',
warning=FALSE, message=FALSE, error=FALSE, comment=FALSE}
library(exams)
library(xtable)
print(xtable(tabla), include.rownames=FALSE, type = "html",
comment=F)
```
PDF 格式的结果:
Moodle 的结果: