5

当我使用考试包生成问题时,即使有特殊字符,我也可以用英语完美地做题。例如,我可以使用考试包编译的 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 编译,正确显示重音:

使用 RStudio 编译

但是当我尝试时:

exams2pdf('file.Rmd', encoding = 'utf8')

它不起作用。

用函数exams()编译

有人可以帮我解决这个问题吗?

4

2 回答 2

5

我用参数尝试了不同的方法,header但没有一个给我正确的输出。通过 YAML 标头 ( ) 添加 LaTeX 命令也不起作用。所以我做了“艰难的方式”:inputsexams2pdf()header-includes


转到您的 R 库并找到保存包考试的位置。在里面导航到 tex 文件夹。在那里您会找到考试使用的不同模板。创建默认模板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 命令,这也应该适用于其他语言。

于 2016-09-08T08:42:16.470 回答
3

感谢@MartinDabbelJuSmelter 的回复,他基本上捕捉到了正在发生的事情。但是,对此有更简单的解决方案。最简单的是:

exams2pdf("file.Rmd", encoding = "UTF-8", template = "plain8")

这会导致所需的输出。现在为什么这如此复杂,为什么它的文档记录如此糟糕?

由于exams封装的模块化结构,它很复杂。有很多不同的方法可以组合不同的构建块,像这样简单的事情需要两个参数。首先,您必须声明UTF-8 格式file.Rmdencoding其次,你必须使用template支持 UTF-8 的。该exams软件包附带一个plain启用 UTF-8 的简单模板。

没有更多不同编码等的 LaTeX 模板,因为我们预计几乎所有用户都会想要使用他们自己的自定义模板。例如,显示他们的大学或课程的名称或使用特定的样式/字体/等。

如果您只有单选 ( schoice) 或多选 ( mchoice) 问题,那么还有一种exams2nops提供标准化格式的格式,使用起来更简单(但自定义也更少)。印象见:

exams2nops(c("anova.Rmd", "tstat2.Rmd"),
  language = "pt", encoding = "UTF-8")

因此,您不能为此使用您的num问题file.Rmd。但是,如果你把它变成一个schoice问题,最大的好处是你可以自动扫描和评估exams2nops.

所以现在是阿喀琉斯之踵:糟糕的文档。在我的辩护中,我不得不说,在第 2.3 节(创建第一个考试)中vignette("exams2", package = "exams")简要讨论了编码问题,建议查看输出exams_skeleton()以了解其工作原理。所以在你的情况下

exams_skeleton(markup = "markdown", encoding = "UTF-8")

应该提供一些有用的例子。

但可以说,这应该更容易找到。一个更好的文档网页exams在我的愿望清单上很重要 - 特别是对于指导新手 - 但今年夏天我没有找到必要的时间。希望明年...

PS:Rmd 文件开头的以下行是完全不必要的,被忽略exams

---
output: pdf_document
---

每个练习的输出由exams2xyz函数决定,而不是练习文件本身。例如:

exams2html("foo.Rmd", encoding = "UTF-8", template = "plain8")

函数(而不是 Rmd 文件)决定这一点的原因很简单:用户通常希望构建大量问题,然后可能希望在 PDF 文件(用于笔试)或 Moodle中使用相同的问题或通过 ARSnova 等进行现场投票。如果您每次都必须为此修改问题池(或保留副本),那将相当麻烦。

于 2016-09-09T14:51:18.233 回答