add a kable function with better doc
diff --git a/R/column_spec.R b/R/column_spec.R
index 2e8a64d..2a97fee 100644
--- a/R/column_spec.R
+++ b/R/column_spec.R
@@ -39,6 +39,8 @@
 #' header row will be manipulated. Default is `FALSE`.
 #' @param latex_column_spec Only for LaTeX tables.  Code to replace the column
 #' specification.  If not `NULL`, will override all other arguments.
+#' @param latex_valign vertical alignment. Only works when you specified column
+#'  width. Choose among `p`, `m`, `b`.
 #'
 #' @details Use `latex_column_spec` in a LaTeX table to change or
 #' customize the column specification.  Because of the way it is handled
@@ -56,7 +58,7 @@
                         border_left = FALSE, border_right = FALSE,
                         width_min = NULL, width_max = NULL,
                         extra_css = NULL, include_thead = FALSE,
-                        latex_column_spec = NULL) {
+                        latex_column_spec = NULL, latex_valign = 'p') {
   if (!is.numeric(column)) {
     stop("column must be numeric. ")
   }
@@ -82,7 +84,8 @@
                              underline, strikeout,
                              color, background,
                              border_left, border_right,
-                             latex_column_spec = latex_column_spec))
+                             latex_column_spec = latex_column_spec,
+                             latex_valign = latex_valign))
   }
 }
 
@@ -222,7 +225,7 @@
                               underline, strikeout,
                               color, background,
                               border_left, border_right,
-                              latex_column_spec) {
+                              latex_column_spec, latex_valign) {
   table_info <- magic_mirror(kable_input)
   if (!is.null(table_info$collapse_rows)) {
     message("Usually it is recommended to use column_spec before collapse_rows,",
@@ -237,7 +240,8 @@
     function(x) {
       latex_column_align_builder(
         x, width, bold, italic, monospace, underline, strikeout,
-        color, background, border_left, border_right, latex_column_spec)
+        color, background, border_left, border_right, latex_column_spec,
+        latex_valign)
     }
   ))
 
@@ -271,14 +275,14 @@
                                        underline, strikeout,
                                        color, background,
                                        border_left, border_right,
-                                       latex_column_spec) {
+                                       latex_column_spec, latex_valign) {
   extra_align <- ""
   if (!is.null(width)) {
     extra_align <- switch(x,
                           "l" = "\\\\raggedright\\\\arraybackslash",
                           "c" = "\\\\centering\\\\arraybackslash",
                           "r" = "\\\\raggedleft\\\\arraybackslash")
-    x <- paste0("p\\{", width, "\\}")
+    x <- paste0(latex_valign, "\\{", width, "\\}")
   }
 
   if (!is.null(color)) {
diff --git a/R/kable.R b/R/kable.R
new file mode 100644
index 0000000..f1709d5
--- /dev/null
+++ b/R/kable.R
@@ -0,0 +1,105 @@
+#' Wrapper function of knitr::kable
+#'
+#' @description knitr's kable function is the foundation of this package.
+#' However, it has many latex/html specific arguments hidden under the ground
+#' unless you check its source code. This wrapper function is created to
+#' provide better documentation (and auto-complete yay) and at the same time,
+#' solve the auto format setting in a better way.
+#'
+#' @param table.attr A character string for addition HTML table attributes.
+#' This is convenient if you simply want to add a few HTML classes or styles.
+#' For example, you can put 'class="table" style="color: red"'.
+#' @param booktabs T/F for whether to enable the booktabs format for tables. I
+#' personally would recommend you turn this on for every latex table except
+#' some special cases.
+#' @param longtable T/F for whether to use the longtable format. If you have a
+#' table that will span over two or more pages, you will have to turn this on.
+#' @param valign You probably won't need to adjust this latex option very often.
+#' If you are familar with latex tables, this is the optional position for the
+#' tabular environment controling the vertical position of the table relative
+#' to the baseline of the surrounding text. Possible choices are `b`, `c` and
+#' `t` (default).
+#' @param position This is the "real" or say floating position for the latex
+#' table environment. The `kable` only puts tables in a table environment when
+#' a caption is provided. That is also the reason why your tables will be
+#' floating around if you specify captions for your table. Possible choices are
+#' `h` (here), `t` (top, default), `b` (bottom) and `p` (on a dedicated page).
+#' @param centering T (default)/F. Whether to center tables in the table
+#' environment.
+#' @param caption.short Another latex feature. Short captions for tables
+#' @param linesep By default, in booktabs tables, `kable` insert an extra space
+#' every five rows for clear display. If you don't want this feature or if you
+#' want to do it in a different pattern, you can consider change this option.
+#' The default is c('', '', '', '', '\\addlinespace'). Also, if you are not
+#' using booktabs, but you want a cleaner display, you can change this to ''.
+#' @param table.envir You probably don't need to change this as well. The
+#' default setting is to put a table environment outside of tabular if a
+#' caption is provided.
+#' @param vline vertical separator. Default is nothing for booktabs
+#' tables but "|" for normal tables.
+#' @param toprule toprule. Default is hline for normal table but toprule for
+#' booktabs tables.
+#' @param bottomrule bottomrule. Default is hline for normal table but
+#' bottomrule for booktabs tables.
+#' @param midrule midrule. Default is hline for normal table but midrule for
+#' booktabs tables.
+#'
+#' @inheritParams knitr::kable
+#' @export
+kable <- function(x, format, digits = getOption("digits"),
+                  row.names = NA, col.names = NA, align,
+                  caption = NULL, label = NULL, format.args = list(),
+                  escape = TRUE,
+                  table.attr = '',
+                  booktabs = FALSE, longtable = FALSE,
+                  valign = 't', position = '', centering = TRUE,
+                  vline = getOption('knitr.table.vline', if (booktabs) '' else '|'),
+                  toprule = getOption('knitr.table.toprule', if (booktabs) '\\toprule' else '\\hline'),
+                  bottomrule = getOption('knitr.table.bottomrule', if (booktabs) '\\bottomrule' else '\\hline'),
+                  midrule = getOption('knitr.table.midrule', if (booktabs) '\\midrule' else '\\hline'),
+                  linesep = if (booktabs) c('', '', '', '', '\\addlinespace') else '\\hline',
+                  caption.short = '',
+                  table.envir = if (!is.null(caption)) 'table', ...) {
+  if (!missing(align) && length(align) == 1L && !grepl('[^lcr]', align)) {
+    align <- strsplit(align, '')[[1]]
+  }
+  if (missing(format) | is.null(format)) {
+    if (knitr::is_latex_output()) {
+      format <- "latex"
+      return(knitr::kable(
+        x = x, format = format, digits = digits,
+        row.names = row.names, col.names = col.names, align = align,
+        caption = caption, label = label, format.args = format.args,
+        escape = escape,
+        booktabs = booktabs, longtable = longtable,
+        valign = valign, position = position, centering = centering,
+        vline = vline, toprule = toprule, bottomrule = bottomrule,
+        midrule = midrule, linesep = linesep, caption.short = caption.short,
+        table.envir = table.envir, ...
+      ))
+    } else {
+      format <- "html"
+      return(knitr::kable(
+        x = x, format = format, digits = digits,
+        row.names = row.names, col.names = col.names, align = align,
+        caption = caption, label = label, format.args = format.args,
+        escape = escape,
+        table.attr = table.attr, ...
+      ))
+    }
+  } else {
+    return(knitr::kable(
+      x = x, format = format, digits = digits,
+      row.names = row.names, col.names = col.names, align = align,
+      caption = caption, label = label, format.args = format.args,
+      escape = escape, table.attr = table.attr,
+      booktabs = booktabs, longtable = longtable,
+      valign = valign, position = position, centering = centering,
+      vline = vline, toprule = toprule, bottomrule = bottomrule,
+      midrule = midrule, linesep = linesep, caption.short = caption.short,
+      table.envir = table.envir, ...
+    ))
+  }
+
+
+}
diff --git a/R/kableExtra-package.R b/R/kableExtra-package.R
index c01f058..bb6528c 100644
--- a/R/kableExtra-package.R
+++ b/R/kableExtra-package.R
@@ -85,6 +85,3 @@
 
 #' @export
 magrittr::`%>%`
-
-#' @export
-knitr::kable
diff --git a/man/collapse_rows.Rd b/man/collapse_rows.Rd
index f145342..11196b7 100644
--- a/man/collapse_rows.Rd
+++ b/man/collapse_rows.Rd
@@ -8,12 +8,14 @@
   kable_input,
   columns = NULL,
   valign = c("middle", "top", "bottom"),
-  latex_hline = c("full", "major", "none", "custom"),
+  latex_hline = c("major", "full", "none", "custom"),
   row_group_label_position = c("identity", "stack"),
   custom_latex_hline = NULL,
   row_group_label_fonts = NULL,
   headers_to_remove = NULL,
-  target = NULL
+  target = NULL,
+  col_names = TRUE,
+  longtable_clean_cut = TRUE
 )
 }
 \arguments{
@@ -27,7 +29,8 @@
 not up to date.}
 
 \item{latex_hline}{Option controlling the behavior of adding hlines to table.
-Choose from \code{full}, \code{major}, \code{none}, \code{custom}.}
+Choose from \code{major}, \code{full}, \code{none}, \code{custom} and \code{linespace}. We changed the default from
+\code{full} to \code{major} in version 1.2.}
 
 \item{row_group_label_position}{Option controlling positions of row group
 labels. Choose from \code{identity}, \code{stack}.}
@@ -41,6 +44,19 @@
 
 \item{headers_to_remove}{Numeric column positions where headers should be
 removed when they are stacked.}
+
+\item{target}{If multiple columns are selected to do collapsing and a target
+column is specified, this target column will be used to collapse other
+columns based on the groups of this target column.}
+
+\item{col_names}{T/F. A LaTeX specific option. If you set \code{col.names} be
+\code{NULL} in your \code{kable} call, you need to set this option false to let
+everything work properly.}
+
+\item{longtable_clean_cut}{T/F with default T. Multirow cell sometimes are
+displayed incorrectly around pagebreak. This option forces groups to cut
+before the end of a page. If you have a group that is longer than 1 page,
+you need to turn off this option.}
 }
 \description{
 Collapse same values in columns into multirow cells. This
diff --git a/man/column_spec.Rd b/man/column_spec.Rd
index 0857f4d..698c688 100644
--- a/man/column_spec.Rd
+++ b/man/column_spec.Rd
@@ -21,7 +21,8 @@
   width_max = NULL,
   extra_css = NULL,
   include_thead = FALSE,
-  latex_column_spec = NULL
+  latex_column_spec = NULL,
+  latex_valign = "p"
 )
 }
 \arguments{
@@ -77,6 +78,9 @@
 
 \item{latex_column_spec}{Only for LaTeX tables.  Code to replace the column
 specification.  If not \code{NULL}, will override all other arguments.}
+
+\item{latex_valign}{vertical alignment. Only works when you specified column
+width. Choose among \code{p}, \code{m}, \code{b}.}
 }
 \description{
 This function allows users to select a column and then specify
diff --git a/man/group_rows.Rd b/man/group_rows.Rd
index d39d0d2..0059e6f 100644
--- a/man/group_rows.Rd
+++ b/man/group_rows.Rd
@@ -95,7 +95,7 @@
 
 \item{extra_latex_after}{Extra LaTeX text to be added after the row.}
 
-\item{indent}{A T?F value to control whether list items are indented.}
+\item{indent}{A T/F value to control whether list items are indented.}
 }
 \description{
 Group a few rows in a table together under a label.
diff --git a/man/kable.Rd b/man/kable.Rd
new file mode 100644
index 0000000..f7b7d24
--- /dev/null
+++ b/man/kable.Rd
@@ -0,0 +1,137 @@
+% Generated by roxygen2: do not edit by hand
+% Please edit documentation in R/kable.R
+\name{kable}
+\alias{kable}
+\title{Wrapper function of knitr::kable}
+\usage{
+kable(
+  x,
+  format,
+  digits = getOption("digits"),
+  row.names = NA,
+  col.names = NA,
+  align,
+  caption = NULL,
+  label = NULL,
+  format.args = list(),
+  escape = TRUE,
+  table.attr = "",
+  booktabs = FALSE,
+  longtable = FALSE,
+  valign = "t",
+  position = "",
+  centering = TRUE,
+  vline = getOption("knitr.table.vline", if (booktabs) "" else "|"),
+  toprule = getOption("knitr.table.toprule", if (booktabs) "\\\\toprule" else
+    "\\\\hline"),
+  bottomrule = getOption("knitr.table.bottomrule", if (booktabs) "\\\\bottomrule" else
+    "\\\\hline"),
+  midrule = getOption("knitr.table.midrule", if (booktabs) "\\\\midrule" else
+    "\\\\hline"),
+  linesep = if (booktabs) c("", "", "", "", "\\\\addlinespace") else "\\\\hline",
+  caption.short = "",
+  table.envir = if (!is.null(caption)) "table",
+  ...
+)
+}
+\arguments{
+\item{x}{For \code{kable()}, \code{x} is an R object, which is typically a
+matrix or data frame. For \code{kables()}, a list with each element being a
+returned value from \code{kable()}.}
+
+\item{format}{A character string. Possible values are \code{latex},
+\code{html}, \code{pipe} (Pandoc's pipe tables), \code{simple} (Pandoc's
+simple tables), and \code{rst}. The value of this argument will be
+automatically determined if the function is called within a \pkg{knitr}
+document. The \code{format} value can also be set in the global option
+\code{knitr.table.format}. If \code{format} is a function, it must return a
+character string.}
+
+\item{digits}{Maximum number of digits for numeric columns, passed to
+\code{round()}. This can also be a vector of length \code{ncol(x)}, to set
+the number of digits for individual columns.}
+
+\item{row.names}{Logical: whether to include row names. By default, row names
+are included if \code{rownames(x)} is neither \code{NULL} nor identical to
+\code{1:nrow(x)}.}
+
+\item{col.names}{A character vector of column names to be used in the table.}
+
+\item{align}{Column alignment: a character vector consisting of \code{'l'}
+(left), \code{'c'} (center) and/or \code{'r'} (right). By default or if
+\code{align = NULL}, numeric columns are right-aligned, and other columns
+are left-aligned. If \code{length(align) == 1L}, the string will be
+expanded to a vector of individual letters, e.g. \code{'clc'} becomes
+\code{c('c', 'l', 'c')}, unless the output format is LaTeX.}
+
+\item{caption}{The table caption.}
+
+\item{label}{The table reference label. By default, the label is obtained
+from \code{knitr::\link[knitr]{opts_current}$get('label')}.}
+
+\item{format.args}{A list of arguments to be passed to \code{\link{format}()}
+to format table values, e.g. \code{list(big.mark = ',')}.}
+
+\item{escape}{Boolean; whether to escape special characters when producing
+HTML or LaTeX tables. When \code{escape = FALSE}, you have to make sure
+that special characters will not trigger syntax errors in LaTeX or HTML.}
+
+\item{table.attr}{A character string for addition HTML table attributes.
+This is convenient if you simply want to add a few HTML classes or styles.
+For example, you can put 'class="table" style="color: red"'.}
+
+\item{booktabs}{T/F for whether to enable the booktabs format for tables. I
+personally would recommend you turn this on for every latex table except
+some special cases.}
+
+\item{longtable}{T/F for whether to use the longtable format. If you have a
+table that will span over two or more pages, you will have to turn this on.}
+
+\item{valign}{You probably won't need to adjust this latex option very often.
+If you are familar with latex tables, this is the optional position for the
+tabular environment controling the vertical position of the table relative
+to the baseline of the surrounding text. Possible choices are \code{b}, \code{c} and
+\code{t} (default).}
+
+\item{position}{This is the "real" or say floating position for the latex
+table environment. The \code{kable} only puts tables in a table environment when
+a caption is provided. That is also the reason why your tables will be
+floating around if you specify captions for your table. Possible choices are
+\code{h} (here), \code{t} (top, default), \code{b} (bottom) and \code{p} (on a dedicated page).}
+
+\item{centering}{T (default)/F. Whether to center tables in the table
+environment.}
+
+\item{vline}{vertical separator. Default is nothing for booktabs
+tables but "|" for normal tables.}
+
+\item{toprule}{toprule. Default is hline for normal table but toprule for
+booktabs tables.}
+
+\item{bottomrule}{bottomrule. Default is hline for normal table but
+bottomrule for booktabs tables.}
+
+\item{midrule}{midrule. Default is hline for normal table but midrule for
+booktabs tables.}
+
+\item{linesep}{By default, in booktabs tables, \code{kable} insert an extra space
+every five rows for clear display. If you don't want this feature or if you
+want to do it in a different pattern, you can consider change this option.
+The default is c('', '', '', '', '\\addlinespace'). Also, if you are not
+using booktabs, but you want a cleaner display, you can change this to ''.}
+
+\item{caption.short}{Another latex feature. Short captions for tables}
+
+\item{table.envir}{You probably don't need to change this as well. The
+default setting is to put a table environment outside of tabular if a
+caption is provided.}
+
+\item{...}{Other arguments (see Examples).}
+}
+\description{
+knitr's kable function is the foundation of this package.
+However, it has many latex/html specific arguments hidden under the ground
+unless you check its source code. This wrapper function is created to
+provide better documentation (and auto-complete yay) and at the same time,
+solve the auto format setting in a better way.
+}
diff --git a/man/reexports.Rd b/man/reexports.Rd
index 69a8477..7028941 100644
--- a/man/reexports.Rd
+++ b/man/reexports.Rd
@@ -4,7 +4,6 @@
 \name{reexports}
 \alias{reexports}
 \alias{\%>\%}
-\alias{kable}
 \title{Objects exported from other packages}
 \keyword{internal}
 \description{
@@ -12,8 +11,6 @@
 below to see their documentation.
 
 \describe{
-  \item{knitr}{\code{\link[knitr]{kable}}}
-
   \item{magrittr}{\code{\link[magrittr:pipe]{\%>\%}}}
 }}
 
diff --git a/tests/visual_tests/collapse_rows_pdf.Rmd b/tests/visual_tests/collapse_rows_pdf.Rmd
index 3ecc58b..d4c83f6 100644
--- a/tests/visual_tests/collapse_rows_pdf.Rmd
+++ b/tests/visual_tests/collapse_rows_pdf.Rmd
@@ -9,11 +9,8 @@
 library(knitr)
 library(dplyr)
 library(kableExtra)
-collapse_rows_dt <- data.frame(C1 = c(rep("aaaaaa aaaaaa", 10), rep("bbbbb bbbbbb", 5)),
-                 C2 = c(rep("c", 7), rep("d", 3), rep("c", 3), rep("d", 2)),
-                 C3 = 1:15,
-                 C4 = sample(c(0,1), 15, replace = TRUE))
-kable(bind_rows(collapse_rows_dt), "latex", align = "c", booktabs = T, longtable= T) %>%
-  column_spec(1, bold = T, width = "5em") %>%
-  collapse_rows(1:2, latex_hline = "linespace") 
+mtcars %>%
+  kable("latex") %>%
+  kable_styling(latex_options = "striped", full_width = T) %>%
+  magic_mirror()
 ```