Table of contents on xaringan slides?

老子叫甜甜 提交于 2019-12-07 11:58:30

问题


I'm wondering whether it is possible to add a slide showing the table of contents into the document created with xaringan package? Thanks.


回答1:


Update

Following lines will give you an automated Outline. Unfortunately I do not know how to automatically reload an R script file in RStudio. If someone knows anything, please feel free to comment or answer in following Question.

The code searches for all the level 1 headers and the Outline header. Then it simply adds the headers as a list and overrides the current script. After reloading the file you have an outline.

---

```{r, echo=FALSE}
require("magrittr")

file_name <- rstudioapi::getSourceEditorContext()[["path"]]

doc <- toc <- readLines(file_name)
tocc <- character()
for (i in 1:length(toc)) {
  if(substr(toc[i][1], 1, 2) == "# ") {
    toc[i] <- gsub("# ", "", toc[i], fixed = TRUE) %>% 
                gsub("#", "", ., fixed = TRUE)
    tocc <- append(tocc, toc[i])
  }
}

tocc <- paste("- ", tocc[-1])

row_outline <- which(doc == "# Outline")
row_body <- which(doc == "---")
row_body <- row_body[which(row_body > row_outline)][1]

doc <- c(doc[1:row_outline], "\n", tocc, "\n", doc[(row_body):length(doc)])


writeLines(doc, file_name)

```

# Outline

---

Old Post

Since Sébastien Rochette's comment did not work for me, I created a very dirty solution with R. I can think of much nicer solutions but this was a very quick solution. I hope I will update my answer in the near future.

---

```{r, echo=FALSE}
require("magrittr")

toc <- readLines("presentation.Rmd")
tocc <- character()

for (i in 1:length(toc)) {
  if(substr(toc[i][1], 1, 2) == "# ") {
    toc[i] <- gsub("# ", "", toc[i], fixed = TRUE) %>% 
                gsub("#", "", ., fixed = TRUE) %>%
                paste0("     ", .)
    tocc <- append(tocc, toc[i])
  }
}

text <- paste(tocc[-1], "\n")
yy <- seq(.9, 0, length = length(text))
```

# Outline

```{r, echo = FALSE}
plot(x = rep(0.2, length(text)), y = yy * 1.035, 
     xlim = c(0, 1), ylim = c(-0.1, 1), xlab = "", ylab = "", axes = FALSE, 
     col = "#056EA7", type = "p", pch = 16)
text(x = 0.2, y = yy, labels = text, adj = 0, col = "black")
```

---



来源:https://stackoverflow.com/questions/49797227/table-of-contents-on-xaringan-slides

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!