two-column layouts in RStudio presentations/slidify/pandoc

前端 未结 7 2003
有刺的猬
有刺的猬 2020-11-30 19:00

I\'m trying to come up with a good system for generating slides and accompanying handouts. The ideal system would have the following properties:

  • beautiful in b
相关标签:
7条回答
  • 2020-11-30 19:13

    I now have what I think is a reasonable solution that should apply at least to ioslides-based solutions, and maybe (?) to other HTML5-based formats. Starting here, I added

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

    to the beginning of my document; then putting <p class="forceBreak"></p> within a slide with {.columns-2} breaks the column at that point, e.g.

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

    There may be an even better way, but this isn't too painful.

    @ChrisMerkord points out in comments that

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

    worked instead (I haven't tested ...)

    0 讨论(0)
  • 2020-11-30 19:21

    So far I haven't been able to do better than hacking my own little bit of markup on top of the rmd format: I call my source file rmd0 and run a script including this sed tidbit to translate it to rmd before calling 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>/' ...
    

    There are a few reasons I don't like this. (1) It's ugly and special-purpose, and I don't have a particularly good way to allow optional arguments (e.g. relative widths of columns, alignment, etc.). (2) It has to be tweaked for each output format (e.g. if I wanted LaTeX/beamer output I would need to substitute \begin{columns}\begin{column}{5cm} ... \end{column}\begin{column}{5cm} ... \end{column}\end{columns} instead (as it turns out I want to ignore the two-column formatting when I make LaTeX-format handouts, so it's a little easier, but it's still ugly).

    Slidify may yet be the answer.

    0 讨论(0)
  • 2020-11-30 19:24

    This is an old Q, but I was recently plagued by a similar question, here's what I found:

    Using the RPres format, two columns can be specified like so (details). Note that RPres can only be converted to HTML by clicking a button in RStudio, there doesn't seem to be any command line method, which is a bit annoying. Despite, that I'd say it is currently the simplest and most flexible method for getting slide columns with markdown:

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

    enter image description here

    Some flexibility is afforded by adjusting the column proportions:

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

    enter image description here

    With rmarkdown we can get two columns, but with no control over where the break is, which is a bit of a problem:

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

    enter image description here

    We can also mix markdown and LaTeX in an Rmd file using the beamer_presentation format in RStudio to get two columns like this, but can't run any code in either column, which is a 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

    Seems like a regular Rnw LaTeX doc is the best way to get columns if you want to use LaTex, not this markdown hybrid (cf. two column beamer/sweave slide with grid graphic)

    In all of the above an image can be placed in an column.

    The slidify website has instructions on making two columns here: http://slidify.org/customize.html but it's not clear what has to go into the assets/layouts folder to make it work

    0 讨论(0)
  • 2020-11-30 19:26

    You can use fenced_divs notation or ::: to create columns or `Two Content layout'. See also this page to know more about the 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...
    ```
    ::::
    
    :::
    

    Since pandoc 2+, which supports the notation, was implemented in RStudio v1.2+, you may need to install RStudio v1.2+ first. The installation is easy enough (at least in my case); just download and install RStudio v1.2+. In the way of installation, the former version of RStudio on your computer will be replaced with the new one without uninstalling it manually.

    The ::: notation can be used even when you knit .Rmd files with beamer_presentation option, as well as when you create HTML slides. So we don't have to neither mix markdown and LaTeX notation in one file, nor add additional codes any longer: just knit the file as you knit other .Rmd with other options.

    0 讨论(0)
  • 2020-11-30 19:29

    Not a direct solution, but Yihui's Xaringan package https://github.com/yihui/xaringan/ works for me. It's based on remark.js. In the default template, you can use .pull-left[] and .pull-right[] . Example: https://slides.yihui.name/xaringan/#15. You only need a minimum tweak on the existing .rmd files.

    0 讨论(0)
  • 2020-11-30 19:32

    I got an idea from HERE, the basic solutions was:


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

    0 讨论(0)
提交回复
热议问题