Inspiré par cette réponse , je voudrais utilisez par exemple ce dataframe dans R
input <- data.frame(text = c("a", "b", "c"), page_number = c(3, 5, 6))
pour créer une liste à partir du texte, qui renvoie aux différents numéros de page. La solution décrit comment utiliser JavaScript dans Markdown mais malheureusement pas comment l'utiliser dans des morceaux de code (ce qui est nécessaire pour créer dynamiquement une liste).
3 Réponses :
Désolée, je ne peux pas commenter mais voulez-vous les morceaux javascript? si oui, cela vous aide-t-il?
D'abord
```{js} some javascript code in here ```
Puis dans votre fichier R Markdown:
```{r setup, include=FALSE} knitr::opts_chunk$set(echo = TRUE) library(knitr) ```
et
install.package(knitr)
Merci pour votre réponse. J'ai essayé d'utiliser Slide 4 dans le bloc js. Malheureusement, cela ne fonctionne pas. Toute suggestion?
Pouvez-vous essayer d'installer le package knitr et ajouter la bibliothèque de code (knitr) à votre configuration r dans votre fichier de démarquage R? Edit: Peut-être que cela peut vous aider: rmarkdown.rstudio.com/authoring_knitr_engines.html%23sql
Le moyen le plus simple est d'utiliser results = 'asis' code >
sur un bloc de code qui crée la chaîne brute souhaitée. Vous pouvez l'envelopper dans un bloc HTML brut pour vous assurer qu'il n'est pas lu comme Markdown mais traité comme HTML.
~~~{=html} ```{r, echo=FALSE, results='asis'} input <- data.frame(text = c("a", "b", "c"), page_number = c(3, 5, 6)) links <- paste('<a href="', input$text, '">', input$page_number, "</a>", sep="") cat(links, sep = "\n") ``` ~~~
J'aime utiliser le package htmltools
pour ce type de travail.
Vous pouvez créer une ancre HTML avec htmltools :: a ()
.
Pour créer un lien vers la diapositive n ° 2, vous devez écrire:
--- title: "Presentation" output: ioslides_presentation --- ## Slide 1 - page 2 This is the first slide. With links to other slides: ```{r echo=FALSE} input <- data.frame(text = c("a", "b", "c"), page_number = c(3, 5, 6)) htmltools::tagList( mapply( htmltools::a, input$text, href = sprintf("javascript:slidedeck.loadSlide(%i)", input$page_number), SIMPLIFY = FALSE) ) ``` \ If you prefer the tidyverse: ```{r echo=FALSE, message=FALSE} library(tidyverse) tribble( ~text, ~page_number, "a", 3, "b", 5, "c", 6 ) %>% transmute( text, href = str_glue("javascript:slidedeck.loadSlide({page_number})") ) %>% pmap(~ htmltools::a(.x, href = .y)) %>% htmltools::tagList() ``` ## Slide 2 - page 3 Text for slide 2 ## Slide 3 - page 4 Text for slide 3 ## Slide 4 - page 5 Text for slide 4 ## Slide 5 - page 6 Text for slide 4
Vous pouvez facilement vectoriser cette expression. N'oubliez pas de transmettre la liste résultante à htmltools :: tagList ()
.
Voici un Rmd minimal avec l'exemple référencé dans la question:
htmltools::a("text", href = "javascript:slidedeck.loadSlide(2)")