如何使用带有葡萄牙语口音的 R 包考试?
How to use R package exams with portuguese accents?
当我使用包 exams 生成问题时,即使有特殊字符,我也可以完美地用英语完成。例如,我可以用 exams 包编译的 Rnw 问题:
<<echo=FALSE, results=hide>>=
## DATA GENERATION
P <- round(runif(n = 1, min = 1000, max = 2000), digits = 2)
S <- round(runif(n = 1, min = P + 500, max = 3000), digits = 2)
## QUESTION/ANSWER GENERATION
i <- round((S - P)/P, digits = 2)*100
@
\begin{question}
Qual \'e a taxa de juros simples obtida por uma aplica\c{c}\~ao de \textdollar $\Sexpr{P}$ que, ap\'os um ano, produz um montante de \textdollar$\Sexpr{S}$?
\end{question}
\begin{solution}
Os juros s\~ao calculados por:
\begin{equation}
S = P(1+i \times n) \Rightarrow S = P + Pin \Rightarrow
\end{equation}
\begin{equation}
Pin = S - P \Rightarrow
i = \frac{S-P}{Pn} \Rightarrow i = \frac{S-P}{P}
\end{equation}
O valor absotulo dos juros \'e $\Sexpr{i}$\%.
\end{solution}
%% META-INFORMATION
%% \extype{num}
%% \exsolution{\Sexpr{fmt(abs(tstat), 3)}}
%% \exname{t statistic}
%% \extol{0.01}
例如,当我需要 ç 时,我就使用 \c{c} 等等。但是,我一直在尝试使用 Rmarkdown 而不是 Rnw 文件。和 Rmd 中的相同示例:
---
output: pdf_document
---
```{r data generation, echo = FALSE, results = "hide"}
P <- round(runif(n = 1, min = 1000, max = 2000), digits = 2)
S <- round(runif(n = 1, min = P + 500, max = 3000), digits = 2)
i <- round((S - P)/P, digits = 2)*100
```
Question
========
Qual é a taxa de juros simples obtida por uma aplicação de $`r P`
Solution
========
Os juros são calculados por:
\begin{equation}
S = P(1+i \times n) \Rightarrow S = P + Pin \Rightarrow
\end{equation}
\begin{equation}
Pin = S - P \Rightarrow
i = \frac{S-P}{Pn} \Rightarrow i = \frac{S-P}{P}
\end{equation}
O valor absotulo dos juros é `r i`%.
Meta-information
================
extype: num
exsolution: `r round(i, digits = 3)`
exname: Euclidean distance
extol: 0.01
我可以使用 RStudio 编译并正确显示重音符号:
但是当我尝试时:
exams2pdf('file.Rmd', encoding = 'utf8')
没用。
有人可以帮我解决这个问题吗?
我用 exams2pdf()
的参数 header
和 inputs
尝试了不同的方法,但是其中的 none 给了我正确的输出。通过 YAML header (header-includes
) 添加 LaTeX 命令也不起作用。所以我做到了 "hard way":
转到您的 R 库并找到包 exams 的保存位置。在里面导航到 tex 文件夹。在那里您会找到 exams 使用的不同模板。创建默认模板 plain.tex 的副本,并将此副本命名为 plain_pt.tex。在该文件中添加
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[portuguese]{babel}
到序言。保存文件。
我的 OSX 机器上的完整路径:
/Library/Frameworks/R.framework/Versions/3.3/Resources/library/exams/tex
在Linux可以是:
~/R/x86_64-pc-linux-gnu-library/3.3/Resources/library/exams/tex
现在,在调用 exams2pdf
时,您可以使用 template = 'plain_pt'
选择新模板。
通过添加适当的 LaTeX 命令,这应该也适用于其他语言。
感谢@MartinDabbelJuSmelter 的回复,基本上捕捉到了正在发生的事情。但是,有更简单的解决方案。最简单的是:
exams2pdf("file.Rmd", encoding = "UTF-8", template = "plain8")
这会导致所需的输出。现在为什么这么复杂,为什么它的文档如此少?
由于exams
包的模块化结构,所以比较复杂。有很多不同的方法可以组合不同的构建块,以至于像这样简单的事情需要两个参数。首先,您必须声明 file.Rmd
在 encoding
UTF-8 中。其次,您必须使用支持 UTF-8 的 template
。 exams
软件包附带了一个启用了 UTF-8 的简单 plain
模板。
没有更多不同编码的 LaTeX 模板等,因为我们预计几乎所有用户都希望使用自己的自定义模板。例如,显示他们的大学名称或课程名称或使用特定的 style/font/etc.
如果您只有单选题 (schoice
) 或多选题 (mchoice
),那么还有 exams2nops
提供标准化格式使用起来更简单(但定制也更少)。有关印象,请参阅:
exams2nops(c("anova.Rmd", "tstat2.Rmd"),
language = "pt", encoding = "UTF-8")
因此您不能为此使用您的 num
问题 file.Rmd
。但是如果你把它变成一个 schoice
问题的最大好处是你可以自动扫描和评估 exams2nops
.
所以现在是致命弱点:糟糕的文档。在我的辩护中,我不得不说在 vignette("exams2", package = "exams")
的第 2.3 节(创建第一次考试)中简要讨论了编码问题,建议查看 exams_skeleton()
的输出以了解其工作原理.所以在你的情况下
exams_skeleton(markup = "markdown", encoding = "UTF-8")
应该提供了一些有用的示例。
但可以说这应该更容易找到。一个更好的 exams
文档网页在我的愿望清单上排在首位 - 特别是对于指导新手 - 但今年夏天我没有找到必要的时间。希望明年...
P.S.: Rmd 文件开头的以下行是完全不必要的,并被 exams
忽略:
---
output: pdf_document
---
每个练习的渲染输出由 exams2
xyz 函数决定,而不是练习文件本身。例如:
exams2html("foo.Rmd", encoding = "UTF-8", template = "plain8")
函数(而不是 Rmd 文件)决定这一点的原因很简单:用户通常希望构建大量问题,然后可能希望使用 相同 PDF 文件中的问题(用于笔试)或用于 Moodle 或通过 ARSnova 等进行现场投票。如果您每次都必须为此修改题库(或保留副本),那将是相当麻烦的。
当我使用包 exams 生成问题时,即使有特殊字符,我也可以完美地用英语完成。例如,我可以用 exams 包编译的 Rnw 问题:
<<echo=FALSE, results=hide>>=
## DATA GENERATION
P <- round(runif(n = 1, min = 1000, max = 2000), digits = 2)
S <- round(runif(n = 1, min = P + 500, max = 3000), digits = 2)
## QUESTION/ANSWER GENERATION
i <- round((S - P)/P, digits = 2)*100
@
\begin{question}
Qual \'e a taxa de juros simples obtida por uma aplica\c{c}\~ao de \textdollar $\Sexpr{P}$ que, ap\'os um ano, produz um montante de \textdollar$\Sexpr{S}$?
\end{question}
\begin{solution}
Os juros s\~ao calculados por:
\begin{equation}
S = P(1+i \times n) \Rightarrow S = P + Pin \Rightarrow
\end{equation}
\begin{equation}
Pin = S - P \Rightarrow
i = \frac{S-P}{Pn} \Rightarrow i = \frac{S-P}{P}
\end{equation}
O valor absotulo dos juros \'e $\Sexpr{i}$\%.
\end{solution}
%% META-INFORMATION
%% \extype{num}
%% \exsolution{\Sexpr{fmt(abs(tstat), 3)}}
%% \exname{t statistic}
%% \extol{0.01}
例如,当我需要 ç 时,我就使用 \c{c} 等等。但是,我一直在尝试使用 Rmarkdown 而不是 Rnw 文件。和 Rmd 中的相同示例:
---
output: pdf_document
---
```{r data generation, echo = FALSE, results = "hide"}
P <- round(runif(n = 1, min = 1000, max = 2000), digits = 2)
S <- round(runif(n = 1, min = P + 500, max = 3000), digits = 2)
i <- round((S - P)/P, digits = 2)*100
```
Question
========
Qual é a taxa de juros simples obtida por uma aplicação de $`r P`
Solution
========
Os juros são calculados por:
\begin{equation}
S = P(1+i \times n) \Rightarrow S = P + Pin \Rightarrow
\end{equation}
\begin{equation}
Pin = S - P \Rightarrow
i = \frac{S-P}{Pn} \Rightarrow i = \frac{S-P}{P}
\end{equation}
O valor absotulo dos juros é `r i`%.
Meta-information
================
extype: num
exsolution: `r round(i, digits = 3)`
exname: Euclidean distance
extol: 0.01
我可以使用 RStudio 编译并正确显示重音符号:
但是当我尝试时:
exams2pdf('file.Rmd', encoding = 'utf8')
没用。
有人可以帮我解决这个问题吗?
我用 exams2pdf()
的参数 header
和 inputs
尝试了不同的方法,但是其中的 none 给了我正确的输出。通过 YAML header (header-includes
) 添加 LaTeX 命令也不起作用。所以我做到了 "hard way":
转到您的 R 库并找到包 exams 的保存位置。在里面导航到 tex 文件夹。在那里您会找到 exams 使用的不同模板。创建默认模板 plain.tex 的副本,并将此副本命名为 plain_pt.tex。在该文件中添加
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[portuguese]{babel}
到序言。保存文件。
我的 OSX 机器上的完整路径:
/Library/Frameworks/R.framework/Versions/3.3/Resources/library/exams/tex
在Linux可以是:
~/R/x86_64-pc-linux-gnu-library/3.3/Resources/library/exams/tex
现在,在调用 exams2pdf
时,您可以使用 template = 'plain_pt'
选择新模板。
通过添加适当的 LaTeX 命令,这应该也适用于其他语言。
感谢@MartinDabbelJuSmelter 的回复,基本上捕捉到了正在发生的事情。但是,有更简单的解决方案。最简单的是:
exams2pdf("file.Rmd", encoding = "UTF-8", template = "plain8")
这会导致所需的输出。现在为什么这么复杂,为什么它的文档如此少?
由于exams
包的模块化结构,所以比较复杂。有很多不同的方法可以组合不同的构建块,以至于像这样简单的事情需要两个参数。首先,您必须声明 file.Rmd
在 encoding
UTF-8 中。其次,您必须使用支持 UTF-8 的 template
。 exams
软件包附带了一个启用了 UTF-8 的简单 plain
模板。
没有更多不同编码的 LaTeX 模板等,因为我们预计几乎所有用户都希望使用自己的自定义模板。例如,显示他们的大学名称或课程名称或使用特定的 style/font/etc.
如果您只有单选题 (schoice
) 或多选题 (mchoice
),那么还有 exams2nops
提供标准化格式使用起来更简单(但定制也更少)。有关印象,请参阅:
exams2nops(c("anova.Rmd", "tstat2.Rmd"),
language = "pt", encoding = "UTF-8")
因此您不能为此使用您的 num
问题 file.Rmd
。但是如果你把它变成一个 schoice
问题的最大好处是你可以自动扫描和评估 exams2nops
.
所以现在是致命弱点:糟糕的文档。在我的辩护中,我不得不说在 vignette("exams2", package = "exams")
的第 2.3 节(创建第一次考试)中简要讨论了编码问题,建议查看 exams_skeleton()
的输出以了解其工作原理.所以在你的情况下
exams_skeleton(markup = "markdown", encoding = "UTF-8")
应该提供了一些有用的示例。
但可以说这应该更容易找到。一个更好的 exams
文档网页在我的愿望清单上排在首位 - 特别是对于指导新手 - 但今年夏天我没有找到必要的时间。希望明年...
P.S.: Rmd 文件开头的以下行是完全不必要的,并被 exams
忽略:
---
output: pdf_document
---
每个练习的渲染输出由 exams2
xyz 函数决定,而不是练习文件本身。例如:
exams2html("foo.Rmd", encoding = "UTF-8", template = "plain8")
函数(而不是 Rmd 文件)决定这一点的原因很简单:用户通常希望构建大量问题,然后可能希望使用 相同 PDF 文件中的问题(用于笔试)或用于 Moodle 或通过 ARSnova 等进行现场投票。如果您每次都必须为此修改题库(或保留副本),那将是相当麻烦的。