2016-09-08 1 views
5

Когда я использую пакет exams для создания вопросов, я могу сделать это отлично на английском языке даже со специальными символами. Например, вопрос RNW, что я могу скомпилировать с пакетом экзаменов:Как использовать экзамены R-пакета с португальскими акцентами?

<<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} и так далее. НО, я пытался использовать 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 показывая акценты правильно:

compilation with RStudio

, но когда я пытаюсь:

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

это doen't работы ,

compilation with function exams()

Может кто-нибудь помочь мне с этим вопросом?

ответ

2

Благодаря @MartinDabbelJuSmelter за его ответ, который по существу фиксирует происходящее. Однако для этого существуют более простые решения. Самый простой из них:

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

, который приводит к желаемому выходу. Почему же это так сложно и почему так плохо документировано?

Это сложный из-за модульной структуры пакета exams. Существует так много разных способов сочетания различных строительных блоков, что-то простое, так как для этого требуются два аргумента. Во-первых, вы должны заявить, что file.Rmd находится в encoding UTF-8. Во-вторых, вы должны использовать 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 и т. д. Если вам приходилось каждый раз модифицировать пул вопросов для этого (или хранить копии), это было бы довольно громоздким.

5

Я пробовал разные подходы с аргументами header и inputs от exams2pdf(), но ни один из них не дал мне правильный результат. Также добавление команд LaTeX через заголовок YAML (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.

+0

спасибо @MartinDabbelJuSmelter! Это сработало. Думаю, мы должны добавить это в документацию пакета. –