it-swarm.com.de

zweispaltige Layouts in RStudio-Präsentationen/Slidify/Pandoc

Ich versuche, ein gutes System zur Erstellung von Folien und begleitenden Handouts zu entwickeln. Das ideale System hätte folgende Eigenschaften:

  • in Präsentations- (PDF/HTML) und Handout-Layouts (PDF) schön gestaltet (Handouts sollten Platz für Notizen haben)
  • eingebettete R-Stücke, Figuren, andere JPG/PNG-Bilder usw.
  • einfach zu komponieren
  • mit Befehlszeilentools erstellen
  • bibliographie-Unterstützung
  • pandoc Folientrennerformat (automatisch generieren Sie eine neue Folie nach Kopfzeilen einer angegebenen Ebene)
  • Ich kann mit ein wenig zusätzlicher Verarbeitung leben (z. B. über sed), würde aber lieber keine riesige Infrastruktur schreiben
  • zweispaltige Layouts: Es gibt einen SO] -Posten, wie man mehrspaltige Folien aus Pandoc erhält , aber es ist LaTeX- und nicht HTML-orientiert.
  • möglichkeit zur Anpassung der Größe eingebetteter Bilder (außer von R-generierten Figuren) und der Spaltenbreite im laufenden Betrieb

Folgendes habe ich bisher über die verschiedenen Optionen entdeckt:

  • Slidify:
    • macht kein pandoc Folientrenner-Format, obwohl es gibt eine Problemumgehung
    • der Vorschlag zum Erstellen von Handouts ist das Drucken in PDF. Ich möchte gerne Platz für Notizen usw. lassen (ich könnte wahrscheinlich einen Weg finden, dies mit etwas wie PDFtk oder psnup ...) zu tun.
  • RStudio Präsentationen (.Rpres Dateien):
    • macht viele Dinge gut, einschließlich mehrspaltiger Spalten mit bestimmten Breiten
    • unterstützt das pandoc Folientrennzeichenformat nicht 
    • Ich kann nicht herausfinden, was unter der Haube vorgeht. Es gibt RStudio-Dokumentation , das den Übersetzungsprozess für reguläres HTML beschreibt, es scheint jedoch nicht das R-Präsentationsformat abzudecken (was nicht ganz das gleiche ist). (Ich habe zuvor einige Anstrengungen in Herausfinden, wie man eine RStudio-artige Ausgabe über Pandoc erhält ...) investiert, was bedeutet, dass ich keine Folien usw. von der Befehlszeile erzeugen kann.
  • RStudio's Development Version (Stand März 2014) wird mit Pandoc und Version 2 von rmarkdown geliefert. Viele der oben genannten Probleme werden mit dem .Rpres-Format behoben.
  • pandoc: ist möglicherweise der einzige Markdown-Übersetzer, der über Funktionen wie Fußnoten, Bibliografieunterstützung usw. verfügt. Ich kann auch pandoc verwenden, um LaTeX mithilfe der tufte-handout class zu generieren, die meinen Schönheitskriterien entspricht.
    • Leider scheint es keine integrierte Unterstützung für das zweispaltige Format zu haben. Yihui Xies HTML5-Beispiel zeigt keine zweispaltigen Beispiele und behauptet (auf Folie 5), dass das Klicken auf "HTML knit" in RStudio pandoc -s -S -i -t dzslides --mathjax knitr-slides.md -o knitr-slides.html entspricht, scheint jedoch nicht zu sein Sein ...
  • LaTeX/Beamer: Ich könnte einfach in Rnw (knitr-dialect Sweave) anstelle von R-Markdown komponieren. Dies würde mir ultimative Flexibilität geben ...
    • trotz vieler Jahre der Verwendung von LaTeX finde ich LaTeX-Kompositionen eher schmerzhaft als Abschriften. 

Nach all dem ist meine spezifische Frage: Was ist der beste (einfachste) Weg, um ein zweispaltiges Layout für die HTML-Ausgabe zu generieren?

Jeder andere Rat wird auch geschätzt.

55
Ben Bolker

Ich habe jetzt eine meiner Meinung nach vernünftige Lösung, die zumindest für ioslides-basierte Lösungen und möglicherweise (?) Für andere HTML5-basierte Formate gelten sollte. Ab hier habe ich hinzugefügt

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

an den Anfang meines Dokuments; Wenn Sie dann <p class="forceBreak"></p> in eine Folie mit {.columns-2} einfügen, wird die Spalte an diesem Punkt unterbrochen, z.

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

Es kann einen noch besseren Weg geben, aber das ist nicht zu schmerzhaft.

@ChrisMerkord weist in Kommentaren darauf hin

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

stattdessen gearbeitet (habe ich nicht getestet ...)

11
Ben Bolker

Dies ist ein altes Q, aber kürzlich wurde ich von einer ähnlichen Frage geplagt. Ich habe folgendes gefunden:

Mit dem RPres-Format können zwei Spalten wie folgt angegeben werden ( details ). Beachten Sie, dass RPres nur durch Klicken auf eine Schaltfläche in RStudio in HTML konvertiert werden können. Es scheint keine Befehlszeilenmethode zu geben, was etwas nervig ist. Trotzdem würde ich sagen, dass es derzeit die einfachste und flexibelste Methode ist, Folienspalten mit Markdown zu erhalten: 

=== 

Two Column Layout  
===

This slide has two columns

***

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

enter image description here

Durch die Anpassung der Säulenproportionen ist etwas Flexibilität gegeben: 

===

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

***

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

enter image description here

Mit rmarkdown können wir zwei Spalten erhalten, aber keine Kontrolle darüber, wo der Bruch ist, was ein Problem darstellt: 

---
output: ioslides_presentation
---


## Two Column Layout  {.columns-2}

This slide has two columns


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

enter image description here

Wir können Markdown und LaTeX auch in einer Rmd-Datei unter Verwendung des beamer_presentation-Formats in RStudio mischen, um zwei Spalten wie folgt zu erhalten. In beiden Spalten kann jedoch kein Code ausgeführt werden, was eine Einschränkung darstellt: 

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

Es scheint, als wäre ein normales Rnw LaTeX-Dokument der beste Weg, um Spalten zu erhalten, wenn Sie LaTex verwenden möchten, nicht diesen Markdown-Hybrid (vgl. zweispaltige Beamer/Sweave-Folie mit Gittergrafik ). 

In allen oben genannten Bereichen kann ein Bild in eine Spalte eingefügt werden.

Die Slidify-Website enthält Anweisungen zum Erstellen von zwei Spalten: http://slidify.org/customize.html , aber es ist nicht klar, was in den Assets/Layouts-Ordner verschoben werden muss, damit es funktioniert

26
Ben

Es gibt einen Workaround für Beamer-Fehler.

Kurz gesagt: Fehler bezieht sich auf die Pandoc-Konvertierungs-Engine, die alles zwischen \begin{...} und \end{...} als TeX behandelt. Dies kann umgangen werden, indem Sie für y_ll-Header eine neue Definition für begin{column} und end{column} angeben. 

Erstelle mystyle.tex und schreibe dort:

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

Verwenden Sie in der Rmd-Datei diese neuen definitions

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

Und du bekommst:  enter image description here

6

Ich habe eine Idee von HIER , die grundlegenden Lösungen waren:


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

Bisher konnte ich nichts Besseres tun, als mein eigenes kleines Markup über das rmd-Format zu hacken: Ich rufe meine Quelldatei rmd0 auf und führe ein Skript mit diesem sed tidbit aus, um es in rmd zu übersetzen, bevor ich knit aufrufe

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>/' ...

Es gibt einige Gründe, warum ich das nicht mag. (1) Es ist hässlich und hat einen besonderen Zweck, und ich habe keine besonders gute Möglichkeit, optionale Argumente zuzulassen (z. B. relative Spaltenbreiten, Ausrichtung usw.). (2) Es muss für jedes Ausgabeformat angepasst werden (z. B. wenn ich die Ausgabe von LaTeX/Beamer möchte, müsste ich stattdessen \begin{columns}\begin{column}{5cm} ... \end{column}\begin{column}{5cm} ... \end{column}\end{columns} ersetzen (da sich herausstellt, dass ich die zweispaltige Formatierung bei der Erstellung von Handouts im LaTeX-Format ignorieren möchte, so ist es ein bisschen einfacher, aber es ist immer noch hässlich).

Slidify ist vielleicht noch die Antwort.

3
Ben Bolker

Keine direkte Lösung, aber Yihuis Xaringan package https://github.com/yihui/xaringan/ funktioniert für mich. Es basiert auf remark.js. In der Standardvorlage können Sie .pull-left[] und .pull-right[] verwenden. Beispiel: https://slides.yihui.name/xaringan/#15 . Sie benötigen nur ein Minimum an Tweak für die vorhandenen .rmd-Dateien. 

0
yszhou

Sie können fenced_divs notation oder ::: verwenden, um Spalten oder 'Two Content Layout' zu erstellen. Siehe auch diese Seite , um mehr über die Notation zu erfahren.

## 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...
```
::::

:::

Da pandoc 2+, das die Notation unterstützt, in RStudio v1.2+ implementiert wurde, müssen Sie möglicherweise zuerst RStudio v1.2+ installieren. Die Installation ist einfach genug (zumindest in meinem Fall); Einfach RStudio v1.2+ herunterladen und installieren. Bei der Installation wird die frühere Version von RStudio auf Ihrem Computer durch die neue ersetzt, ohne sie manuell zu deinstallieren.

Die :::-Notation kann auch verwendet werden, wenn Sie .Rmd-Dateien mit der Option beamer_presentation stricken und wenn Sie HTML-Folien erstellen. Wir müssen also weder Markdown und LaTeX-Notation in einer Datei mischen, noch zusätzliche Codes hinzufügen: einfach die Datei stricken, während Sie anderen .Rmd mit anderen Optionen stricken. 

0