diff --git a/R/add_header_above.R b/R/add_header_above.R
new file mode 100644
index 0000000..d3634fa
--- /dev/null
+++ b/R/add_header_above.R
@@ -0,0 +1,103 @@
+#' Add an extra header row above the current header
+#' @export
+add_header_above <- function(kable_input, header = NULL) {
+  kable_format <- attr(kable_input, "format")
+  if (!kable_format %in% c("html", "latex")) {
+    stop("Please specify output format in your kable function. Currently ",
+         "generic markdown table using pandoc is not supported.")
+  }
+  if (kable_format == "html") {
+    return(htmlTable_add_header_above(kable_input, header))
+  }
+  if (kable_format == "latex") {
+    return(pdfTable_add_header_above(kable_input, header))
+  }
+}
+
+# HTML
+htmlTable_add_header_above <- function(kable_input, header = NULL) {
+  if (is.null(header)) return(kable_input)
+  kable_xml <- read_xml(as.character(kable_input), options = c("COMPACT"))
+  # somehow xml2 cannot directly search by name here (it will result in a crash)
+  kable_xml_thead <- xml_child(kable_xml, 1)
+  if (xml_name(kable_xml_thead) != "thead") {
+    kable_xml_thead <- xml_child(kable_xml, 2)
+  }
+
+  header <- standardize_header_input(header)
+
+  header_rows <- xml_children(kable_xml_thead)
+  bottom_header_row <- header_rows[[length(header_rows)]]
+  kable_ncol <- length(xml_children(bottom_header_row))
+  if (sum(header$colspan) != kable_ncol) {
+    stop("The new header row you provided has a different total number of ",
+         "columns with the original kable output.")
+  }
+
+  new_header_row <- htmlTable_new_header_generator(header)
+  xml_add_child(kable_xml_thead, new_header_row, .where = 0)
+  return(structure(as.character(kable_xml), format = "html",
+                   class = "knitr_kable"))
+}
+
+standardize_header_input <- function(header) {
+  header_names <- names(header)
+
+  if (is.null(header_names)) {
+    return(data.frame(header = header, colspan = 1, row.names = NULL))
+  }
+
+  names(header)[header_names == ""] <- header[header_names == ""]
+  header[header_names == ""] <- 1
+  header_names <- names(header)
+  header <- as.numeric(header)
+  names(header) <- header_names
+  return(data.frame(header = names(header), colspan = header, row.names = NULL))
+}
+
+htmlTable_new_header_generator <- function(header_df) {
+  header_items <- apply(header_df, 1, function(x) {
+    paste0('<th style="text-align:center;" colspan="', x[2], '">',
+           x[1], '</th>')
+  })
+  header_text <- paste(c("<tr>", header_items, "</tr>"), collapse = "")
+  header_xml <- read_xml(header_text, options = c("COMPACT"))
+  return(header_xml)
+}
+
+# Add an extra header row above the current header in a LaTeX table ------
+pdfTable_add_header_above <- function(kable_input, header = NULL) {
+  table_info <- magic_mirror(kable_input)
+  header <- standardize_header_input(header)
+  hline_type <- switch(table_info$booktabs + 1, "\\\\hline", "\\\\toprule")
+  out <- sub(hline_type,
+             paste0(hline_type, "\n",
+                    pdfTable_new_header_generator(header, table_info$booktabs)),
+             as.character(kable_input))
+  out <- structure(out, format = "latex", class = "knitr_kable")
+  return(out)
+}
+
+pdfTable_new_header_generator <- function(header_df, booktabs = F) {
+  if (booktabs) {
+    header_df$align <- "c"
+  } else {
+    header_df$align <- "|c|"
+    header_df$align[1] <- "c|"
+    header_df$align[nrow(header_df)] <- "|c"
+  }
+  header_items <- apply(header_df, 1, function(x) {
+    # if(x[2] == 1) return(x[1])
+    paste0('\\\\multicolumn{', x[2], '}{', x[3], '}{', x[1], "}")
+  })
+  header_text <- paste(paste(header_items, collapse = " & "), "\\\\\\\\")
+  cline_end <- cumsum(header_df$colspan)
+  cline_start <- c(0, cline_end) + 1
+  cline_start <- cline_start[-length(cline_start)]
+  cline_type <- switch(booktabs + 1, "\\\\cline{", "\\\\cmidrule(l{2pt}r{2pt}){")
+  cline <- paste0(cline_type, cline_start, "-", cline_end, "}")
+  cline <- cline[trimws(header_df$header) != ""]
+  cline <- paste(cline, collapse = " ")
+  header_text <- paste(header_text, cline)
+  return(header_text)
+}
diff --git a/R/html_add_header_above.R b/R/html_add_header_above.R
deleted file mode 100644
index c9b153e..0000000
--- a/R/html_add_header_above.R
+++ /dev/null
@@ -1,51 +0,0 @@
-#' Add an extra header row above the current header
-#' @export
-htmlTable_add_header_above <- function(kable_input, header = NULL) {
-  # if (is.null(header)) return(kable_input)
-  kable_xml <- read_xml(as.character(kable_input), options = c("COMPACT"))
-  # somehow xml2 cannot directly search by name here (it will result in a crash)
-  kable_xml_thead <- xml_child(kable_xml, 1)
-  if (xml_name(kable_xml_thead) != "thead") {
-    kable_xml_thead <- xml_child(kable_xml, 2)
-  }
-
-  header <- standardize_header_input(header)
-
-  header_rows <- xml_children(kable_xml_thead)
-  bottom_header_row <- header_rows[[length(header_rows)]]
-  kable_ncol <- length(xml_children(bottom_header_row))
-  if (sum(header$colspan) != kable_ncol) {
-    stop("The new header row you provided has a different total number of ",
-         "columns with the original kable output.")
-  }
-
-  new_header_row <- new_header_generator(header)
-  xml_add_child(kable_xml_thead, new_header_row, .where = 0)
-  return(structure(as.character(kable_xml), format = "html",
-                   class = "knitr_kable"))
-}
-
-standardize_header_input <- function(header) {
-  header_names <- names(header)
-
-  if (is.null(header_names)) {
-    return(data.frame(header = header, colspan = 1, row.names = NULL))
-  }
-
-  names(header)[header_names == ""] <- header[header_names == ""]
-  header[header_names == ""] <- 1
-  header_names <- names(header)
-  header <- as.numeric(header)
-  names(header) <- header_names
-  return(data.frame(header = names(header), colspan = header, row.names = NULL))
-}
-
-new_header_generator <- function(header_vector) {
-  header_items <- apply(header_vector, 1, function(x) {
-    paste0('<th style="text-align:center;" colspan="', x[2], '">',
-           x[1], '</th>')
-  })
-  header_text <- paste(c("<tr>", header_items, "</tr>"), collapse = "")
-  header_xml <- read_xml(header_text, options = c("COMPACT"))
-  return(header_xml)
-}
diff --git a/R/kableExtra-package.R b/R/kableExtra-package.R
index 6f7fa7e..cb4d739 100644
--- a/R/kableExtra-package.R
+++ b/R/kableExtra-package.R
@@ -4,7 +4,8 @@
 #' @importFrom xml2 read_xml xml_attr xml_has_attr xml_attr<- read_html
 #' xml_child xml_children xml_name xml_add_sibling xml_add_child
 #' @importFrom rvest html_table
-#' @importFrom knitr kable
+#' @importFrom knitr knit_meta_add
+#' @importFrom rmarkdown latex_dependency
 #' @name kableExtra-package
 #' @aliases kableExtra
 #' @docType package
diff --git a/R/htmlTable_styling.R b/R/kable_styling.R
similarity index 61%
rename from R/htmlTable_styling.R
rename to R/kable_styling.R
index dcd0c96..9bde4f0 100644
--- a/R/htmlTable_styling.R
+++ b/R/kable_styling.R
@@ -16,6 +16,35 @@
 #' @param font_size A numeric input for table font size
 #'
 #' @export
+kable_styling <- function(kable_input,
+                          bootstrap_options = "basic",
+                          full_width = T,
+                          float = c("center", "left", "right"),
+                          font_size = NULL,
+                          latex_hold_position = F,
+                          latex_scale_down = F) {
+  kable_format <- attr(kable_input, "format")
+  if (!kable_format %in% c("html", "latex")) {
+    stop("Please specify output format in your kable function. Currently ",
+         "generic markdown table using pandoc is not supported.")
+  }
+  if (kable_format == "html") {
+    return(htmlTable_styling(kable_input,
+                             bootstrap_options = bootstrap_options,
+                             full_width = full_width,
+                             float = float,
+                             font_size = font_size))
+  }
+  if (kable_format == "latex") {
+    return(pdfTable_styling(full_width = full_width,
+                            float = float,
+                            font_size = font_size,
+                            latex_hold_position = latex_hold_position,
+                            latex_scale_down = latex_scale_down))
+  }
+}
+
+# htmlTable Styling ------------
 htmlTable_styling <- function(kable_input,
                               bootstrap_options = "basic",
                               full_width = T,
@@ -51,7 +80,7 @@
   }
   if (!is.null(font_size)) {
     kable_xml_style <- c(kable_xml_style,
-                          paste0("font-size: ", font_size, "px;"))
+                         paste0("font-size: ", font_size, "px;"))
   }
   if (!full_width) {
     kable_xml_style <- c(kable_xml_style, "width: auto !important;")
@@ -60,11 +89,11 @@
   float <- match.arg(float)
   if (float == "center") {
     kable_xml_style <- c(kable_xml_style,
-                          "margin-left:auto; margin-right:auto;")
+                         "margin-left:auto; margin-right:auto;")
   }
   if (float == "right") {
     kable_xml_style <- c(kable_xml_style,
-                          "float: right;")
+                         "float: right;")
   }
   if (length(kable_xml_style) != 0) {
     xml_attr(kable_xml, "style") <- paste(kable_xml_style, collapse = " ")
@@ -72,3 +101,13 @@
   return(structure(as.character(kable_xml), format = "html",
                    class = "knitr_kable"))
 }
+
+# LaTeX table style
+pdfTable_styling <- function(kable_input,
+                             full_width = T,
+                             float = c("center", "left", "right"),
+                             font_size = NULL,
+                             latex_hold_position = F,
+                             latex_scale_down = F) {
+
+}
diff --git a/R/util.R b/R/util.R
index 9c29ddb..9023f4b 100644
--- a/R/util.R
+++ b/R/util.R
@@ -8,13 +8,25 @@
 
 rmd_format <- function(){
   rmd_output_metadata <- metadata$output
-  rmd_fmt <- ifelse(
-    is.null(rmd_output_metadata),
-    "markdown", ifelse(
-    rmd_output_metadata %in% c("html_document", "rmarkdown::html_vignette"),
-    "html",ifelse(
-      rmd_output_metadata %in% c("pdf_document", "rmarkdown::tufte_handout"),
-      "latex", "markdown"
-    )))
-  return(rmd_fmt)
+  # rmd_fmt <- ifelse(
+  #   is.null(rmd_output_metadata),
+  #   "markdown", ifelse(
+  #   rmd_output_metadata %in% c("html_document", "rmarkdown::html_vignette"),
+  #   "html",ifelse(
+  #     rmd_output_metadata %in% c("pdf_document", "rmarkdown::tufte_handout"),
+  #     "latex", "markdown"
+  #   )))
+  return(names(rmd_output_metadata))
+}
+
+#' Load a LaTeX package
+#'
+#' @description Load a LaTeX package using R code. Just like `\\usepackage{}`
+#' in LaTeX
+#'
+#' @param name The LaTeX package name
+#' @param options The LaTeX options for the package
+#' @export
+usepackage_latex <- function(name, options = NULL) {
+  invisible(knit_meta_add(list(latex_dependency(name, options))))
 }
diff --git a/R/zzz.R b/R/zzz.R
new file mode 100644
index 0000000..fe9dd91
--- /dev/null
+++ b/R/zzz.R
@@ -0,0 +1,5 @@
+.onLoad <- function(libname = find.package("kableExtra"), pkgname = "kableExtra") {
+  usepackage_latex("booktabs")
+  usepackage_latex("longtable")
+  message("LaTeX package booktabs and longtable will be loaded by default.")
+}
