Table in Bookdown/Huskydown with several features (Citation, Caption, URL, PNG Figure, …)

后端 未结 1 1931
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-11 14:11

I would like to include a table in an R markdown document (Bookdown/Huskydown) which should meet the following requirements. Ideally, the table works with several output for

相关标签:
1条回答
  • 2020-12-11 14:36

    This is less an answer than providing MWEs for the table shown above

    ```{r}
    # create some random text
    library(stringi)
    some_text <- stri_rand_lipsum(1)
    some_text <- substr(some_text, 1, 75)
    
    # create dataframe with some stuff
    figpath <- "figure/"
    df <- data.frame(
      Citation = c("@R-base", "@R-bookdown"),
      Textfield = c("**Formatted** string<br/> -- _Everyone_ needs H^2^O", some_text),
      URL = c("[R-url](https://www.r-project.org/)", "[bookdown](https://bookdown.org/)"),
      fig_local_md = c(
        paste0("![](", figpath, "Rlogo.png){ width=10% height=5% }"),
        paste0("![](", figpath, "bookdownlogo.png){ height='36px' width='36px' }")
      )#,
      # not working:
      # fig_local_knitr = c("knitr::include_graphics('figure/Rlogo.png')", "knitr::include_graphics('figure/bookdownlogo.png')") 
    )
    
    # only include if output format is HTML, else pander throws error
    if (knitr::is_html_output()) {
      df$fig_web  <- c("![](https://www.picgifs.com/glitter-gifs/a/arrows/picgifs-arrows-110130.gif)")
      output_format <- "html"
    }
    if (knitr::is_latex_output()) {
      output_format <- "latex"
    }
    ```
    

    markdown

    Table: markdown table: markdown styling works in HTML (*italics*, **bold**), LaTex styling in PDF (\\textbf{bold})
    
      | Image                                                      | Description                                                  |
      | :--------------------------------------------------------- | :----------------------------------------------------------- |
      | ![](figure/Rlogo.png){ width=10% height=5% }               | **Image description** [@R-base]  <br/>Lorem ipsum dolor sit amet, ...  [R-url](https://www.r-project.org/) |
      | ![](figure/bookdownlogo.png){ height='36px' width='36px' } | **Image description** [@R-bookdown] <br/>Lorem ipsum dolor sit amet, ... [bookdown](https://bookdown.org/) |
    

    kable table

      ```{r kable-table, echo=FALSE, out.width='90%', fig.align = "center", results='asis'}
    library(knitr)
    kable(df, 
          caption = "kable table: markdown styling works in HTML (*italics*, **bold**), LaTex styling in PDF (\\textbf{bold})", 
          caption.short = "md styling works in HTML (*italics*, **bold**), LaTex styling in PDF (\\textbf{bold})"
          )
    ```
    

    kableExtra table

    ```{r kableExtra-table, echo=FALSE, out.width='90%', fig.align = "center", results='asis'}
    library(kableExtra)
    # http://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf 
    kable(
      df,
      caption = "kableExtra table: markdown styling works in HTML (*italics*, **bold**), LaTex styling in PDF (\\textbf{bold})",
      output_format, booktabs = T, # output_format = latex, html (specify above)
      # align = "l", 
      valign = "top"
    ) %>% 
      kable_styling(full_width = F,
                    latex_options = c(#"striped",
                      "hold_position", # stop table floating
                      "repeat_header") # for long tables
      ) %>% 
      column_spec(1, bold = T, border_right = T, width = "30em") %>%
      column_spec(2, width = "50em") %>%
      column_spec(3, width = "5em") %>%
      column_spec(4, width = "10em") %>%
      column_spec(5, width = "10em") %>%
      footnote(general = "Here is a general comments of the table. ",
               number = c("Footnote 1; ", "Footnote 2; "),
               alphabet = c("Footnote A; ", "Footnote B; "),
               symbol = c("Footnote Symbol 1; ", "Footnote Symbol 2"),
               general_title = "General: ", number_title = "Type I: ",
               alphabet_title = "Type II: ", symbol_title = "Type III: ",
               footnote_as_chunk = T, title_format = c("italic", "underline")
      )
    ```
    

    pander table

    ```{r pander-table, echo=FALSE, out.width='90%', fig.align = "center", results='asis'}
    library(pander)
    # https://cran.r-project.org/web/packages/pander/vignettes/pandoc_table.html
    
    pander(
      df,
      caption = "pander table: markdown styling works in HTML and PDF (*italics*, **bold**), LaTex styling in PDF (\\textbf{bold})",
      # style = "multiline", # simple
      split.table = Inf, # default = 80 characters; Inf = turn off table splitting
      split.cells = c(15, 50, 5, 5, 5), # default = 30
      # split.cells = c("25%", "50%", "5%", "10%", "10%"), # no difference
      justify = "left"
    )
    ```
    

    huxtable table

    ```{r huxtable-table, echo=FALSE, out.width='90%', fig.align = "center", results='asis'}
    library(dplyr)
    library(huxtable)
    # https://hughjonesd.github.io/huxtable/
    hux <- as_hux(df)                                                       %>%
      # huxtable::add_rownames(colname = '')                                  %>%
      huxtable::add_colnames()                                              %>%
      set_top_border(1, everywhere, 1)                                      %>%
      set_bottom_border(1, everywhere, 1)                                   %>%
      set_bottom_border(final(), everywhere, 1)                             %>%
      set_bold(1, everywhere, TRUE)                                         %>% # bold headlines
      set_italic(-1, 1, TRUE)                                               %>% # italics in first column (except the first row)
      set_valign("top")                                                     %>%
      set_width(1)                                                          %>%
      set_col_width(c(0.10,0.45,0.05,0.10,0.10))                             %>%
      set_wrap(TRUE)                                        %>%
      set_position('left')                                    %>% # fix table alignment (default is center)
      add_footnote("Sample Footnote")                                       %>% 
      set_font_size(4)
    
    table_caption <-  'huxtable table: markdown styling works in HTML (*italics*, **bold**), LaTex styling in PDF (\\textbf{bold})'
    
    # Print table conditional on output type
    if (knitr::is_html_output()) {
      caption(hux) <- paste0('(#tab:huxtable-table-explicit) ', table_caption)
      print_html(hux) # output table html friendly (requires in chunk options "results='asis'")
    }
    if (knitr::is_latex_output()) {
      caption(hux) <- paste0('(\\#tab:huxtable-table-explicit) ', table_caption)
      hux   # if using chunk option "results='asis'" simply output the table with "hux", i.e. do not use print_latex(hux)
    }
    ```
    

    Referencing the tables

    works differently for different table types

    Adding a short caption for the LoT

    Finally adding a short caption for the table of figures is not really working as desired (ref:huxtable-table-caption) huxtable-table caption (ref:huxtable-table-scaption) huxtable-table short caption

    ```{r huxtable-table, echo=FALSE, out.width='90%', fig.align = "center", fig.cap='(ref:huxtable-table-caption)', fig.scap='(ref:huxtable-table-scaption)', results='asis'}
    ...
    ```
    
    0 讨论(0)
提交回复
热议问题