rmarkdown icon indicating copy to clipboard operation
rmarkdown copied to clipboard

kableExtra in rmarkdown (pdf-output) with shiny app: ! Undefined control sequence

Open alipprc opened this issue 2 years ago • 0 comments

I have followed this issue in order to render a rmarkdown to pdf while using kableextra, but It fails when I'm using the shiny app. If I use the Knit button from Rstudio IDE, it will compile, but not from the shiny app ! I have prepared a minimal example as well :

library(shiny)
library(dplyr)
library(kableExtra)

ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      numericInput("n_rows", label = "Number of rows to display", value = 10),
      downloadButton('report',"Generate Report")
    ),
    mainPanel(
      tableOutput("mtcars_table")
    )
  )
)


server <- function(input, output,session) {
  output$mtcars_table <- renderTable({
    head(mtcars, n = input$n_rows)
  })
  
  output$report <- downloadHandler(
    # For PDF output, change this to "report.pdf"
    filename = "report.pdf",
    content = function(file) {
      withProgress(message = 'Calculation in progress',{
        incProgress(session = session)
        tempReport <- file.path(tempdir(), "report.Rmd")
        file.copy("report.Rmd", tempReport, overwrite = TRUE)
        
        params <- list(df = mtcars[input$n_rows,])
        
        rmarkdown::render(tempReport, output_file = file,
                          params = params,
                          envir = new.env(parent = globalenv())
        )
        incProgress(session=session)
      }, session = session)
    }
  )
}


shinyApp(ui, server)  

And the report.rmd :

---
output:
  pdf_document:
    toc: false
    keep_tex: true
    number_sections: true
  documentclass: scrartcl
params:
  df: NA
header-includes:
  \usepackage[]{graphicx}
  \usepackage[]{xcolor}
  \usepackage{helvet}
  \renewcommand{\familydefault}{\sfdefault}
  \usepackage[T1]{fontenc}
  \geometry{verbose,tmargin=4.2cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2cm,headheight=1.6cm,headsep=1.2cm,footskip=1cm}
  \pagestyle{fancy}
  \setlength{\parskip}{\medskipamount}
  \setlength{\parindent}{0pt}
  \usepackage{textcomp}
  \usepackage{babel}
  \usepackage{pdflscape}
  \usepackage{tabularx}
  \usepackage{color}
  \usepackage{array}
  \usepackage{hyperref}
  \usepackage{ifthen}
  \usepackage{float}
  \usepackage{fancyhdr}
  \usepackage{framed}
  \usepackage{alltt}
  \usepackage{booktabs}
  \usepackage{makecell}
  \usepackage{longtable}
  \usepackage{multirow}
  \usepackage{wrapfig}
  \usepackage{colortbl}
  \usepackage{tabu}
  \usepackage{threeparttable}
  \usepackage{threeparttablex}
  \usepackage[normalem]{ulem}
  \usepackage{xcolor}
---

# Chapter title

```{r  echo=FALSE, message=FALSE, warning=FALSE,fig.pos = 'H'}
library(kableExtra)
df = params$df
kbl(df, booktabs = T, linesep = "") %>%
kable_styling(latex_options = "striped", stripe_index = c(1,2, 5:6))

Section title

\lipsum[1-10]

alipprc avatar Mar 20 '23 18:03 alipprc