{accessrmd} is currently in development. If you discover bugs or improvements, please review the code of conduct and contribute on GitHub.
{accessrmd} is a package written to help improve the accessibility of Rmarkdown documents. The standard Rmarkdown outputs have HTML structural issues that result in problems for people using screen readers. The purpose of {accessrmd} is to help developers in writing accessible Rmarkdown documents and in converting a back catalogue of documents in need of accessibility amendments.
{accessrmd} is currently limited to html_output
only. It is not available on CRAN yet, but this is the aim once the first release has been published.
To install the development version:
devtools::install_github("datasciencecampus/accessrmd")
To attach the package:
library(accessrmd)
The HTML structure of standard rmarkdown outputs are not AA WCAG2.1 standard. AA is the standard required by all UK government digital services. In order to present HTML checks, I will be enlisting the help of the excellent, open-source WAVE accessibility tool. It doesn’t catch everything required for AA-compliance, but it’s a great way to get started with an accessibility audit, including helpful explanations for newcomers to WCAG 2.1 compliance.
The below image shows the output of a WAVE check on the standard Rmarkdown html output. As you can see, there are a number of errors and warnings. Click the image for more detail.
Click the image to view the full check on wave.webaim.org, opens in new window.
By executing a few functions from the {accessrmd} package, the html format issues can be easily remedied, without the developer needing to write any HTML. Please observe the output of an Rmarkdown which has been adjusted by {accessrmd} functions (again, you can click for an interactive check):
Click the image to view the full check on wave.webaim.org, opens in new window.
In this section, I will be working with a test Rmarkdown document. It contains a simple ggplot chart and a test image. Click to see the test Rmarkdown output.
Click to see the WAVE check. Note the errors and warnings.
The issues are caused by the HTML structure and YAML settings. The YAML currently looks like this:
lines <- readLines("test.Rmd")
# Show only the YAML
message(paste(lines[1:6], collapse = "\n"))
---
title: "Test"
author: "Richard Leyshon"
date: "25/07/2021"
output: html_document
---
access_head()
This is a good place to start if you already have an Rmarkdown document that you would like to adjust. Reads an Rmd file, converting the YAML header to a format that is screen-reader friendly.
Most of the issues with the test Rmarkdown can be fixed with this single function. We just need to call it and specify a few parameters:
rmd_path
is the relative path to the Rmarkdown.lan
value will be used to set the HTML lang attribute value. I’ll specify “en” for English.inplace = FALSE
(the default) will ensure the original Rmd doesn’t get overwritten.access_head(rmd_path = "test.rmd", lan = "en")
No theme found. Specifying theme: default
Setting html lan to en
Writing file to accessrmd_test.rmd
Note that this document had no theme set. {accessrmd} has now explicitly set the theme to ‘null’.
access_head()
created an adjusted rmd with the filename prefix “accessrmd_”.
file.exists("accessrmd_test.rmd")
[1] TRUE
Click to view the output HTML.
Click to view the WAVE report.
This function has resolved the following issues:
The remaining errors or warnings are related to the chart and image. We can also view the file lines to see how the file was modified.
lines <- readLines("accessrmd_test.rmd")
# Show only the head
message(paste(lines[1:14], collapse = "\n"))
---
output:
html_document:
highlight: null
theme: default
---
<html lang="en">
<header>
<meta charset="utf-8"/>
<title>Test</title>
<h1 class="title toc-ignore">Test</h1>
<h2 class="author toc-ignore">Richard Leyshon</h2>
<h2 class="date toc-ignore">25/07/2021</h2>
</header>
In the above output, you can see the approach taken to building styled HTML outputs that do not result in accessibility issues. The highlight option should always be set to null due to accessibility errors with the highlight options. The theme should be null by default, but can also be set to a number of options, refer to the section on testing styles for more guidance.
access_img()
Reads in an image and produces the HTML structure expected by web accessibility checkers such as WAVE. Also works as a wrapper around {ggplot2} charts.
This function can be used to resolve the image-related issues in the Rmarkdown. Inserting access_img()
will resolve the chart issue, as it works with ggplot2::last_plot()
.
For images using markdown syntax, replacing the markdown with access_img()
will ensure the image is rendered with the expected alt text value. This is important, as markdown syntax ![alt](src)
renders unreliably, causing issues with duplicated alt text warnings on WAVE.
In the example below, I will create a chart with ggplot2
and use access_img()
to ensure it is rendered with alt text.
library(ggplot2)
# create a chart
chart <- ggplot(data = pressure, mapping = aes(x = temperature, y = pressure)) +
geom_point()
# render with alt text
access_img(alt = "Vapour pressure of mercury as a function of temperature.")
img derived from inline R code.
Saving 6.67 x 6.67 in image
access_img()
can also be used to ensure an image sourced from disk is displayed correctly for screen reader users. Below, I will source a test image instead of using the more typical (but less reliable) markdown image syntax.
access_img("../www/then-and-now-carole-hersee.jpeg", alt = "BBC test card then
and now", wid = 800, ht = 450)
img derived from disk.
In the example below, I amend an Rmarkdown document containing the chart and image to include the access_img()
code instead. The resultant HTML documents and WAVE accessibility check can be viewed by clicking the links below the code chunk.
# store code lines as length 1 character vectors
# chart code specifying alt text
chart <- 'access_img(alt = "Vapour pressure of mercury as a function of temperature.")'
# test image code, specifying alt text and dimensions
img <- as.character(
'`r access_img(img = "../www/then-and-now-carole-hersee.jpeg",
alt = "BBC test card then and now.", wid = 800, ht = 450)`')
# read in the rmd lines
lines <- readLines("images.rmd")
# Replace the blank line following ggplot code with access_img
lines[32] <- chart
# Replace the inaccessible markdown image with inline r code.
lines[37] <- img
# create a new file
file.create("accesible_images.rmd")
# write the modified lines
writeLines(lines, "accesible_images.rmd")
# render the markdown
rmarkdown::render("accesible_images.rmd")
processing file: accesible_images.rmd
img derived from disk.
output file: accesible_images.knit.md
Output created: accesible_images.html
Click to view the output html.
Click to view the WAVE check.
access_rmd()
Use this function to create a new Rmarkdown document with improved accessibility.
access_rmd("some_file.Rmd", title = "You Need To Provide A Title.", lan = "en",
force = TRUE)
Warning in access_rmd("some_file.Rmd", title = "You Need To Provide A Title.", :
'force' is TRUE. Overwriting filenm.
Setting html lan to en
Writing file to some_file.Rmd
See the output file some_file.Rmd.
There are more optional parameters to help customise your document.
access_rmd("more_parameters.Rmd", title = "Include a Subtitle and TOC",
lan = "en", subtitle = "Some Sensible Subtitle", toc = TRUE,
force = TRUE)
Warning in access_rmd("more_parameters.Rmd", title = "Include a Subtitle and TOC", :
'force' is TRUE. Overwriting filenm.
Using toc_float YAML
Setting html lan to en
Writing file to more_parameters.Rmd
See the output file more_parameters.Rmd.
‘access_rmd()’ allows the user to specify which theme should be used to style the text of the rmarkdown document.
access_rmd(filenm = "flatly_styling", title = "Applying the flatly theme",
lan = "en", force = TRUE, theme = "flatly")
Warning in access_rmd(filenm = "flatly_styling", title = "Applying the flatly theme", :
'force' is TRUE. Overwriting filenm.
Warning in insert_yaml(toc = toc, header = header, text = text, lan = lan, : The flatly theme has known accessibility errors and is
not supported by this function.
Setting html lan to en
Writing file to flatly_styling.Rmd
Here is the link to flatly_styling.html
Note that there are accessibility errors with the simplex and cerulean themes. Attempting to apply these themes results in a warning and setting the theme to null.
access_rmd("attempt_simplex", title = "Attempting to apply simplex theme",
lan = "en", force = TRUE, theme = "simplex")
Warning in access_rmd("attempt_simplex", title = "Attempting to apply simplex theme", :
'force' is TRUE. Overwriting filenm.
Warning in insert_yaml(toc = toc, header = header, text = text, lan = lan, : The simplex theme has known accessibility errors and is
not supported by this function.
Setting html lan to en
Writing file to attempt_simplex.Rmd
Here is the link to attempt_simplex.html. You should see that null theme has been specified. To confirm this:
lin <- readLines("attempt_simplex.Rmd")
# Display header
lin[1:14]
[1] "---"
[2] "output:"
[3] " html_document:"
[4] " highlight: null"
[5] " theme: default"
[6] "---"
[7] "<html lang=\"en\">"
[8] "<header>"
[9] " <meta charset=\"utf-8\"/>"
[10] " <title>Attempting to apply simplex theme</title>"
[11] " <h1 class=\"title toc-ignore\">Attempting to apply simplex theme</h1>"
[12] " <h2 class=\"author toc-ignore\">leyshr</h2>"
[13] " <h2 class=\"date toc-ignore\">03 Dec 2021</h2>"
[14] "</header>"
check_urls()
Broken links result in accessibility issues for screen reader users. Use check_urls()
to check links within an Rmarkdown document for any urls that respond with an error.
check_urls("broken_link.Rmd")
Checking broken_link.Rmd
Warning in check_urls("broken_link.Rmd"): Check lines for broken links:
12
retrieve_rmds()
Searches (recursively) a directory for Rmarkdown files. Returns the found Rmd relative paths.
rmds <- retrieve_rmds()
rmds
[1] "./accesible_images.rmd"
[2] "./accessrmd_guide.Rmd"
[3] "./accessrmd_test.rmd"
[4] "./attempt_simplex.Rmd"
[5] "./broken_link.Rmd"
[6] "./flatly_styling.Rmd"
[7] "./images.rmd"
[8] "./more_parameters.Rmd"
[9] "./some_file.Rmd"
[10] "./sus_alt_test.Rmd"
[11] "./test.Rmd"
[12] "./test_highlights/highlight_breezedark.Rmd"
[13] "./test_highlights/highlight_default.Rmd"
[14] "./test_highlights/highlight_espresso.Rmd"
[15] "./test_highlights/highlight_haddock.Rmd"
[16] "./test_highlights/highlight_kate.Rmd"
[17] "./test_highlights/highlight_monochrome.Rmd"
[18] "./test_highlights/highlight_null.Rmd"
[19] "./test_highlights/highlight_pygments.Rmd"
[20] "./test_highlights/highlight_tango.Rmd"
[21] "./test_highlights/highlight_textmate.Rmd"
[22] "./test_highlights/highlight_zenburn.Rmd"
[23] "./test_outputs/access_rmd.Rmd"
[24] "./test_outputs/accessrmd_standard_rmarkdown.Rmd"
[25] "./test_outputs/standard_rmarkdown.Rmd"
[26] "./test_themes/cerulean.Rmd"
[27] "./test_themes/cosmo.Rmd"
[28] "./test_themes/default.Rmd"
[29] "./test_themes/flatly.Rmd"
[30] "./test_themes/journal.Rmd"
[31] "./test_themes/lumen.Rmd"
[32] "./test_themes/paper.Rmd"
[33] "./test_themes/readable.Rmd"
[34] "./test_themes/sandstone.Rmd"
[35] "./test_themes/simplex.Rmd"
[36] "./test_themes/spacelab.Rmd"
[37] "./test_themes/united.Rmd"
[38] "./test_themes/yeti.Rmd"
This vector of Rmarkdown path names can be used for various operations.
for (doc in rmds) {
print(doc)
# try(rmarkdown::render(doc))
}
[1] "./accesible_images.rmd"
[1] "./accessrmd_guide.Rmd"
[1] "./accessrmd_test.rmd"
[1] "./attempt_simplex.Rmd"
[1] "./broken_link.Rmd"
[1] "./flatly_styling.Rmd"
[1] "./images.rmd"
[1] "./more_parameters.Rmd"
[1] "./some_file.Rmd"
[1] "./sus_alt_test.Rmd"
[1] "./test.Rmd"
[1] "./test_highlights/highlight_breezedark.Rmd"
[1] "./test_highlights/highlight_default.Rmd"
[1] "./test_highlights/highlight_espresso.Rmd"
[1] "./test_highlights/highlight_haddock.Rmd"
[1] "./test_highlights/highlight_kate.Rmd"
[1] "./test_highlights/highlight_monochrome.Rmd"
[1] "./test_highlights/highlight_null.Rmd"
[1] "./test_highlights/highlight_pygments.Rmd"
[1] "./test_highlights/highlight_tango.Rmd"
[1] "./test_highlights/highlight_textmate.Rmd"
[1] "./test_highlights/highlight_zenburn.Rmd"
[1] "./test_outputs/access_rmd.Rmd"
[1] "./test_outputs/accessrmd_standard_rmarkdown.Rmd"
[1] "./test_outputs/standard_rmarkdown.Rmd"
[1] "./test_themes/cerulean.Rmd"
[1] "./test_themes/cosmo.Rmd"
[1] "./test_themes/default.Rmd"
[1] "./test_themes/flatly.Rmd"
[1] "./test_themes/journal.Rmd"
[1] "./test_themes/lumen.Rmd"
[1] "./test_themes/paper.Rmd"
[1] "./test_themes/readable.Rmd"
[1] "./test_themes/sandstone.Rmd"
[1] "./test_themes/simplex.Rmd"
[1] "./test_themes/spacelab.Rmd"
[1] "./test_themes/united.Rmd"
[1] "./test_themes/yeti.Rmd"
In the below example, I search a directory for Rmarkdown documents, resulting in 37 found files.
> rmds <- retrieve_rmds()
> rmds
[1] "./DSCA_DS4Policy_hackathon/hackathon/slides/DS4Policy_hackathon.Rmd"
[2] "./DSCA_DS4Policy_hackathon/scripts/DS4Policy_Day1.Rmd"
[3] "./DSCA_DS4Policy_hackathon/scripts/DS4Policy_Day2.Rmd"
[4] "./DSCA_intermediateNLPpython/_preparation/pre_course.Rmd"
[5] "./DSCA_IntroML_Python/_prep/precourse material.Rmd"
[6] "./DSCA_IntroML_Python/_prep/Unsupervised Learning Introduction.Rmd"
[7] "./DSCA_ML_QA/_preparation/M1 Fundementals/1.PM_Fundamentals.rmd"
[8] "./DSCA_ML_QA/_preparation/M1 Fundementals/1.PM_Fundamentals_slides.rmd"
[9] "./DSCA_ML_QA/_preparation/M2 Common Knowledge/2.PM_Common_Knowledge.rmd"
[10] "./DSCA_ML_QA/_preparation/M2 Common Knowledge/2.PM_Common_Knowledge_slides.rmd"
[11] "./DSCA_ML_QA/_preparation/M3 Ethics/3.PM_Ethical_Applications.rmd"
[12] "./DSCA_ML_QA/_preparation/M3 Ethics/3.PM_Ethical_Applications_slides.rmd"
[13] "./DSCA_ML_QA/_preparation/M4 Avoiding Statistical Bias/4.Avoiding_Statistical_Bias.rmd"
[14] "./DSCA_ML_QA/_preparation/M5 Model Interpretability/5.Model_Interpretability.rmd"
[15] "./DSCA_ML_QA/_preparation/M6 Model Maintenance/6.Model_Maintenance.rmd"
[16] "./DSCA_ML_QA/_preparation/summary.Rmd"
[17] "./DSCA_modular_programming/_preparation/course_content_creation/0.pre_course.Rmd"
[18] "./DSCA_modular_programming/_preparation/course_content_creation/1.course_material.Rmd"
[19] "./DSCA_modular_programming/_preparation/course_content_creation/2.programming_styles.rmd"
[20] "./DSCA_modular_programming/_preparation/population_density_analysis/reports/population_analysis_report.rmd"
[21] "./DSCA_nlp_application_project/_preparation/instructions.Rmd"
[22] "./DSCA_NLPWR/NLPWR_part1.Rmd"
[23] "./DSCA_NLPWR/NLPWR_part2.Rmd"
[24] "./DSCA_NLPWR/NLPWR_part3.Rmd"
[25] "./DSCA_NLPWR/NLPWR_part4.Rmd"
[26] "./DSCA_reproducible_reporting/_preparation/course_content_creation/reproducible_reporting.Rmd"
[27] "./DSCA_reproducible_reporting/activity/Country_Report.Rmd"
[28] "./DSCA_reproducible_reporting/activity/report_evolution/Country_Report_Final.Rmd"
[29] "./DSCA_reproducible_reporting/activity/report_evolution/Country_Report_step_1_2.Rmd"
[30] "./DSCA_reproducible_reporting/activity/report_evolution/Country_Report_step_3_4.Rmd"
[31] "./DSCA_temp_intro_git/intro_to_git.Rmd"
[32] "./DSCA_temp_intro_git/pre_course_software.rmd"
[33] "./industry_networks_grads/course_content/instructions.rmd"
[34] "./industry_networks_grads/course_content/python/python_solution_extra_exercises.rmd"
[35] "./industry_networks_grads/course_content/python/python_solution_grad_networks.rmd"
[36] "./industry_networks_grads/course_content/r/r_solution_extra_exercises.Rmd"
[37] "./industry_networks_grads/course_content/r/r_solution_grad_networks.Rmd"
I iterate over 37 Rmarkdown documents, using the access_head()
function to improve their accessibility (if compatible). Using the try()
function helps to complete the for
loop if exceptions result in errors (there are a few).
for (doc in rmds) {
+ print(basename(doc))
+ try(access_head(doc, lan = "en"))
+ }
[1] "DS4Policy_hackathon.Rmd"
Error in check_compat(header_txt) : xaringan output is not compatible.
[1] "DS4Policy_Day1.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "DS4Policy_Day2.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "pre_course.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "precourse material.Rmd"
Setting html lan to en
[1] "Unsupervised Learning Introduction.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "1.PM_Fundamentals.rmd"
Using toc_float YAML
Setting html lan to en
[1] "1.PM_Fundamentals_slides.rmd"
Error in check_compat(header_txt) : xaringan output is not compatible.
In addition: Warning messages:
1: In dir.create(dir_loc) :
'.\DSCA_DS4Policy_hackathon\scripts\accessrmd' already exists
2: In dir.create(dir_loc) :
'.\DSCA_IntroML_Python\_prep\accessrmd' already exists
[1] "2.PM_Common_Knowledge.rmd"
Using toc_float YAML
Setting html lan to en
[1] "2.PM_Common_Knowledge_slides.rmd"
Error in check_compat(header_txt) : xaringan output is not compatible.
[1] "3.PM_Ethical_Applications.rmd"
Using toc_float YAML
Setting html lan to en
[1] "3.PM_Ethical_Applications_slides.rmd"
Error in check_compat(header_txt) : xaringan output is not compatible.
[1] "4.Avoiding_Statistical_Bias.rmd"
Using toc_float YAML
Setting html lan to en
[1] "5.Model_Interpretability.rmd"
Using toc_float YAML
Setting html lan to en
[1] "6.Model_Maintenance.rmd"
Using toc_float YAML
Setting html lan to en
[1] "summary.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "0.pre_course.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "1.course_material.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "2.programming_styles.rmd"
Using toc_float YAML
Setting html lan to en
[1] "population_analysis_report.rmd"
Error in access_head(doc, lan = "en") :
YAML header not found. Have you previously run 'access_head()'?
In addition: Warning messages:
1: In dir.create(dir_loc) :
'.\DSCA_modular_programming\_preparation\course_content_creation\accessrmd' already exists
2: In dir.create(dir_loc) :
'.\DSCA_modular_programming\_preparation\course_content_creation\accessrmd' already exists
[1] "instructions.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "NLPWR_part1.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "NLPWR_part2.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "NLPWR_part3.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "NLPWR_part4.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "reproducible_reporting.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "Country_Report.Rmd"
Setting html lan to en
[1] "Country_Report_Final.Rmd"
Setting html lan to en
[1] "Country_Report_step_1_2.Rmd"
Setting html lan to en
[1] "Country_Report_step_3_4.Rmd"
Embedding render_toc code chunk
Setting html lan to en
[1] "intro_to_git.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "pre_course_software.rmd"
Setting html lan to en
[1] "instructions.rmd"
Using toc_float YAML
Setting html lan to en
[1] "python_solution_extra_exercises.rmd"
Using toc_float YAML
Setting html lan to en
[1] "python_solution_grad_networks.rmd"
Using toc_float YAML
Setting html lan to en
[1] "r_solution_extra_exercises.Rmd"
Using toc_float YAML
Setting html lan to en
[1] "r_solution_grad_networks.Rmd"
Using toc_float YAML
Setting html lan to en
Warning messages:
1: In dir.create(dir_loc) : '.\DSCA_NLPWR\accessrmd' already exists
2: In dir.create(dir_loc) : '.\DSCA_NLPWR\accessrmd' already exists
3: In dir.create(dir_loc) : '.\DSCA_NLPWR\accessrmd' already exists
4: In dir.create(dir_loc) :
'.\DSCA_reproducible_reporting\activity\report_evolution\accessrmd' already exists
5: In dir.create(dir_loc) :
'.\DSCA_reproducible_reporting\activity\report_evolution\accessrmd' already exists
6: In dir.create(dir_loc) :
'.\DSCA_temp_intro_git\accessrmd' already exists
7: In dir.create(dir_loc) :
'.\industry_networks_grads\course_content\python\accessrmd' already exists
8: In dir.create(dir_loc) :
'.\industry_networks_grads\course_content\r\accessrmd' already exists
sus_alt()
Suspicious alt text - checks if an image’s alt text is equal to alt attribute placeholder values, including ‘nbsp’, ‘spacer’ and the src attribute value (filename).
sus_alt_test.Rmd
contains 3 images, 1 is acceptable and the rest contain placeholder alt attribute values.
lines <- readLines("sus_alt_test.Rmd")
# show the 3 image lines
lines[c(15,17,19)]
[1] ""
[2] "![spacer](../www/then-and-now-carole-hersee.jpeg)"
[3] "<img src=\"../www/then-and-now-carole-hersee.jpeg\" alt=\"../www/then-and-now-carole-hersee.jpeg\">"
The first 2 images need to be flagged for adjustment, while the third should be ignored as the alt text is acceptable.
sus_alt("sus_alt_test.Rmd")
Checking sus_alt_test.Rmd...
No images with alt text exceeding a limit were found.
Warning in sus_alt("sus_alt_test.Rmd"): 1 image(s) with placeholder text found.
Check lines:
17
alt text should not be empty or equal to 'spacer' or 'nbsp'.
Warning in sus_alt("sus_alt_test.Rmd"): 1 image(s) with equal src & img found.
Check lines:
19
alt text should not be equal to src.
[1] 17 19
This function helps to quantify the number of alt-related issues within each Rmarkdown file.
This function uses rules from sources below to identify suspicious alt text:
Alt text length guidance “If the Alt text is greater than 100 characters (English) then it must be shortened or the user must confirm that it is the shortest Alt text possible.”
Maximum Alt text Length
eng 100
ger 115
kor 90
placeholder alt text guidance Check each img element and compare its alt attribute value to the list of placeholder values. alt attribute placeholder values are: ‘nbsp’, ‘spacer’ and src attribute value (filename).
Rmarkdown comes with some pre-packaged themes and highlight options.
Themes control the appearance of the document’s text and headers, applying specific fonts and colours. On testing the accessibility of these themes, the following accessibility issues were found:
cerulean: This theme presented very low contrast errors on the use of H4 or H5 headings.
simplex: This theme presented very low contrast errors on thhe use of standard or bold text.
The other built-in themes available were found to present no accessibility issues.
All of the highlight options tested presented various accessibility errors apart from one. It is recommended to specify highlight: null
. Note that this is not the default highlight option, which presented accessibility errors.
A summary of the accessibility errors found on testing:
UK Gov WCAG guidance.
WAVE Web Accessibility Evaluation Tool
WCAG2.1 standard Quick Reference
W3 guidance on alt text length limits.
W3 guidance on alt text placeholder values.
R Markdown: The Definitive Guide, 3.1.4 Appearance and style.
cerulean.Rmd
cosmo.Rmd
default.rmd
flatly.Rmd
journal.Rmd
lumen.Rmd
paper.Rmd
readable.Rmd
sandstone.Rmd
simplex.Rmd
spacelab.Rmd
united.Rmd
yeti.Rmd