web-dev-qa-db-fra.com

présentations en deux colonnes dans les présentations RStudio/slidify/pandoc

J'essaie de mettre au point un bon système pour générer des diapositives et des documents d'accompagnement. Le système idéal aurait les propriétés suivantes:

  • belle dans les présentations (PDF/HTML) et dans les documents (PDF) (les documents devraient avoir une marge de manœuvre pour prendre des notes)
  • morceaux R incorporés, personnages, autres images JPG/PNG, etc.
  • facile à composer
  • construire à l'aide d'outils de ligne de commande
  • support bibliographique
  • pandoc format de séparateur de diapositives (générer automatiquement une nouvelle diapositive après les en-têtes d'un niveau spécifié) est préférable
  • Je peux vivre avec un peu de traitement supplémentaire (par exemple via sed), mais je préférerais ne pas écrire une énorme infrastructure
  • dispositions en deux colonnes : il y a un post SO) sur la façon d'obtenir des diapositives multi-colonnes à partir de pandoc , mais il s'agit de LaTeX plutôt que de HTML.
  • pouvoir ajuster la taille des images incorporées (autres que les figures générées par R) et la largeur des colonnes à la volée

Voici ce que j'ai découvert jusqu'à présent sur les différentes options:

  • (Slidify):
    • ne fait pas le format de séparateur de diapositives pandoc, bien que il existe une solution de contournement
    • la suggestion pour créer des documents est d'imprimer au format PDF; J'aimerais laisser de la place pour les notes, etc. (je pourrais probablement trouver un moyen de le faire en utilisant quelque chose comme PDFtk ou psnup ...)
  • RStudio présentations (fichiers .Rpres):
    • fait beaucoup de choses bien, y compris les multi-colonnes avec des largeurs spécifiées
    • ne prend pas en charge le format de séparateur de diapositives pandoc
    • Je ne peux pas comprendre ce qui se passe sous le capot. Il y a documentation RStudio qui décrit le processus de traduction pour le code HTML standard, mais cela ne semble pas couvrir le format de présentation R (qui n'est pas tout à fait le même). (J'ai déjà investi des efforts dans déterminer comment obtenir une sortie de type RStudio via pandoc ...), ce qui signifie que je ne peux pas générer de diapositives, etc. à partir de la ligne de commande.
  • La version de développement de RStudio (à compter de mars 2014) est fournie avec Pandoc et la version 2 de rmarkdown. Elle résout bon nombre des problèmes ci-dessus liés au format .Rpres.
  • pandoc: peut être le seul traducteur de démarques qui comporte des fonctionnalités telles que les notes de bas de page, le support bibliographique, etc. Je peux également utiliser pandoc pour générer LaTeX en utilisant le tufte-handout class , qui répond à mes critères de beauté.
    • Malheureusement, il semble ne pas avoir de support intégré de format à deux colonnes. L'exemple HTML5 de Yihui Xie ne montre aucun exemple en deux colonnes et affirme (sur la diapositive 5) que cliquer sur le bouton "Tricoter HTML" dans RStudio équivaut à pandoc -s -S -i -t dzslides --mathjax knitr-slides.md -o knitr-slides.html, mais ce ne semble pas être le cas. ..
  • LaTeX/beamer: Je pourrais tout simplement composer en Rnw (sweave-dialecte) en lieu et place de R markdown pour commencer. Cela me donnerait une flexibilité ultime ...
    • malgré de nombreuses années d’utilisation de LaTeX, je trouve que la composition de LaTeX est plus pénible que la composition avec démarque.

Après tout cela, ma question spécifique est la suivante: quel est le meilleur moyen (le plus simple) de générer une mise en page à deux colonnes pour la sortie HTML}?

Tout autre conseil sera également apprécié.

55
Ben Bolker

J'ai maintenant ce que je pense est une solution raisonnable qui devrait s'appliquer au moins aux solutions ioslides, et peut-être (?) À d'autres formats basés sur HTML5. En commençant ici , j’ai ajouté

<style>
div#before-column p.forceBreak {
    break-before: column;
}
div#after-column p.forceBreak {
    break-after: column;
}
</style>

au début de mon document; puis placer <p class="forceBreak"></p> dans une diapositive avec {.columns-2} coupe la colonne à ce point, par exemple.

## Latin hypercube sampling {.columns-2}

- sample evenly, randomly across (potentially many) uncertain parameters

<p class="forceBreak"></p>

![](LHScrop.png)
[User:Saittam, Wikipedia](https://commons.wikimedia.org/wiki/File:LHSsampling.png#/media/File:LHSsampling.png)

Il y a peut-être un moyen encore meilleur, mais ce n'est pas trop douloureux.

@ChrisMerkord souligne dans ses commentaires que

.forceBreak { -webkit-column-break-after: always; break-after: column; }

travaillé à la place (je n'ai pas testé ...)

11
Ben Bolker

C'est un vieux Q, mais une question similaire m'a récemment posé problème, voici ce que j'ai trouvé:

En utilisant le format RPres, deux colonnes peuvent être spécifiées comme suit ( détails ). Notez que les fichiers RPres ne peuvent être convertis au format HTML qu'en cliquant sur un bouton dans RStudio, il ne semble exister aucune méthode de ligne de commande, ce qui est un peu gênant. Malgré cela, je dirais que c'est actuellement la méthode la plus simple et la plus flexible pour obtenir des colonnes de diapositives avec markdown: 

=== 

Two Column Layout  
===

This slide has two columns

***

```{r, echo=FALSE}
plot(cars)
```

enter image description here

Une certaine souplesse est obtenue en ajustant les proportions de la colonne: 

===

Two Column Layout  
===
left: 30%
This slide has two columns

***

```{r, echo=FALSE}
plot(cars)
```

enter image description here

Avec rmarkdown, nous pouvons obtenir deux colonnes, mais sans aucun contrôle sur la position de la rupture, ce qui pose un problème: 

---
output: ioslides_presentation
---


## Two Column Layout  {.columns-2}

This slide has two columns


```{r, echo=FALSE}
plot(cars)
```

enter image description here

Nous pouvons également mélanger markdown et LaTeX dans un fichier Rmd en utilisant le format beamer_presentation dans RStudio pour obtenir deux colonnes de ce type, mais nous ne pouvons exécuter aucun code dans l'une ou l'autre colonne, ce qui constitue une limitation: 

---
output: beamer_presentation
---

Two Column Layout 
-------

\begin{columns}
\begin{column}{0.48\textwidth}
This slide has two columns
\end{column}
\begin{column}{0.48\textwidth}
If I put any code in here I get an error, see
https://support.rstudio.com/hc/communities/public/questions/202717656-Can-we-have-columns-in-rmarkdown-beamer-presentations-
\end{column}
\end{columns}

enter image description here

On dirait qu’une documentation Rnw LaTeX classique est le meilleur moyen d’obtenir des colonnes si vous souhaitez utiliser LaTex, et non cet hybride avec démarquage (cf. deux colonnes/diapo sweave avec graphique en grille

Dans tout ce qui précède, une image peut être placée dans une colonne.

Le site Web de slidify contient des instructions pour créer deux colonnes ici: http://slidify.org/customize.html mais on ne sait pas exactement ce qui doit être placé dans le dossier assets/layouts pour que cela fonctionne.

26
Ben

Il y a un solution de contournement pour l'erreur de beamer.

En bref: Error est lié au moteur de conversion pandoc, qui traite tout ce qui est entre \begin{...} et \end{...} comme TeX. Il peut être évité en donnant une nouvelle définition pour begin{column} et end{column} dans l'en-tête yaml. 

Créez mystyle.tex et écrivez-là:

\def\begincols{\begin{columns}}
\def\begincol{\begin{column}}
\def\endcol{\end{column}}
\def\endcols{\end{columns}}

Dans le fichier Rmd, utilisez ces nouveaux définitions 

---
output:
  beamer_presentation:
    includes:
      in_header: mystyle.tex
---


Two Column Layout 
-------

\begincols
  \begincol{.48\textwidth}

This slide has two columns.

  \endcol
\begincol{.48\textwidth}

```{r}
#No error here i can run any r code
plot(cars)
```

  \endcol
\endcols

Et vous obtenez: enter image description here

6
Mikael Jumppanen

J'ai eu une idée de ICI , les solutions de base étaient:


### Function *inner_join*
. . .

`<div style="float: left; width: 50%;">`
``` {r, echo = FALSE, results = 'markup', eval = TRUE}
kable(cbind(A,B))                                    
```
`</div>`
`<div style="float: right; width: 50%;">`
```{r, echo = TRUE, results = 'markup', eval = TRUE}
inner_join(A,B, by="C")
```
`</div>`

6
Rafa

Jusqu’à présent, je n’ai pas pu faire mieux que de pirater mon propre petit supplément au format rmd: j’appelle mon fichier source rmd0 et exécute un script comprenant ce marqueur sed pour le traduire en rmd avant d’appeler knit:

sed -e 's/BEGIN2COLS\(.*\)/<table><tr><td style="vertical-align:top; width=50%" \1>/' \
    -e 's/SWITCH2COLS/<\/td><td style="vertical-align:top">/' \
    -e 's/END2COLS/<\/td><\/tr><\/table>/' ...

Il y a quelques raisons pour lesquelles je n'aime pas ça. (1) C’est moche et à des fins spéciales, et je ne dispose pas d’un moyen particulièrement efficace d’autoriser les arguments facultatifs (par exemple, la largeur relative des colonnes, l’alignement, etc.). (2) Il doit être peaufiné pour chaque format de sortie (par exemple, si je voulais une sortie LaTeX/beamer, je devrais plutôt remplacer \begin{columns}\begin{column}{5cm} ... \end{column}\begin{column}{5cm} ... \end{column}\end{columns} (car il s'avère que je veux ignorer le formatage à deux colonnes lorsque je crée des documents au format LaTeX, donc c'est un peu plus facile, mais c'est quand même moche).

Slidify peut encore être la réponse.

3
Ben Bolker

Ce n'est pas une solution directe, mais le paquet Xaringan de Yihui https://github.com/yihui/xaringan/ fonctionne pour moi. C'est basé sur remark.js. Dans le modèle par défaut, vous pouvez utiliser .pull-left[] et .pull-right[]. Exemple: https://slides.yihui.name/xaringan/#15 . Vous n'avez besoin que d'un minimum de modifications sur les fichiers .rmd existants. 

0
yszhou

Vous pouvez utiliser fenced_divs notation ou ::: pour créer des colonnes ou une "disposition à deux contenus". Voir aussi cette page pour en savoir plus sur la notation.

## Slide With Image Left

::: columns

:::: column
left
::::

:::: column
right

```{r your-chunk-name, echo=FALSE, fig.cap="your-caption-name"}
knitr::include_graphics("your/figure/path/to/the-image.pdf")

#The figure will appear on the right side of the slide...
```
::::

:::

Puisque pandoc 2+, qui prend en charge la notation, a été implémenté dans RStudio v1.2+, vous devrez peut-être installer RStudio v1.2+ first. L'installation est assez facile (du moins dans mon cas); il suffit de télécharger et d'installer RStudio v1.2+. Lors de l'installation, l'ancienne version de RStudio sur votre ordinateur sera remplacée par la nouvelle sans la désinstaller manuellement.

La notation ::: peut être utilisée même lorsque vous tricotez des fichiers .Rmd avec l'option beamer_presentation, ainsi que lorsque vous créez des diapositives HTML. Nous n’avons donc pas besoin de mélanger Markdown et la notation LaTeX dans un fichier, ni d’ajouter des codes supplémentaires: il suffit de tricoter le fichier comme vous le feriez avec .Rmd avec d’autres options. 

0
Carlos Luis Rivera