# Generate bordered tables with exams::exams2mooodle

## Motivation

By default, tables in moodle problems created with exams::exams2moodle do not have table or cell borders. I want tables with borders!

If you does too, you might find this post useful.

## Stylesheet

Create a style for a class you will use for tables. Note that this is not a CSS file but a HTML code snippet that you want to include in markdown files.

Instead of styling a class, it’s possible to style table tag itself. But I strongly discourage you from doing this. That will affect the appearance of other tables used in Moodle.

## Make a problem with tables

Two important points:

• Embed the style under the Question section. I would use something like writeLines(readLines("https://git.io/JJ4uR").
• When you make a table, use HTML format and add the class attribute to the table tag (bordered-table). knitr::kable() has table.attr argument that does this for you.

### Example

Here’s a sample problem.

{r}
N <- 3

mountains <-
data.frame(
Mountain = c("Everest", "K2", "Kangchenjunga", "Lhotse", "Makalu",
"Cho Oyu", "Dhaulagiri", "Manaslu"),
Height (m) = c(8848, 8611, 8586, 8516, 8485, 8188, 8167, 8163),
check.names = FALSE
)

choice <- sample(nrow(mountains), N)

table <- mountains[choice, ]
table\$Height (m) <- paste0("\\##ANSWER", seq_len(N), "##")



Question
========

{r CSS, echo = FALSE, results = "asis"}


How high are the following mountains? Answer the height above sea level in meters.

{r question, echo = FALSE, results = "asis"}
knitr::kable(table, format = "html",
table.attr='class="bordered-table"',
align = "lr",
row.names = FALSE)


Solution
========

{r solution, echo = FALSE, results = "asis"}
knitr::kable(mountains[choice, ], format = "html",
table.attr = 'class="bordered-table"',
row.names = FALSE)


Meta-information
================

extype: cloze
exsolution: r paste(mountains[choice, "Height (m)"], collapse = "|")
exclozetype: r paste(rep("num", 3), collapse = "|")
exname: bordered-table
extol: 0
exextra[numwidth,logical]: TRUE

## Result

You will get a quiz and solution that look like the following screenshots.