2016-09-08 14 views
5

Khi tôi đang sử dụng gói exams để tạo câu hỏi, tôi có thể làm điều đó hoàn hảo bằng tiếng Anh ngay cả với các ký tự đặc biệt. Ví dụ: câu hỏi Rnw mà tôi có thể biên dịch với gói bài kiểm tra:Làm thế nào để sử dụng các bài kiểm tra gói R với điểm nhấn tiếng Bồ Đào Nha?

<<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} 

Ví dụ: khi tôi cần ç tôi chỉ sử dụng \ c {c} v.v. NHƯNG, tôi đã cố gắng sử dụng Rmarkdown thay vì tệp Rnw. Và ví dụ tương tự trong 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 

tôi có thể biên dịch với RStudio thấy giọng một cách chính xác:

compilation with RStudio

nhưng khi tôi cố gắng:

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

nó doen't làm việc .

compilation with function exams()

Ai đó có thể giúp tôi giải quyết vấn đề này?

Trả lời

2

Cảm ơn @MartinDabbelJuSmelter vì câu trả lời của anh ấy về cơ bản sẽ ghi lại những gì đang diễn ra. Tuy nhiên, có những giải pháp đơn giản hơn cho việc này. Cách đơn giản nhất là:

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

dẫn đến kết quả mong muốn. Bây giờ tại sao điều này lại phức tạp và tại sao nó lại được ghi chép rất kém?

Điều này phức tạp vì cấu trúc mô-đun của gói exams. Có rất nhiều cách khác nhau để kết hợp các khối xây dựng khác nhau mà dễ dàng như thế này đòi hỏi hai đối số. Trước tiên, bạn phải khai báo rằng file.Rmd nằm trong số encoding UTF-8. Thứ hai, bạn phải sử dụng template hỗ trợ UTF-8. Các gói exams tàu với một mẫu đơn giản plain với UTF-8 được kích hoạt.

Không có nhiều mẫu LaTeX trong các mã hóa khác nhau, v.v. vì chúng tôi dự kiến ​​rằng hầu như tất cả người dùng đều muốn sử dụng mẫu tùy chỉnh của riêng mình. Ví dụ, để hiển thị tên của trường đại học của họ hoặc khóa học của họ hoặc sử dụng một phong cách/font/etc cụ thể.

Nếu bạn chỉ có duy nhất lựa chọn (schoice) hoặc trắc nghiệm (mchoice) câu hỏi, sau đó cũng là exams2nops trong đó cung cấp một định dạng chuẩn mà nó đơn giản hơn nhiều để sử dụng (nhưng cũng có ít tùy biến). Đối với một ấn tượng, xem:

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

Vì vậy, bạn không thể sử dụng num câu hỏi của bạn file.Rmd cho việc này. Nhưng lợi thế lớn nếu bạn biến nó thành một câu hỏi schoice sẽ là bạn sẽ tự động quét và đánh giá cho exams2nops.

Vì vậy, bây giờ cho gót chân Achilles: tài liệu nghèo nàn. Trong phòng thủ của tôi, tôi phải nói rằng trong Phần 2.3 (Tạo bài kiểm tra đầu tiên) của vignette("exams2", package = "exams") vấn đề mã hóa được thảo luận ngắn gọn và bạn nên xem kết quả của exams_skeleton() để xem cách thức hoạt động. Vì vậy, trong trường hợp của bạn

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

phải cung cấp một số ví dụ hữu ích.

Nhưng cho là điều này phải dễ tìm hơn. Một trang web tài liệu tốt hơn cho exams là cao trong danh sách mong ước của tôi - đặc biệt là để hướng dẫn người mới đến - nhưng mùa hè này tôi không tìm thấy thời gian cần thiết. Hy vọng rằng trong năm tới ...

PS: Các dòng sau vào lúc bắt đầu của tập tin RMD là hoàn toàn không cần thiết và bỏ qua bởi exams:

--- 
output: pdf_document 
--- 

Sản lượng vào đó mỗi bài tập được trả lại được xác định bởi exams2 Các hàm xyz và không phải là các tệp tập thể dục. Ví dụ:

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

Lý do cho chức năng (chứ không phải là tập tin RMD) quyết định về vấn đề này rất đơn giản: Người dùng thường muốn xây dựng một hồ bơi lớn các câu hỏi và sau đó có thể muốn sử dụng cùng một câu hỏi trong một tập tin PDF (cho một bài kiểm tra bằng văn bản) hoặc cho Moodle hoặc để bỏ phiếu trực tiếp qua ARSnova vv. Nếu bạn phải sửa đổi nhóm câu hỏi mỗi lần cho việc này (hoặc giữ bản sao) sẽ khá cồng kềnh.

5

Tôi đã thử các cách tiếp cận khác nhau với các đối số headerinputs của exams2pdf() nhưng không có kết quả nào cho tôi kết quả chính xác. Ngoài ra, thêm lệnh LaTeX qua tiêu đề YAML (header-includes) không hoạt động. Vì vậy, tôi đã làm điều đó "con đường khó":


Tới thư viện R của bạn và tìm vị trí nơi gói kỳ thi được lưu. Bên trong điều hướng đến thư mục tex. Ở đó bạn sẽ tìm thấy các mẫu khác nhau được sử dụng bởi bài kiểm tra. Tạo bản sao của mẫu mặc định plain.tex và gọi số này là plain_pt.tex. Bên trong tệp đó bạn thêm

\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage[portuguese]{babel} 

vào phần mở đầu. Lưu các tập tin.

Các đường dẫn đầy đủ trên máy OSX của tôi:

/Library/Frameworks/R.framework/Versions/3.3/Resources/library/exams/tex 

Trong Linux có thể là:

~/R/x86_64-pc-linux-gnu-library/3.3/Resources/library/exams/tex 

Bây giờ, khi gọi exams2pdf bạn có thể chọn mẫu mới của bạn với template = 'plain_pt'.

Điều này cũng sẽ hoạt động đối với các ngôn ngữ khác bằng cách thêm các lệnh LaTeX thích hợp.

+0

Cảm ơn bạn @MartinDabbelJuSmelter! Nó đã làm việc. Tôi nghĩ chúng ta nên thêm điều này vào tài liệu của gói. –

Các vấn đề liên quan