Keeping track of Keynote presentations

This isn't exactly related to R or RStudio, but I thought it might make sense to have this discussion in the open, rather than just with whatever list of people I might think to cc on an email.

@jjallaire and I talked about this briefly at rstudio::conf this year. While those of us who teach short courses/workshops tend to use git and Github for version control and dissemination of our materials, there's a little bit of a disconnect when it comes to the slides we teach from (often, Keynote). This leads to a couple of problems:

  1. It's a lot of work to keep all the pieces synched. For example, for data science in the tidyverse there were three pieces I needed to keep matching-- the .Rmd files for exercises, the .Rmd files for solutions, and the Keynote/PDF files of slides. If you change code in one place, you need to remember to update in the other two places. This seems like a job for... programming! I can kind of imagine how to write a parameterized markdown document that knitted to two different versions, one with solutions and one without, but it sounds like a lot of extra work. Any then of course, the Keynote piece is basically unsolvable at the moment

  2. A somewhat simpler issue, but when someone wants to use the (usually CC-licensed) materials, they can grab the .Rmds and the PDF slides from Github, but if they want to edit the slides they need the original keynote files. Speaking for myself, I am often procrastinating on prep and realize just a few hours before I'm teaching something that I don't have the Keynote files. It would be great if we could develop a culture of sharing these on the web, as well. However, there are some technical challenges there, as well.

    • the simplest thing would be to check the Keynotes into the same git repo as the other materials, but I think we all avoid doing that to minimize the size of the repo (especially if you're going to usethis to download the entire repo onto someone's computer during a workshop)
    • we could all have parallel repos for slides, like AmeliaMN/data-science-in-tidyverse and AmeliaMN/data-science-in-tidyverse-slides, but that gets us back to a similar problem to (1), where that gives us several things that need to be updated. Plus, the way I structure directories on my computer, I often have the folder with keynotes inside the main folder, and I worry about weird nested .git files
    • is this somehow the place for submodules?? I have never gotten into that particular aspect of git, but maybe it would be the right thing?

Anyway, if anyone has any brilliant ideas, I'd love to hear them. cc'ing @jennybryan, @mine, @cwickham, @hadley, @garrett, @yihui


FWIW, I take the "parallel repositories" approach, e.g.

And, as you know, it does nothing to reduce the synching problems. TBH, I haven't found the synching problems to be that big of a burden—certainly not big enough to make me want to give up a WYSIWYG slide editor. But I'm also pretty opinionated about what should go in a slide. For example, I think:

  • The slides should be reserved for visual aids. They are scenery that direct attention or create visual metaphors to help explain a topic.
  • Slides should not be handouts and certainly not text documents. I don't think students need my slides to succeed in my courses (but that doesn't stop them from asking for them!)

This approach reduces the synching factor. However, I haven't been able to escape from two places that would really benefit from automated synching:

  1. Code output. It is necessary to show code output when talking about code. I suppose I could try to do it all with live coding, but I don't relish the idea.
  2. Exercises. Students deserve to see them in large print at the front of the room when working on an exercise, which means the slides and exercises should synch. no solutions here, but I can confirm that you aren't wearing crazy glasses!


Glad I'm not wearing crazy glasses! I agree with you about the places where automated synching would be great. One of my notes-to-self from rstudio::conf was about the places where the "Your Turn" slides would benefit from code being on them. Many of the slides already have a little code there ("change this code to accomplish X") but some places that could really use that it's missing. I should go in to my slides and change them, but I've also been thinking of submitting a couple issues to your master-the-tidyverse-instructors repo because the slides were originally derived from those (though, via @cwickham and now myself).

So, on your computer you have a folder with the master-the-tidyverse stuff and a separate folder for the master-the-tidyvese-instructors Keynotes/PowerPoints?

That I do (and I won't mention the vestigial dropbox folders that may or may not contain remnants of previous versions of the course) :zipper_mouth_face:

Yeah I don't have a great general solution to this.

I do basically try to concentrate code in websites that are based on Rmd so I can direct students there during a live experience for, say, an exercise prompt. This is part of my motivation to push content into Happy Git and What They Forgot as opposed to "stranding" content only in slides.

It's why I wrote usethis::use_course() = another way to push proper code-based, version-controlled content in front of student eyeballs and fingertips. And it's why I added reprex(venue = "rtf") to put nicely reprexed, syntax-highlighted code into Keynote.

So those are specific things help to reduce my pain, but they do not eliminate it.

Similarly I don't have great solutions either.

I take the following approach:

  • For talks up to 1 hr, use Keynote, and push PDF to repo for completeness and .gitignore Keynote files on repo.
  • For longer teaching experiences (e.g. workshop, semester-long course), try to use R Markdown based slides so that versions are trackable and things are automatically updatable if need be.
  • If I simply cannot achieve the look I need with R Markdown based slides for any length course/talk, use Keynote, push PDF to repo, .gitignore Keynote files on repo, share a link for Dropbox with anyone who wants the editable Keynote file (which is usually not a large number of people). In certain circumstances I've just put that Dropbox link in the repo as well.
    • As an aside, for OpenIntro, we went with Google Slides for sharing slides with instructors. They can make a copy of the slides and edit their own copy easily. However, I prefer to work in Keynote over Google Slides so this is not something I've been able to adopt for all aspects of my teaching.
1 Like


As a proof of principle I made this repository that shows how you can export a Keynote file to HTML, which creates a bunch of json files that you can then version control and whose diff will show the text changes you make between commits.

If you want the smallest repo, you can ignore the .key files and most of the files under the directory with the html files except for these .json files. There is an initialization step where you update your .gitignore and then for every update in your keynote file that you want to keep track of, you would need to re-export to HTML.


Do you think the approach I proposed would be useful? Like version controlling the .json files. The diff would show the changes, but also other info that makes them noisy.

This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.