tutorial - Diseños de dos columnas en presentaciones de RStudio/slidify/pandoc
r presentation examples (5)
Ahora tengo lo que creo que es una solución razonable que debería aplicarse al menos a las ioslides
basadas en ioslides
, y tal vez (?) A otros formatos basados en HTML5. A partir de here , he añadido
<style>
div#before-column p.forceBreak {
break-before: column;
}
div#after-column p.forceBreak {
break-after: column;
}
</style>
al comienzo de mi documento; luego, colocar <p class="forceBreak"></p>
dentro de una diapositiva con {.columns-2}
rompe la columna en ese punto, por ejemplo
## 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)
Puede haber una manera aún mejor, pero esto no es demasiado doloroso.
@ChrisMerkord señala en los comentarios que
.forceBreak { -webkit-column-break-after: always; break-after: column; }
trabajó en su lugar (no he probado ...)
Estoy tratando de encontrar un buen sistema para generar diapositivas y documentos adjuntos. El sistema ideal tendría las siguientes propiedades:
- hermoso tanto en la presentación (PDF / HTML) como en el folleto (PDF) diseños (los folletos deben tener espacio para tomar notas)
- R trozos incrustados, figuras, otras imágenes JPG / PNG, etc.
- fácil de componer
- construir usando herramientas de línea de comando
- apoyo bibliográfico
-
pandoc
formato de separador de diapositivaspandoc
(generar automáticamente una nueva diapositiva después de los encabezados de un nivel específico) - Puedo vivir con un poco de procesamiento adicional (por ejemplo, a través de
sed
), pero preferiría no escribir una gran infraestructura - Diseños de dos columnas : hay una publicación SO sobre cómo obtener diapositivas de varias columnas de pandoc , pero está orientada a LaTeX, en lugar de a HTML.
- capacidad para ajustar los tamaños de las imágenes incrustadas (excepto las figuras generadas por R) y los anchos de columna sobre la marcha
Esto es lo que he descubierto hasta ahora acerca de las diversas opciones:
- Deslizar
- no hace el formato de separador de diapositivas
pandoc
, aunque hay una solución - la sugerencia para crear folletos es imprimir en PDF; Me gustaría dejar espacio para notas, etc. (Probablemente podría encontrar una manera de hacerlo usando algo como PDFtk o
psnup
...)
- no hace el formato de separador de diapositivas
- Presentaciones
RStudio
(archivos.Rpres
):- hace muchas cosas muy bien, incluyendo varias columnas con anchos especificados
- no admite el formato de separador de diapositivas
pandoc
- No puedo entender qué está pasando bajo el capó. Hay documentación de RStudio que describe el proceso de traducción para HTML regular, pero no parece abarcar el formato de presentación R (que no es exactamente el mismo). (Anteriormente he invertido un poco de esfuerzo en averiguar cómo obtener una salida similar a RStudio a través de pandoc ...), lo que significa que no puedo generar diapositivas, etc. desde la línea de comandos.
- La versión de desarrollo de RStudio (a partir de marzo de 2014) viene con Pandoc y la versión 2 de
rmarkdown
. Aborda muchos de los problemas anteriores con el formato.Rpres
. -
pandoc
: puede ser el único traductor de rebajas que tiene características como notas al pie, soporte de bibliografía, etc. También puedo usarpandoc
para generar LaTeX utilizando la clase tufte-handout , que cumple con mi criterio de belleza.- Desafortunadamente, parece que no tiene soporte para el formato de dos columnas incorporado. El ejemplo de Yihui Xie en HTML5 no muestra ningún ejemplo de dos columnas, y afirma (en la diapositiva 5) que hacer clic en el botón "Tejer HTML" en RStudio es equivalente a
pandoc -s -S -i -t dzslides --mathjax knitr-slides.md -o knitr-slides.html
, pero no parece ser ...
- Desafortunadamente, parece que no tiene soporte para el formato de dos columnas incorporado. El ejemplo de Yihui Xie en HTML5 no muestra ningún ejemplo de dos columnas, y afirma (en la diapositiva 5) que hacer clic en el botón "Tejer HTML" en RStudio es equivalente a
- LaTeX / beamer: Para
Rnw
simplemente podría componer enRnw
(Sweatve de dialecto de Knitr) en lugar de en laRnw
de R. Esto me daría máxima flexibilidad ...- a pesar de muchos años de uso de LaTeX, encuentro que la composición de LaTeX es más dolorosa que la composición de descuento.
Después de todo eso, mi pregunta específica es: ¿cuál es la mejor manera (más fácil) de generar un diseño de dos columnas para la salida HTML ?
Cualquier otro consejo también será apreciado.
Esta es una antigua Q, pero recientemente tuve una pregunta similar, esto es lo que encontré:
Usando el formato RPres, dos columnas se pueden especificar así ( details ). Tenga en cuenta que RPres solo se puede convertir a HTML haciendo clic en un botón en RStudio, no parece haber ningún método de línea de comandos, lo cual es un poco molesto. A pesar de eso, diría que en la actualidad es el método más simple y flexible para obtener columnas de diapositivas con markdown:
===
Two Column Layout
===
This slide has two columns
***
```{r, echo=FALSE}
plot(cars)
```
Se ofrece cierta flexibilidad ajustando las proporciones de la columna:
===
Two Column Layout
===
left: 30%
This slide has two columns
***
```{r, echo=FALSE}
plot(cars)
```
Con rmarkdown podemos obtener dos columnas, pero sin control sobre dónde está la ruptura, lo cual es un problema:
---
output: ioslides_presentation
---
## Two Column Layout {.columns-2}
This slide has two columns
```{r, echo=FALSE}
plot(cars)
```
También podemos mezclar markdown y LaTeX en un archivo Rmd usando el formato beamer_presentation
en RStudio para obtener dos columnas como esta, pero no puede ejecutar ningún código en ninguna de las columnas, lo cual es una limitación:
---
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}
Parece que un documento Rnw LaTeX normal es la mejor manera de obtener columnas si desea utilizar LaTex, no este híbrido de reducción (consulte la diapositiva / sweave de dos columnas con gráfico de rejilla )
En todo lo anterior se puede colocar una imagen en una columna.
El sitio web de slidify tiene instrucciones para hacer dos columnas aquí: http://slidify.org/customize.html pero no está claro qué tiene que ir a la carpeta de activos / diseños para que funcione
Hasta ahora no he podido hacer nada mejor que hackear mi propio margen de marcado en la parte superior del formato rmd0
: llamo a mi archivo fuente rmd0
y ejecuto un script que incluye este tidbit sed
para traducirlo a rmd
antes de llamar a 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>/'' ...
Hay algunas razones por las que no me gusta esto. (1) Es feo y especial, y no tengo una manera particularmente buena de permitir argumentos opcionales (por ejemplo, anchos relativos de columnas, alineación, etc.). (2) Debe ajustarse para cada formato de salida (por ejemplo, si quisiera una salida de LaTeX / beamer necesitaría sustituir /begin{columns}/begin{column}{5cm} ... /end{column}/begin{column}{5cm} ... /end{column}/end{columns}
lugar (resulta que quiero ignorar el formato de dos columnas cuando hago folletos en formato LaTeX, así que es un poco más fácil, pero aún es feo).
Slidify todavía puede ser la respuesta.
Hay una workaround para el error del proyector.
En resumen: el error está relacionado con el motor de conversión pandoc, que trata todo entre /begin{...}
y /end{...}
como TeX . Se puede evitar dando una nueva definición para begin{column}
y end{column}
en el encabezado de yaml.
Crea mystyle.tex y escribe allí:
/def/begincols{/begin{columns}}
/def/begincol{/begin{column}}
/def/endcol{/end{column}}
/def/endcols{/end{columns}}
En el archivo Rmd use estas nuevas definiciones.
---
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
Tengo una idea de HERE , las soluciones básicas fueron:
### 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>`