我正在尝试在rmarkdown
中生成一个可以用多种(自然)语言生成输出的文档,它应该从data.frame
的一个翻译中提取文本。
data.frame
应包含每种语言的列以及每行上相同文本的翻译,例如
EN <- c('title', 'author', 'a sentence')
FR <- c('titre', 'auteur', 'une phrase')
translation <- data.frame(EN, FR, stringsAsFactors = FALSE)
应该可以格式化提取的文本,例如
# [desired code here]
应该产生和rmarkdown标题。
编辑:理想情况下,我们可以在YAML前端内容中指定语言
答案 0 :(得分:2)
您可以按照以下方式执行此操作:(有关更多乳胶选项,请参阅ps)
为什么呢? YAML标题逐行评估:) - 请参阅here
---
params:
lang: EN
lang: "`r switch(params$lang, DE = 'de-DE', EN = 'en-US')`"
output: pdf_document
toc: 1
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
lswitch <- function(lang, ...){
switch(lang, ..., stop("No translation privided"))
}
```
# `r lswitch(params$lang, DE = "Dies ist der Titel", EN = "this is the title")`
`r lswitch(params$lang,
DE = "Die folgende Abbildung zeigt die Funktion $f(x) = x^2$",
EN = "The following plot shows the function $f(x) = x^2$"
)
`
```{r plot1_cap, include=FALSE}
plot1_cap <- lswitch(params$lang, DE = "Tolle Abbildung", EN = "Great plot")
```
```{r plot1, fig.cap= plot1_cap}
plot(seq(-5, 5, length.out = 50), seq(-5, 5, length.out = 50)^2,
type = "l", xlab = "x", ylab = "f(x)")
```
# `r lswitch(params$lang, DE = "Zweiter Titel", EN = "Second Title")`
`r lswitch(params$lang,
DE = "Zweiter Abschnitt",
EN = "Second paragraph"
)
`
这导致
如果您将yaml-header更改为
---
params:
lang: DE
lang: "`r switch(params$lang, DE = 'de-DE', EN = 'en-US')`"
output: pdf_document
toc: 1
---
你得到了
PS:更多Latex选项
如果您想使用特定的语言包,可以在YAML标题中添加以下内容:(参见https://stackoverflow.com/a/29163496/3301344)
---
header-includes:
- \usepackage[ngerman]{babel}
---
答案 1 :(得分:-1)
当您在此处提出问题时,我也会将答案添加给您。您可以在onclick
的块中使用cat
,并将翻译后的语言表与格式化的块的内容进行比较。
这样,原始文本在块中突出显示(在rstudio中),以便您可以在长代码中轻松找到文本。使用内联Rcode,一切都是相同的颜色,这是不容易看到的。
results='asis'