layout a due colonne nelle presentazioni RStudio / slidify / pandoc

Sto cercando di creare un buon sistema per la generazione di diapositive e di allegate dispense. Il sistema ideale avrebbe le seguenti proprietà:

  • bello in entrambi i layout di presentazione (PDF / HTML) e volantino (PDF) (le dispense dovrebbero avere spazio per prendere appunti)
  • frammenti R incorporati, figure, altre immagini JPG / PNG, ecc.
  • facile da comporre
  • build usando strumenti da riga di comando
  • supporto bibliografico
  • pandoc formato separatore di diapositive pandoc (genera automaticamente una nuova diapositiva dopo le intestazioni di un livello specificato)
  • Posso vivere con un po ‘di elaborazione aggiuntiva (ad esempio tramite sed ), ma preferirei non scrivere una grande infrastruttura
  • layout a due colonne : c’è un post SO su come ottenere diapositive multi-colonna da pandoc , ma è LaTeX- piuttosto che orientato all’HTML.
  • possibilità di regolare le dimensioni delle immagini incorporate (diverse dalle figure generate da R) e le larghezze delle colonne al volo

Ecco cosa ho scoperto finora sulle varie opzioni:

  • Slidify :
    • non esegue il formato separatore di diapositive pandoc , anche se esiste una soluzione alternativa
    • il suggerimento per la creazione di dispense è di stampare in PDF; Mi piacerebbe lasciare spazio per le note ecc. (Probabilmente potrei trovare un modo per farlo usando qualcosa come PDFtk o psnup …)
  • Presentazioni RStudio (file .Rpres ):
    • fa molte cose bene, incluse le multi-colonne con larghezze specificate
    • non supporta il formato separatore di diapositive pandoc
    • Non riesco a capire cosa sta succedendo sotto il cofano. C’è una documentazione RStudio che descrive il processo di traduzione per l’HTML normale, ma non sembra coprire il formato di presentazione R (che non è esattamente la stessa). (In precedenza ho investito alcuni sforzi per capire come ottenere un output simile a RStudio tramite pandoc …), il che significa che non posso generare diapositive, ecc. Dalla riga di comando.
  • La versione di sviluppo di RStudio (a marzo 2014) viene fornita in bundle con Pandoc e la versione 2 di rmarkdown . Affronta molti dei problemi precedenti con il formato .Rpres .
  • pandoc : potrebbe essere l’unico markdown-traduttore che ha caratteristiche come note a piè di pagina, supporto bibliografico, ecc. Posso anche usare pandoc per generare LaTeX usando la class tufte-handout , che soddisfa i miei criteri di bellezza.
    • Sfortunatamente, sembra non avere il supporto del formato a due colonne integrato. L’esempio HTML5 di Yihui Xie non mostra esempi a due colonne e afferma (sulla diapositiva 5) che facendo clic sul pulsante “Knit HTML” in RStudio è equivalente a pandoc -s -S -i -t dzslides --mathjax knitr-slides.md -o knitr-slides.html , ma non sembra essere …
  • LaTeX / beamer: Potrei semplicemente comporre in Rnw (knitr-dialect Sweave) piuttosto che in R markdown per cominciare. Questo mi darebbe la massima flessibilità …
    • nonostante molti anni di utilizzo di LaTeX, trovo che la composizione di LaTeX sia più dolorosa della composizione di markdown.

Dopo tutto ciò, la mia domanda specifica è: qual è il modo migliore (più semplice) per generare un layout a due colonne per l’output HTML ?

Qualsiasi altro consiglio sarà apprezzato.

Questa è una vecchia Q, ma di recente mi affliggeva una domanda simile, ecco cosa ho trovato:

Utilizzando il formato RPres, è ansible specificare due colonne in questo modo ( dettagli ). Si noti che gli RPre possono essere convertiti in HTML solo facendo clic su un pulsante in RStudio, non sembra esserci alcun metodo della riga di comando, che è un po ‘fastidioso. Nonostante, direi che è attualmente il metodo più semplice e flessibile per ottenere colonne di diapositive con markdown:

 === Two Column Layout === This slide has two columns *** ```{r, echo=FALSE} plot(cars) ``` 

inserisci la descrizione dell'immagine qui

Una certa flessibilità è garantita dalla regolazione delle proporzioni della colonna:

 === Two Column Layout === left: 30% This slide has two columns *** ```{r, echo=FALSE} plot(cars) ``` 

inserisci la descrizione dell'immagine qui

Con rmarkdown possiamo ottenere due colonne, ma senza controllo su dove si trova l’interruzione, che è un po ‘un problema:

 --- output: ioslides_presentation --- ## Two Column Layout {.columns-2} This slide has two columns ```{r, echo=FALSE} plot(cars) ``` 

inserisci la descrizione dell'immagine qui

Possiamo anche mescolare markdown e LaTeX in un file Rmd utilizzando il formato beamer_presentation in RStudio per ottenere due colonne come questa, ma non è ansible eseguire alcun codice in nessuna colonna, che è una limitazione:

 --- 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} 

inserisci la descrizione dell'immagine qui

Sembra un normale Rnw LaTeX doc è il modo migliore per ottenere le colonne se si desidera utilizzare LaTex, non questo ibrido markdown (vedere la colonna due beamer / sweave slide con griglia grafica )

In tutte le precedenti è ansible posizionare un’immagine in una colonna.

Il sito web di slidify contiene le istruzioni per creare due colonne qui: http://slidify.org/customize.html ma non è chiaro cosa deve andare nella cartella assets / layouts per farlo funzionare

Ora ho quello che penso sia una soluzione ragionevole che dovrebbe applicarsi almeno alle soluzioni ioslides su ioslides e forse (?) Ad altri formati basati su HTML5. A partire da qui , ho aggiunto

  

all’inizio del mio documento; quindi mettendo

all’interno di una diapositiva con {.columns-2} interrompe la colonna in quel punto, ad es.

 ## Latin hypercube sampling {.columns-2} - sample evenly, randomly across (potentially many) uncertain parameters 

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

Potrebbe esserci un modo ancora migliore, ma questo non è troppo doloroso.

@ChrisMerkord sottolinea nei commenti che

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

ha funzionato invece (non ho provato …)

Ho avuto un’idea da QUI , le soluzioni di base erano:


 ### Function *inner_join* . . . `
` ``` {r, echo = FALSE, results = 'markup', eval = TRUE} kable(cbind(A,B)) ``` `
` `
` ```{r, echo = TRUE, results = 'markup', eval = TRUE} inner_join(A,B, by="C") ``` `
`

C’è una soluzione alternativa per l’errore di beamer.

In breve: l’errore è legato al motore di conversione pandoc, che tratta tutto tra \begin{...} e \end{...} come TeX . Può essere evitato dando una nuova definizione per begin{column} e end{column} nell’intestazione yaml.

Crea mystyle.tex e scrivi lì:

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

Nel file Rmd utilizzare queste nuove definizioni

 --- 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 

E ottieni: inserisci la descrizione dell'immagine qui

Finora non sono stato in grado di fare meglio di hackerare il mio pezzettino di markup in cima al formato rmd : chiamo il mio file sorgente rmd0 ed rmd0 uno script che include questo tidbit per tradurlo in rmd prima di chiamare knit :

 sed -e 's/BEGIN2COLS\(.*\)/
/' \ -e 's/SWITCH2COLS/<\/td>/' \ -e 's/END2COLS/<\/td><\/tr><\/table>/' ...

Ci sono alcuni motivi per cui non mi piace. (1) È brutto e per scopi speciali, e non ho un modo particolarmente valido per consentire argomenti opzionali (ad es. Ampiezze relative di colonne, allineamento, ecc.). (2) Deve essere ottimizzato per ogni formato di output (ad es. Se volessi l’output di LaTeX / beamer avrei bisogno di sostituire \begin{columns}\begin{column}{5cm} ... \end{column}\begin{column}{5cm} ... \end{column}\end{columns} invece (come risulta, voglio ignorare la formattazione a due colonne quando faccio volantini in formato LaTeX, quindi è un po ‘più semplice, ma è ancora brutta).

Slidify potrebbe ancora essere la risposta.