add line_sep to add_header_above
diff --git a/R/add_header_above.R b/R/add_header_above.R
index 00d56d9..b561189 100644
--- a/R/add_header_above.R
+++ b/R/add_header_above.R
@@ -35,6 +35,8 @@
 #' escaped.
 #' @param line A T/F value to control whether a line will appear underneath the
 #' header
+#' @param line_sep A numeric value indicating how much the midlines should be
+#' separated by space. Default is 3.
 #' @param extra_css An HTML only option. CSS defined here will be send to the
 #' td cell.
 #'
@@ -49,7 +51,8 @@
                              underline = FALSE, strikeout = FALSE,
                              align = "c", color = NULL, background = NULL,
                              font_size = NULL, angle = NULL,
-                             escape = TRUE, line = TRUE, extra_css = NULL) {
+                             escape = TRUE, line = TRUE, line_sep = 3,
+                             extra_css = NULL) {
   kable_format <- attr(kable_input, "format")
   if (!kable_format %in% c("html", "latex")) {
     warning("Please specify format in kable. kableExtra can customize either ",
@@ -61,13 +64,13 @@
     return(htmlTable_add_header_above(kable_input, header, bold, italic,
                                       monospace, underline, strikeout,
                                       align, color, background, font_size,
-                                      angle, escape, line, extra_css))
+                                      angle, escape, line, line_sep, extra_css))
   }
   if (kable_format == "latex") {
     return(pdfTable_add_header_above(kable_input, header, bold, italic,
                                      monospace, underline, strikeout,
                                      align, color, background,
-                                     font_size, angle, escape, line))
+                                     font_size, angle, escape, line, line_sep))
   }
 }
 
@@ -75,7 +78,8 @@
 htmlTable_add_header_above <- function(kable_input, header, bold, italic,
                                        monospace, underline, strikeout,
                                        align, color, background, font_size,
-                                       angle, escape, line, extra_css) {
+                                       angle, escape, line, line_sep,
+                                       extra_css) {
   if (is.null(header)) return(kable_input)
   kable_attrs <- attributes(kable_input)
   kable_xml <- read_kable_as_xml(kable_input)
@@ -96,8 +100,8 @@
   }
 
   new_header_row <- htmlTable_new_header_generator(
-    header, bold, italic, monospace, underline, strikeout, align, line,
-    color, background, font_size, angle, extra_css
+    header, bold, italic, monospace, underline, strikeout, align,
+    color, background, font_size, angle, line, line_sep, extra_css
   )
   xml_add_child(kable_xml_thead, new_header_row, .where = 0)
   out <- as_kable_xml(kable_xml)
@@ -127,9 +131,9 @@
 }
 
 htmlTable_new_header_generator <- function(header_df, bold, italic, monospace,
-                                           underline, strikeout, align, line,
+                                           underline, strikeout, align,
                                            color, background, font_size,
-                                           angle, extra_css) {
+                                           angle, line, line_sep, extra_css) {
   if (align %in% c("l", "c", "r")) {
     align <- switch(align, r = "right", c = "center", l = "left")
   }
@@ -175,15 +179,16 @@
 
   line <- ifelse(ez_rep(line, nrow(header_df)),
                  "border-bottom: 1px solid #ddd; padding-bottom: 5px; ", "")
+  line_sep <- ez_rep(line_sep, nrow(header_df))
+  line_sep <- glue::glue('padding-left:{line_sep}px;padding-right:{line_sep}px;')
 
   header_items <- ifelse(
     trimws(header_df$header) == "",
     paste0('<th style="border-bottom:hidden" colspan="', header_df$colspan,
            '"></th>'),
     paste0(
-      '<th style="border-bottom:hidden; ',
-      'padding-bottom:0; padding-left:3px;padding-right:3px;',
-      row_style, '" colspan="',
+      '<th style="border-bottom:hidden; padding-bottom:0; ',
+      line_sep, row_style, '" colspan="',
       header_df$colspan, '"><div style="', line, '">', header_df$header,
       '</div></th>')
   )
@@ -194,9 +199,9 @@
 
 # Add an extra header row above the current header in a LaTeX table ------
 pdfTable_add_header_above <- function(kable_input, header, bold, italic,
-                                      monospace, underline, strikeout,
-                                      align, color, background,
-                                      font_size, angle, escape, line) {
+                                      monospace, underline, strikeout, align,
+                                      color, background, font_size, angle,
+                                      escape, line, line_sep) {
   table_info <- magic_mirror(kable_input)
   header <- standardize_header_input(header)
 
@@ -209,7 +214,7 @@
   hline_type <- switch(table_info$booktabs + 1, "\\\\hline", "\\\\toprule")
   new_header_split <- pdfTable_new_header_generator(
     header, table_info$booktabs, bold, italic, monospace, underline, strikeout,
-    align, color, background, font_size, angle)
+    align, color, background, font_size, angle, line_sep)
   if (line) {
     new_header <- paste0(new_header_split[1], "\n", new_header_split[2])
   } else {
@@ -240,7 +245,8 @@
 pdfTable_new_header_generator <- function(header_df, booktabs = FALSE,
                                           bold, italic, monospace,
                                           underline, strikeout, align,
-                                          color, background, font_size, angle) {
+                                          color, background, font_size, angle,
+                                          line_sep) {
   n <- nrow(header_df)
   bold <- ez_rep(bold, n)
   italic <- ez_rep(italic, n)
@@ -286,17 +292,19 @@
   )
 
   header_text <- paste(paste(header_items, collapse = " & "), "\\\\\\\\")
-  cline <- cline_gen(header_df, booktabs)
+  cline <- cline_gen(header_df, booktabs, line_sep)
   return(c(header_text, cline))
 }
 
-cline_gen <- function(header_df, booktabs) {
+cline_gen <- function(header_df, booktabs, line_sep) {
   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_type <- switch(
+    booktabs + 1,
+    "\\\\cline{",
+    glue::glue("\\\\cmidrule(l{[line_sep]pt}r{[line_sep]pt}){",
+               .open = "[", .close = "]"))
   cline <- paste0(cline_type, cline_start, "-", cline_end, "}")
   cline <- cline[trimws(header_df$header) != ""]
   cline <- paste(cline, collapse = " ")
diff --git a/R/kableExtra-package.R b/R/kableExtra-package.R
index 8c254d9..12a3579 100644
--- a/R/kableExtra-package.R
+++ b/R/kableExtra-package.R
@@ -72,6 +72,7 @@
 #' @importFrom stats ave
 #' @importFrom grDevices col2rgb
 #' @importFrom rstudioapi isAvailable viewer
+#' @importFrom glue glue
 #' @import htmltools
 #' @name kableExtra-package
 #' @aliases kableExtra
diff --git a/R/linebreak.R b/R/linebreak.R
index 74403a2..e090a5e 100644
--- a/R/linebreak.R
+++ b/R/linebreak.R
@@ -7,7 +7,7 @@
 #' @param align Choose from "l", "c" or "r"
 #' @param double_escape Whether special character should be double escaped.
 #' Default is FALSE.
-#' @param linebreaker Symbol for linebreaks to replace. Default is `\n`.
+#' @param linebreaker Symbol for linebreaks to replace. Default is `\\n`.
 #'
 #' @export
 linebreak <- function(x, align = c("l", "c", "r"), double_escape = F,