Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

R markdown PDF: Temporarily hide spoiler code for quiz takers

I am using R markdown to create a PDF R course. I want to insert a quiz like the following:

---
output: pdf_document
---

What is the class of the following R object?

1. `pi`

```{r}
class(pi)
```

Which, as expected, creates a PDF with this content:

enter image description here

However, I would like the reader to not have such an easy access to the answer. These are the ideas I've had so far to achieve this:

  1. Paint the answer and code white, so the reader would have to select the text to see the answer;
  2. Include a tooltip that would work on mouse over question.
  3. Flush the answer to the end of the document;
  4. Setting the answer upside down, in a smaller font;
  5. Use something similar to the >! code of stackoverflow to hide spoilers (no idea if there is such a feature on R markdown, though);

To me, the third idea seems like the most elegant way to do this, but I don't know how to implement it. I've taken a look at How to hide code in RMarkdown, with option to see it, http://yihui.name/knitr/options/ and https://www.ctan.org/pkg/exam?lang=en, but found nothing I could use.

As you can see, I don't mind if the solution requires the user to read the document on a computer, but if I can find a solution that would also work on printed versions of the document, that would be great.

like image 455
Waldir Leoncio Avatar asked Apr 30 '15 15:04

Waldir Leoncio


People also ask

How do you make a code invisible in R Markdown?

include = FALSE prevents code and results from appearing in the finished file. R Markdown still runs the code in the chunk, and the results can be used by other chunks. echo = FALSE prevents code, but not the results from appearing in the finished file.

How do you Markdown a PDF in R?

To transform your markdown file into an HTML, PDF, or Word document, click the “Knit” icon that appears above your file in the scripts editor. A drop down menu will let you select the type of output that you want. When you click the button, rmarkdown will duplicate your text in the new file format.

How do I hide a chunk in R?

Chunk options You use results="hide" to hide the results/output (but here the code would still be displayed). You use include=FALSE to have the chunk evaluated, but neither the code nor its output displayed.

What does eval false mean in R?

echo=TRUE shows the code, where echo=FALSE would hide the code. eval=TRUE means to evaluate (run) the code, where eval=FALSE will just show the code but not evalutate it.


1 Answers

I wasn't thinking of a full shiny app, but something like this .Rmd

---
output: html_document
---

## q1 what is `class(pi)?`

<div id="spoiler" style="display:none">

```{r}
class(pi)
```

</div>

<button title="Click to show answer" type="button"
   onclick="if(document.getElementById('spoiler') .style.display=='none')
              {document.getElementById('spoiler') .style.display=''}
            else{document.getElementById('spoiler') .style.display='none'}">
  Show/hide
</button>

enter image description here

And then to click

enter image description here

like image 127
rawr Avatar answered Nov 15 '22 21:11

rawr