diff --git a/R/column_spec.R b/R/column_spec.R
index a2d89d6..aa2f841 100644
--- a/R/column_spec.R
+++ b/R/column_spec.R
@@ -16,8 +16,16 @@
 #' need to be emphasized.
 #' @param monospace A T/F value to control whether the text of the selected column
 #' need to be monospaced (verbatim)
-#' @param color A character string for column text color.
-#' @param background A character string for column background color.
+#' @param color A character string for column text color. Here please pay
+#' attention to the differences in color codes between HTML and LaTeX.
+#' @param background A character string for column background color. Here please
+#' pay attention to the differences in color codes between HTML and LaTeX.
+#' @param border_left A logical variable indicating whether there should be a
+#' border line on the left of the selected column. In HTML, you can also pass
+#' in a character string for the CSS of the border line
+#' @param border_right A logical variable indicating whether there should be a
+#' border line on the right of the selected column. In HTML, you can also pass
+#' in a character string for the CSS of the border line
 #'
 #' @examples x <- knitr::kable(head(mtcars), "html")
 #' column_spec(x, 1, width = "20em", bold = TRUE, italic = TRUE)
diff --git a/R/kable_as_image.R b/R/kable_as_image.R
index d01d941..ff030cc 100644
--- a/R/kable_as_image.R
+++ b/R/kable_as_image.R
@@ -28,7 +28,7 @@
 #' @param keep_pdf A T/F option to control if the mid-way standalone pdf should
 #' be kept. Default is `FALSE`.
 #'
-#' @examples kable_as_image(kable(mtcars, "latex"), "mtcars")
+#' @examples kable_as_image(kanitr::kble(mtcars, "latex"), "mtcars")
 #' @export
 kable_as_image <- function(kable_input, filename = NULL,
                            file_format = "png",
diff --git a/R/kable_styling.R b/R/kable_styling.R
index 73b9267..bbed083 100644
--- a/R/kable_styling.R
+++ b/R/kable_styling.R
@@ -18,7 +18,7 @@
 #' table to the exact position. It is useful when the `LaTeX` table is contained
 #'  in a `table` environment after you specified captions in `kable()`. It will
 #'  force the table to stay in the position where it was created in the document.
-#' A stronger version: `HOLD_position` requires the `float` package and specifies [H].
+#' A stronger version: `HOLD_position` requires the `float` package and specifies `[H]`.
 #' `scale_down` is useful for super wide table. It will automatically adjust
 #' the table to page width. `repeat_header` in only meaningful in a longtable
 #' environment. It will let the header row repeat on every page in that long
diff --git a/R/row_spec.R b/R/row_spec.R
index 1d5d500..7a17e8c 100644
--- a/R/row_spec.R
+++ b/R/row_spec.R
@@ -13,6 +13,10 @@
 #' need to be emphasized.
 #' @param monospace A T/F value to control whether the text of the selected column
 #' need to be monospaced (verbatim)
+#' @param color A character string for column text color. Here please pay
+#' attention to the differences in color codes between HTML and LaTeX.
+#' @param background A character string for column background color. Here please
+#' pay attention to the differences in color codes between HTML and LaTeX.
 #'
 #' @examples x <- knitr::kable(head(mtcars), "html")
 #' row_spec(x, 1, bold = TRUE, italic = TRUE)
diff --git a/docs/awesome_table_in_html.html b/docs/awesome_table_in_html.html
index 795fe16..eef4a5a 100644
--- a/docs/awesome_table_in_html.html
+++ b/docs/awesome_table_in_html.html
@@ -11,7 +11,7 @@
 
 <meta name="author" content="Hao Zhu" />
 
-<meta name="date" content="2017-08-03" />
+<meta name="date" content="2017-09-04" />
 
 <title>Create Awesome HTML Table with knitr::kable and kableExtra</title>
 
@@ -217,7 +217,7 @@
 
 <h1 class="title toc-ignore">Create Awesome HTML Table with knitr::kable and kableExtra</h1>
 <h4 class="author"><em>Hao Zhu</em></h4>
-<h4 class="date"><em>2017-08-03</em></h4>
+<h4 class="date"><em>2017-09-04</em></h4>
 
 </div>
 
@@ -241,8 +241,9 @@
 <div id="getting-started" class="section level1">
 <h1>Getting Started</h1>
 <p>Here we are using the first few columns and rows from dataset <code>mtcars</code></p>
-<pre class="r"><code>library(knitr)
-library(kableExtra)
+<pre class="r"><code>library(knitr)</code></pre>
+<pre><code>## Warning: package 'knitr' was built under R version 3.4.1</code></pre>
+<pre class="r"><code>library(kableExtra)
 dt &lt;- mtcars[1:5, 1:6]</code></pre>
 <p>When you are using <code>kable()</code>, if you don’t specify <code>format</code>, by default it will generate a markdown table and let pandoc handle the conversion from markdown to HTML/PDF. This is the most favorable approach to render most simple tables as it is format independent. If you switch from HTML to pdf, you basically don’t need to change anything in your code. However, markdown doesn’t support complex table. For example, if you want to have a double-row header table, markdown just cannot provide you the functionality you need. As a result, when you have such a need, you should <strong>define <code>format</code> in <code>kable()</code></strong> as either “html” or “latex”. <em>You can also define a global option at the beginning using <code>options(knitr.table.format = &quot;html&quot;)</code> so you don’t repeat the step everytime.</em></p>
 <pre class="r"><code>options(knitr.table.format = &quot;html&quot;) 
@@ -2778,7 +2779,7 @@
 1
 </td>
 <td style="text-align:center;">
-0
+1
 </td>
 </tr>
 <tr>
@@ -2802,7 +2803,7 @@
 4
 </td>
 <td style="text-align:center;">
-0
+1
 </td>
 </tr>
 <tr>
@@ -2810,7 +2811,7 @@
 5
 </td>
 <td style="text-align:center;">
-1
+0
 </td>
 </tr>
 <tr>
@@ -2818,7 +2819,7 @@
 6
 </td>
 <td style="text-align:center;">
-0
+1
 </td>
 </tr>
 <tr>
@@ -2826,7 +2827,7 @@
 7
 </td>
 <td style="text-align:center;">
-1
+0
 </td>
 </tr>
 <tr>
@@ -2853,7 +2854,7 @@
 10
 </td>
 <td style="text-align:center;">
-1
+0
 </td>
 </tr>
 <tr>
@@ -2875,7 +2876,7 @@
 12
 </td>
 <td style="text-align:center;">
-0
+1
 </td>
 </tr>
 <tr>
diff --git a/docs/docs.Rproj b/docs/docs.Rproj
deleted file mode 100644
index 8e3c2eb..0000000
--- a/docs/docs.Rproj
+++ /dev/null
@@ -1,13 +0,0 @@
-Version: 1.0
-
-RestoreWorkspace: Default
-SaveWorkspace: Default
-AlwaysSaveHistory: Default
-
-EnableCodeIndexing: Yes
-UseSpacesForTab: Yes
-NumSpacesForTab: 2
-Encoding: UTF-8
-
-RnwWeave: Sweave
-LaTeX: pdfLaTeX
diff --git a/inst/NEWS.md b/inst/NEWS.md
index 7b04ff4..30a7756 100644
--- a/inst/NEWS.md
+++ b/inst/NEWS.md
@@ -6,15 +6,39 @@
 
 * Making it optional to pre-load LaTeX package on package startup
 
-* Adding documentations about the package loading behaviors and LaTeX packages 
-used in this package
+* Adding documentations about dependencies on LaTeX packages and the auto-load 
+behavior of kableExtra
+
+* Improved the look of full_width in kable_styling LaTeX and add tabu to LaTeX
+dependency
+
+* Added enc2utf8() to improve behavior in non-UTF8 machines. 
+
+* Added HOLD_position, which uses LaTeX package `float` and H, for a stronger 
+hold on table position. (Thanks @robshep)
+
+* Move conditional usepackage_latex() calls to zzz.R for more consistant 
+behavior
 
 * Now you can change strip color for LaTeX tables. 
 
-* Added escape option for add_footnote
+* Added support to tables with caption.short. 
+
+* Added kable_as_image() for LaTeX tables. This function will render the LaTeX
+code snippet to a piece of standalone PDF file and then convert that to an 
+image, which will then be included in the rmarkdown document, if the 
+environment exists. It's useful for people who have a strong need of 
+generating Word documents and producing well-formatted LaTeX table at the same
+time.
+
+* For both HTML & LaTeX, added escape option for add_footnote
 
 * Fixed a bug in LaTeX for the processing of the + sign
 
+* Fixed a bug with the [ symbol in escape_regex
+
+
+
 kableExtra 0.4.0
 --------------------------------------------------------------------------------
 * Add scroll_box for HTML table for extremely long/wide tables
diff --git a/man/add_footnote.Rd b/man/add_footnote.Rd
index 5bab0eb..c46cf0d 100644
--- a/man/add_footnote.Rd
+++ b/man/add_footnote.Rd
@@ -5,7 +5,7 @@
 \title{Add footnote}
 \usage{
 add_footnote(input, label = NULL, notation = "alphabet",
-  threeparttable = FALSE)
+  threeparttable = FALSE, escape = TRUE)
 }
 \arguments{
 \item{input}{The direct output of your \code{kable} function or your last
@@ -20,6 +20,9 @@
 \item{threeparttable}{Boolean value indicating if a
 \href{https://www.ctan.org/pkg/threeparttable}{threeparttable} scheme should
 be used.}
+
+\item{escape}{Logical value controlling if the label needs to be escaped.
+Default is TRUE.}
 }
 \description{
 Add footnote to your favorite kable output. So far this function
diff --git a/man/column_spec.Rd b/man/column_spec.Rd
index 81986e4..efe653d 100644
--- a/man/column_spec.Rd
+++ b/man/column_spec.Rd
@@ -27,9 +27,19 @@
 \item{monospace}{A T/F value to control whether the text of the selected column
 need to be monospaced (verbatim)}
 
-\item{color}{A character string for column text color.}
+\item{color}{A character string for column text color. Here please pay
+attention to the differences in color codes between HTML and LaTeX.}
 
-\item{background}{A character string for column background color.}
+\item{background}{A character string for column background color. Here please
+pay attention to the differences in color codes between HTML and LaTeX.}
+
+\item{border_left}{A logical variable indicating whether there should be a
+border line on the left of the selected column. In HTML, you can also pass
+in a character string for the CSS of the border line}
+
+\item{border_right}{A logical variable indicating whether there should be a
+border line on the right of the selected column. In HTML, you can also pass
+in a character string for the CSS of the border line}
 }
 \description{
 This function allows users to select a column and then specify
diff --git a/man/kable_as_image.Rd b/man/kable_as_image.Rd
index 1fd162a..80e5bae 100644
--- a/man/kable_as_image.Rd
+++ b/man/kable_as_image.Rd
@@ -42,5 +42,5 @@
 package, which allows you to preview the results of TeX code in the Viewer panel.
 }
 \examples{
-kable_as_image(kable(mtcars, "latex"), "mtcars")
+kable_as_image(kanitr::kble(mtcars, "latex"), "mtcars")
 }
diff --git a/man/kable_styling.Rd b/man/kable_styling.Rd
index 1bc5c47..9c8e0de 100644
--- a/man/kable_styling.Rd
+++ b/man/kable_styling.Rd
@@ -25,7 +25,7 @@
 table to the exact position. It is useful when the \code{LaTeX} table is contained
 in a \code{table} environment after you specified captions in \code{kable()}. It will
 force the table to stay in the position where it was created in the document.
-A stronger version: \code{HOLD_position} requires the \code{float} package and specifies \link{H}.
+A stronger version: \code{HOLD_position} requires the \code{float} package and specifies \code{[H]}.
 \code{scale_down} is useful for super wide table. It will automatically adjust
 the table to page width. \code{repeat_header} in only meaningful in a longtable
 environment. It will let the header row repeat on every page in that long
@@ -59,6 +59,9 @@
 \item \code{repeat_header_text} is just a text string you want to append on or
 replace the caption.
 \item \code{stripe_color} allows users to pick a different color for their strip lines.
+\item \code{latex_table_env} character string to define customized table environment
+such as tabu or tabularx.You shouldn't expect all features could be
+supported in self-defined environments.
 }
 }
 \examples{
diff --git a/man/row_spec.Rd b/man/row_spec.Rd
index a344479..e31ba67 100644
--- a/man/row_spec.Rd
+++ b/man/row_spec.Rd
@@ -21,6 +21,12 @@
 
 \item{monospace}{A T/F value to control whether the text of the selected column
 need to be monospaced (verbatim)}
+
+\item{color}{A character string for column text color. Here please pay
+attention to the differences in color codes between HTML and LaTeX.}
+
+\item{background}{A character string for column background color. Here please
+pay attention to the differences in color codes between HTML and LaTeX.}
 }
 \description{
 This function allows users to select a row and then specify
diff --git a/tests/testthat/test-styling.R b/tests/testthat/test-styling.R
index 3a4c46f..ff0f98c 100644
--- a/tests/testthat/test-styling.R
+++ b/tests/testthat/test-styling.R
@@ -11,27 +11,24 @@
   observed <- dt[1:3] %>%
     kable(format = "latex", booktabs = T, caption = "xxx") %>%
     kable_styling(latex_options = c("striped", "hold_position"), font_size = 6, position = "float_left")
-  # dput(observed)
+  dput(observed)
 
   expected <- structure("\\rowcolors{2}{gray!6}{white}\n\\begin{wraptable}{l}{6.6cm}\n\n\\caption{\\label{tab:}xxx}\n\\centering\n\\fontsize{6}{8}\\selectfont\n\\begin{tabular}[t]{lrrr}\n\\hiderowcolors\n\\toprule\n  & mpg & cyl & disp\\\\\n\\midrule\n\\showrowcolors\nMazda RX4 & 21.0 & 6 & 160\\\\\nMazda RX4 Wag & 21.0 & 6 & 160\\\\\nDatsun 710 & 22.8 & 4 & 108\\\\\nHornet 4 Drive & 21.4 & 6 & 258\\\\\nHornet Sportabout & 18.7 & 8 & 360\\\\\n\\bottomrule\n\\end{tabular}\n\\end{wraptable}\n\\rowcolors{2}{white}{white}", format = "latex", class = "knitr_kable", kable_meta = structure(list(
     tabular = "tabular", booktabs = TRUE, align = "lrrr", valign = "[t]",
     ncol = 4L, nrow = 6, colnames = c(" ", "mpg", "cyl", "disp"
     ), rownames = c("", "Mazda", "Mazda", "Datsun", "Hornet",
-                    "Hornet"), caption = "\\label{tab:}x",
-    contents = c("  & mpg & cyl & disp",
-                 "Mazda RX4 & 21.0 & 6 & 160", "Mazda RX4 Wag & 21.0 & 6 & 160",
-                 "Datsun 710 & 22.8 & 4 & 108", "Hornet 4 Drive & 21.4 & 6 & 258",
-                 "Hornet Sportabout & 18.7 & 8 & 360"), centering = TRUE,
-    table_env = TRUE, align_vector = c("l", "r", "r", "r"),
-    align_vector_origin = c("l", "r", "r", "r"),
-    valign2 = "\\[t\\]", valign3 = "t",
-    begin_tabular = "\\\\begin\\{tabular\\}\\[t\\]",
-    end_tabular = "\\\\end\\{tabular\\}"),
-    .Names = c("tabular",
-               "booktabs", "align", "valign", "ncol", "nrow", "colnames", "rownames",
-               "caption", "contents", "centering", "table_env", "align_vector",
-               "align_vector_origin", "valign2", "valign3", "begin_tabular",
-               "end_tabular")))
+                    "Hornet"), caption = "\\label{tab:}xxx", caption.short = NULL,
+    contents = c("  & mpg & cyl & disp", "Mazda RX4 & 21.0 & 6 & 160",
+                 "Mazda RX4 Wag & 21.0 & 6 & 160", "Datsun 710 & 22.8 & 4 & 108",
+                 "Hornet 4 Drive & 21.4 & 6 & 258", "Hornet Sportabout & 18.7 & 8 & 360"
+    ), centering = TRUE, table_env = TRUE, align_vector = c("l",
+                                                            "r", "r", "r"), align_vector_origin = c("l", "r", "r", "r"
+                                                            ), valign2 = "\\[t\\]", valign3 = "t", begin_tabular = "\\\\begin\\{tabular\\}\\[t\\]",
+    end_tabular = "\\\\end\\{tabular\\}"), .Names = c("tabular",
+                                                      "booktabs", "align", "valign", "ncol", "nrow", "colnames", "rownames",
+                                                      "caption", "caption.short", "contents", "centering", "table_env",
+                                                      "align_vector", "align_vector_origin", "valign2", "valign3",
+                                                      "begin_tabular", "end_tabular")))
 
   expect_equal(observed, expected)
 })
diff --git a/vignettes/awesome_table_in_html.Rmd b/vignettes/awesome_table_in_html.Rmd
index 0a68525..dfd276d 100644
--- a/vignettes/awesome_table_in_html.Rmd
+++ b/vignettes/awesome_table_in_html.Rmd
@@ -14,11 +14,13 @@
   %\VignetteEncoding{UTF-8}
 ---
 
-> Please see the package documentation site for how to use it in LaTeX.
+> Please see the package [documentation site](http://haozhu233.github.io/kableExtra/) for how to use this package in LaTeX.
 
 # Overview
 The goal of `kableExtra` is to help you build common complex tables and manipulate table styles. It imports the pipe `%>%` symbol from `magrittr` and verbalize all the functions, so basically you can add "layers" to a kable output in a way that is similar with `ggplot2` and `plotly`. 
 
+To learn how to generate complex tables in LaTeX, please visit [http://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf](http://haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf)
+
 # Installation
 ```r
 install.packages("kableExtra")
@@ -42,13 +44,13 @@
 ## If you don't define format here, you'll need put `format = "html"` in every kable function.
 ```
 
-## Basic HTML Table
+## Basic HTML table
 Basic HTML output of `kable` looks very crude. To the end, it's just a plain HTML table without any love from css.
 ```{r}
 kable(dt)
 ```
 
-## Apply Bootstrap
+## Bootstrap theme
 When used on a HTML table, `kable_styling()` will automatically apply twitter bootstrap theme to the table. Now it should looks the same as the original pandoc output (the one when you don't specify `format` in `kable()`) but this time, you are controlling it.
 ```{r}
 kable(dt) %>%
@@ -56,9 +58,9 @@
 ```
 
 # Table Styles
-`kable_styling` offers server other ways to customize the look of a HTML table. 
+`kable_styling` offers a few other ways to customize the look of a HTML table. 
 
-## Bootstrap Options
+## Bootstrap table classes
 If you are familiar with twitter bootstrap, you probably have already known its predefined classes, including `striped`, `bordered`, `hover`, `condensed` and `responsive`. If you are not familiar, no worries, you can take a look at their [documentation site](http://getbootstrap.com/css/#tables) to get a sense of how they look like. All of these options are available here. 
 
 For example, to add striped lines (alternative row colors) to your table and you want to highlight the hovered row, you can simply type:
@@ -79,7 +81,7 @@
   kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"))
 ```
 
-## Full Width or Not?
+## Full width?
 By default, a bootstrap table takes 100% of the width. It is supposed to use together with its grid system to scale the table properly. However, when you are writing a rmarkdown document, you probably don't want to write your own css/or grid. For some small tables with only few columns, a page wide table looks awful. To make it easier, you can specify whether you want the table to have  `full_width` or not in `kable_styling`. By default, `full_width` is set to be `TRUE` for HTML tables (note that for LaTeX, the default is `FALSE` since I don't want to change the "common" looks unless you specified it.)
 ```{r}
 kable(dt) %>%
@@ -100,14 +102,48 @@
 ```
 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sit amet mauris in ex ultricies elementum vel rutrum dolor. Phasellus tempor convallis dui, in hendrerit mauris placerat scelerisque. Maecenas a accumsan enim, a maximus velit. Pellentesque in risus eget est faucibus convallis nec at nulla. Phasellus nec lacinia justo. Morbi fermentum, orci id varius accumsan, nibh neque porttitor ipsum, consectetur luctus risus arcu ac ex. Aenean a luctus augue. Suspendisse et auctor nisl. Suspendisse cursus ultrices quam non vulputate. Phasellus et pharetra neque, vel feugiat erat. Sed feugiat elit at mauris commodo consequat. Sed congue lectus id mattis hendrerit. Mauris turpis nisl, congue eget velit sed, imperdiet convallis magna. Nam accumsan urna risus, non feugiat odio vehicula eget.
 
-## Font Size
+## Font size
 If one of your tables is huge and you want to use a smaller font size for that specific table, you can use the `font_size` option. 
 ```{r}
 kable(dt) %>%
   kable_styling(bootstrap_options = "striped", font_size = 7)
 ```
 
-# Add Extra Header Rows
+# Column / Row Specification
+## Column spec
+When you have a table with lots of explanatory texts, you may want to specified the column width for different column, since the auto adjust in HTML may not work in its best way while basic LaTeX table is really bad at handling text wrapping. Also, sometimes, you may want to highlight a column (e.g. a "Total" column) by making it bold. In these scenario, you can use `column_spec()`. You can find an example below.
+
+Warning: If you have a super long table, you should be cautious when you use `column_spec` as the xml node modification takes time.
+
+```{r}
+text_tbl <- data.frame(
+  Items = c("Item 1", "Item 2", "Item 3"),
+  Features = c(
+    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vehicula tempor ex. Morbi malesuada sagittis turpis, at venenatis nisl luctus a. ",
+    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit varius, posuere risus et, cursus augue. Duis eleifend aliquam ante, a aliquet ex tincidunt in. ", 
+    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi. Aliquam molestie erat et sollicitudin venenatis. In ac lacus at velit scelerisque mattis. "
+  )
+)
+
+kable(text_tbl) %>%
+  kable_styling(full_width = F) %>%
+  column_spec(1, bold = T) %>%
+  column_spec(2, width = "30em")
+```
+
+
+## Row spec
+Similar with `column_spec`, you can define specifications for rows. Currently, you can either bold or italiciz an entire row. Note that, similar with other row-related functions in `kableExtra`, for the position of the target row, you don't need to count in header rows or the group labelling rows.
+
+```{r}
+kable(dt) %>%
+  kable_styling("striped", full_width = F) %>%
+  column_spec(7, bold = T) %>%
+  row_spec(5, bold = T)
+```
+
+# Grouped Columns / Rows
+## Add header rows to group columns
 Tables with multi-row headers can be very useful to demonstrate grouped data. To do that, you can pipe your kable object into `add_header_above()`. The header variable is supposed to be a named character with the names as new column names and values as column span. For your convenience, if column span equals to 1, you can ignore the `=1` part so the function below can be written as `add_header_above(c(" ", "Group 1" = 2, "Group 2" = 2, "Group 3" = 2)).
 ```{r}
 kable(dt) %>%
@@ -124,8 +160,47 @@
   add_header_above(c(" ", "Group 6" = 6))
 ```
 
-# Add footnote
-## Notation System
+## Group rows via labeling
+Sometimes we want a few rows of the table being grouped together. They might be items under the same topic (e.g., animals in one species) or just different data groups for a categorical variable (e.g., age < 40, age > 40). With the new function `group_rows()` in `kableExtra`, this kind of task can be completed in one line. Please see the example below. Note that when you count for the start/end rows of the group, you don't need to count for the header rows nor other group label rows. You only need to think about the row numbers in the "original R dataframe".
+```{r}
+kable(mtcars[1:10, 1:6], caption = "Group Rows") %>%
+  kable_styling("striped", full_width = F) %>%
+  group_rows("Group 1", 4, 7) %>%
+  group_rows("Group 2", 8, 10)
+```
+
+For advanced users, you can even define your own css for the group labeling.
+```{r}
+kable(dt) %>%
+  kable_styling("striped", full_width = F) %>%
+  group_rows("Group 1", 3, 5, label_row_css = "background-color: #666; color: #fff;")
+```
+
+## Row indentation
+Unlike `group_rows()`, which will insert a labeling row, sometimes we want to list a few sub groups under a total one. In that case, `add_indent()` is probably more apporiate. 
+For advanced users, you can even define your own css for the group labeling.
+```{r}
+kable(dt) %>%
+  kable_styling("striped", full_width = F) %>%
+  add_indent(c(1, 3, 5))
+```
+
+## Group rows via multi-row cell
+Function `group_rows` is great for showing simple structural information on rows but sometimes people may need to show structural information with multiple layers. When it happens, you may consider to use `collapse_rows` instead, which will put repeating cells in columns into multi-row cells. 
+
+```{r}
+collapse_rows_dt <- data.frame(C1 = c(rep("a", 10), rep("b", 5)),
+                 C2 = c(rep("c", 7), rep("d", 3), rep("c", 2), rep("d", 3)),
+                 C3 = 1:15,
+                 C4 = sample(c(0,1), 15, replace = TRUE))
+kable(collapse_rows_dt, "html", align = "c") %>%
+  kable_styling(full_width = F) %>%
+  column_spec(1, bold = T) %>%
+  collapse_rows(columns = 1:2)
+```
+
+# Table Footnote
+## Notation systems
 You can also use `add_footnote()` function from this package. You will need to supply a character vector with each element as one footnote. You may select from `number`, `alphabet` and `symbol` for different types of notations. Example are listed below.
 
 ### Alphabet
@@ -151,6 +226,7 @@
 
 ## In-table markers
 By design, `add_footnote()` will transform any `[note]` to in-table footnote markers. 
+
 ```{r}
 kable(dt, caption = "Demo Table[note]") %>%
   kable_styling("striped") %>%
@@ -161,83 +237,15 @@
                notation = "symbol")
 ```
 
-***
+# HTML Only Features
+## Scroll box
+If you have a huge table and you don't want to reduce the font size to unreadable, you may want to put your HTML table in a scroll box, of which users can pick the part they like to read. Note that scroll box isn't printer friendly, so be aware of that when you use this feature. 
 
-The following features are introduced in `kableExtra` 0.2.0.
-
-# Group Rows
-Sometimes we want a few rows of the table being grouped together. They might be items under the same topic (e.g., animals in one species) or just different data groups for a categorical variable (e.g., age < 40, age > 40). With the new function `group_rows()` in `kableExtra`, this kind of task can be completed in one line. Please see the example below. Note that when you count for the start/end rows of the group, you don't need to count for the header rows nor other group label rows. You only need to think about the row numbers in the "original R dataframe".
-```{r}
-kable(mtcars[1:10, 1:6], caption = "Group Rows") %>%
-  kable_styling("striped", full_width = F) %>%
-  group_rows("Group 1", 4, 7) %>%
-  group_rows("Group 2", 8, 10)
-```
-
-For advanced users, you can even define your own css for the group labeling.
-```{r}
-kable(dt) %>%
-  kable_styling("striped", full_width = F) %>%
-  group_rows("Group 1", 3, 5, label_row_css = "background-color: #666; color: #fff;")
-```
-
-# Add indentation
-Unlike `group_rows()`, which will insert a labeling row, sometimes we want to list a few sub groups under a total one. In that case, `add_indent()` is probably more apporiate. 
-For advanced users, you can even define your own css for the group labeling.
-```{r}
-kable(dt) %>%
-  kable_styling("striped", full_width = F) %>%
-  add_indent(c(1, 3, 5))
-```
-
-***
-
-The following feature is introduced in `kableExtra` 0.2.1.
-
-# Column Style Specification
-When you have a table with lots of explanatory texts, you may want to specified the column width for different column, since the auto adjust in HTML may not work in its best way while basic LaTeX table is really bad at handling text wrapping. Also, sometimes, you may want to highlight a column (e.g. a "Total" column) by making it bold. In these scenario, you can use `column_spec()`. You can find an example below. 
-
-Warning: If you have a super long table, you should be cautious when you use `column_spec` as the xml node modification takes time.
-```{r}
-text_tbl <- data.frame(
-  Items = c("Item 1", "Item 2", "Item 3"),
-  Features = c(
-    "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin vehicula tempor ex. Morbi malesuada sagittis turpis, at venenatis nisl luctus a. ",
-    "In eu urna at magna luctus rhoncus quis in nisl. Fusce in velit varius, posuere risus et, cursus augue. Duis eleifend aliquam ante, a aliquet ex tincidunt in. ", 
-    "Vivamus venenatis egestas eros ut tempus. Vivamus id est nisi. Aliquam molestie erat et sollicitudin venenatis. In ac lacus at velit scelerisque mattis. "
-  )
-)
-
-kable(text_tbl) %>%
-  kable_styling(full_width = F) %>%
-  column_spec(1, bold = T) %>%
-  column_spec(2, width = "30em")
-```
-
-***
-
-The following features are introduced in `kableExtra` 0.3.0
-
-# Row Style Specification
-Similar with `column_spec`, you can define specifications for rows. Currently, you can either bold or italiciz an entire row. Note that, similar with other row-related functions in `kableExtra`, for the position of the target row, you don't need to count in header rows or the group labelling rows.
+When you use `scroll_box`, you can specify either `height` or `width`. When you specify `height`, you will get a vertically scrollable box and vice versa. If you specify both, you will get a two-way scrollable box. 
 
 ```{r}
-kable(dt) %>%
-  kable_styling("striped", full_width = F) %>%
-  column_spec(7, bold = T) %>%
-  row_spec(5, bold = T)
+kable(cbind(mtcars, mtcars)) %>%
+  kable_styling() %>%
+  scroll_box(width = "500px", height = "200px")
 ```
 
-# Collapse Rows in Selected Columns
-Function `group_rows` is great for showing simple structural information on rows but sometimes people may need to show structural information with multiple layers. When it happens, you may consider to use `collapse_rows` instead, which will put repeating cells in columns into multi-row cells. 
-
-```{r}
-collapse_rows_dt <- data.frame(C1 = c(rep("a", 10), rep("b", 5)),
-                 C2 = c(rep("c", 7), rep("d", 3), rep("c", 2), rep("d", 3)),
-                 C3 = 1:15,
-                 C4 = sample(c(0,1), 15, replace = TRUE))
-kable(collapse_rows_dt, "html", align = "c") %>%
-  kable_styling(full_width = F) %>%
-  column_spec(1, bold=T) %>%
-  collapse_rows(columns = 1:2)
-```
diff --git a/vignettes/awesome_table_in_pdf.Rmd b/vignettes/awesome_table_in_pdf.Rmd
index 49724f7..ab786dd 100644
--- a/vignettes/awesome_table_in_pdf.Rmd
+++ b/vignettes/awesome_table_in_pdf.Rmd
@@ -13,13 +13,18 @@
   - \usepackage{multirow}
   - \usepackage[table]{xcolor}
   - \usepackage{wrapfig}
+  - \usepackage{float}
+  - \usepackage{colortbl}
+  - \usepackage{pdflscape}
+  - \usepackage{tabu}
+  - \usepackage{threeparttable}
 vignette: >
   %\VignetteIndexEntry{Create Awesome PDF Table with knitr::kable and kableExtra}
   %\VignetteEngine{knitr::rmarkdown}
   %\VignetteEncoding{UTF-8}
 ---
 
-> Please see the package [documentation site](http://haozhu233.github.io/kableExtra) for how to use this package in HTML and more. 
+> Please see the package [documentation site](http://haozhu233.github.io/kableExtra) for how to use this package in HTML and more.  
 
 # Overview
 The goal of `kableExtra` is to help you build common complex tables and manipulate table styles. It imports the pipe `%>%` symbol from `magrittr` and verbalize all the functions, so basically you can add "layers" to a kable output in a way that is similar with `ggplot2` and `plotly`. 
@@ -43,7 +48,7 @@
 dt <- mtcars[1:5, 1:6]
 ```
 
-When you are using `kable()`, if you don't specify `format`, by default it will generate a markdown table and let pandoc handle the conversion from markdown to HTML/PDF. This is the most favorable approach to render most simple tables as it is format independent. If you switch from HTML to pdf, you basically don't need to change anything in your code. However, markdown doesn't support complex table. For example, if you want to have a double-row header table, markdown just cannot provide you the functionality you need. As a result, when you have such a need, you should **define `format` in `kable()`** as either "html" or "latex". *You can also define a global option at the beginning using `options(knitr.table.format = "latex")` so you don't repeat the step everytime.*
+When you are using `kable()`, if you don't specify `format`, by default it will generate a markdown table and let pandoc handle the conversion from markdown to HTML/PDF. This is the most favorable approach to render most simple tables as it is format independent. If you switch from HTML to pdf, you basically don't need to change anything in your code. However, markdown doesn't support complex table. For example, if you want to have a double-row header table, markdown just cannot provide you the functionality you need. As a result, when you have such a need, you should **define `format` in `kable()`** as either "html" or "latex". *You can also define a global option at the beginning using `options(knitr.table.format = "latex")` so you don't repeat the step everytime.* **In this tutorial, I'll still put `format="latex"` in the function in case users just want to quickly replicate the results.** 
 
 ```{r}
 options(knitr.table.format = "latex") 
@@ -51,6 +56,32 @@
 ## in every kable function.
 ```
 
+## LaTeX packages used in this package
+If you are using a recent version of rmarkdown, you are recommended to load this package entirely via `library(kableExtra)` or `require(kableExtra)` because this package will load all necessary LaTeX packages, such as `booktabs` or `multirow`, for you automatically. Note that, if you are calling functions from `kableExtra` via `kableExtra::kable_styling()` or if you put `library(kableExtra)` in a separate R file that is **sourced** by the rmarkdown document, these packages won't be loaded. Furthermore, you can suppress this auto-loading behavior by setting a global option `kableExtra.latex.load_packages` to be `FALSE` before you load `kableExtra`.
+
+```{r, eval = FALSE}
+# Not evaluated. Ilustration purpose
+options(kableExtra.latex.load_package = FALSE)
+library(kableExtra)
+```
+
+If you are using R Sweave or some customized rmarkdown templates or you just want to load these LaTeX libraries by yourself, you can put the following meta data into the `yaml` section. If you are familar with LaTeX and you know what you are doing, feel free to remove unnecessary packages from the list. 
+
+```{yaml}
+header-includes:
+  - \usepackage{booktabs}
+  - \usepackage{longtable}
+  - \usepackage{array}
+  - \usepackage{multirow}
+  - \usepackage[table]{xcolor}
+  - \usepackage{wrapfig}
+  - \usepackage{float}
+  - \usepackage{colortbl}
+  - \usepackage{pdflscape}
+  - \usepackage{tabu}
+  - \usepackage{threeparttable}
+```
+
 ## Plain LaTeX
 Plain LaTeX table looks relatively ugly in 2017.
 ```{r}
@@ -60,7 +91,7 @@
 ## LaTeX table with booktabs
 Similar with Bootstrap in HTML, in LaTeX, you can also use a trick to make your table look prettier as well. The different part is that, this time you don't need to pipe kable outputs to another function. Instead, you should call `booktabs = T` directly in `kable()`
 ```{r}
-kable(dt, booktabs = T)
+kable(dt, format = "latex", booktabs = T)
 ```
 
 # Table Styles
@@ -72,25 +103,25 @@
 ### Striped
 Even though in the LaTeX world, people usually call it `alternative row colors` but here I'm using its bootstrap name for consistency. Note that to make it happen, LaTeX package `xcolor` is required to be loaded. In an environment like rmarkdown::pdf_document (rmarkdown 1.4.0 +), `kable_styling` will load it automatically if `striped` is enabled. However, in other cases, you probably need to import that package by yourself. 
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling(latex_options = "striped")
 ```
 
 ### Hold position
 If you provide a table caption in `kable()`, it will put your LaTeX tabular in a `table` environment, unless you are using `longtable`. A `table` environment will automatically find the best place (it thinks) to put your table. However, in many cases, you do want your table to appear in a position you want it to be. In this case, you can use this `hold_position` options here.
 ```{r}
-kable(dt, caption = "Demo table", booktabs = T) %>%
+kable(dt, format = "latex", caption = "Demo table", booktabs = T) %>%
   kable_styling(latex_options = c("striped", "hold_position"))
 ```
 
 ### Scale down
 When you have a wide table that will normally go out of the page and you want to scale down the table to fit the page, you can use the `scale_down` option here. Note that, if your table is too small, it will also scale up your table. It was named in this way only because scaling up isn't very useful in most cases. 
 ```{r}
-kable(cbind(dt, dt, dt), booktabs = T) %>%
+kable(cbind(dt, dt, dt), format = "latex", booktabs = T) %>%
   kable_styling(latex_options = c("striped", "scale_down"))
 ```
 ```{r}
-kable(cbind(dt), booktabs = T) %>%
+kable(cbind(dt), format = "latex", booktabs = T) %>%
   kable_styling(latex_options = c("striped", "scale_down"))
 ```
 
@@ -99,7 +130,7 @@
 ```{r}
 long_dt <- rbind(mtcars, mtcars) 
 
-kable(long_dt, longtable = T, booktabs = T, caption = "Longtable") %>%
+kable(long_dt, format = "latex", longtable = T, booktabs = T, caption = "Longtable") %>%
   add_header_above(c(" ", "Group 1" = 5, "Group 2" = 6)) %>%
   kable_styling(latex_options = c("repeat_header"))
 ```
@@ -108,7 +139,7 @@
 ## Full width?
 If you have a small table and you want it to spread wide on the page, you can try the `full_width` option. Unlike `scale_down`, it won't change your font size. Note that, if you use `full_width` in LaTeX, you will loss your in-cell text alignment settings and everything will be left-aligned. 
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling(full_width = T)
 ```
 
@@ -117,13 +148,13 @@
 
 Note that even though you can select to `right` align your table but the table will actually be centered. Somehow it is very difficult to right align a table in LaTeX (since it's not very useful in the real world?). If you know how to do it, please send out an issue or PR and let me know. 
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling(position = "center")
 ```
 
 Becides these three common options, you can also wrap text around the table using the `float-left` or `float-right` options. Note that, like `striped`, this feature will load another non-default LaTeX package `wrapfig` which requires rmarkdown 1.4.0 +. If you rmarkdown version < 1.4.0, you need to load the package through a customed LaTeX template file. 
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling(position = "float_right")
 ```
 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sit amet mauris in ex ultricies elementum vel rutrum dolor. Phasellus tempor convallis dui, in hendrerit mauris placerat scelerisque. Maecenas a accumsan enim, a maximus velit. Pellentesque in risus eget est faucibus convallis nec at nulla. Phasellus nec lacinia justo. Morbi fermentum, orci id varius accumsan, nibh neque porttitor ipsum, consectetur luctus risus arcu ac ex. Aenean a luctus augue. Suspendisse et auctor nisl. Suspendisse cursus ultrices quam non vulputate. Phasellus et pharetra neque, vel feugiat erat. Sed feugiat elit at mauris commodo consequat. Sed congue lectus id mattis hendrerit. Mauris turpis nisl, congue eget velit sed, imperdiet convallis magna. Nam accumsan urna risus, non feugiat odio vehicula eget.
@@ -131,7 +162,7 @@
 ## Font Size
 If one of your tables is huge and you want to use a smaller font size for that specific table, you can use the `font_size` option. 
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling(font_size = 7)
 ```
 
@@ -148,7 +179,7 @@
   )
 )
 
-kable(text_tbl, booktabs = T) %>%
+kable(text_tbl, format = "latex", booktabs = T) %>%
   kable_styling(full_width = F) %>%
   column_spec(1, bold = T) %>%
   column_spec(2, width = "30em")
@@ -158,7 +189,7 @@
 Similar with `column_spec`, you can define specifications for rows. Currently, you can either bold or italiciz an entire row. Note that, similar with other row-related functions in `kableExtra`, for the position of the target row, you don't need to count in header rows or the group labelling rows.
 
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling("striped", full_width = F) %>%
   column_spec(7, bold = T) %>%
   row_spec(5, bold = T)
@@ -168,14 +199,14 @@
 ## Add header rows to group columns
 Tables with multi-row headers can be very useful to demonstrate grouped data. To do that, you can pipe your kable object into `add_header_above()`. The header variable is supposed to be a named character with the names as new column names and values as column span. For your convenience, if column span equals to 1, you can ignore the `=1` part so the function below can be written as `add_header_above(c(" ", "Group 1" = 2, "Group 2" = 2, "Group 3" = 2)).
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling() %>%
   add_header_above(c(" " = 1, "Group 1" = 2, "Group 2" = 2, "Group 3" = 2))
 ```
 
 In fact, if you want to add another row of header on top, please feel free to do so. Also, in kableExtra 0.3.0, you can specify `bold` & `italic` as you do in `row_spec()`.
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling(latex_options = "striped") %>%
   add_header_above(c(" ", "Group 1" = 2, "Group 2" = 2, "Group 3" = 2)) %>%
   add_header_above(c(" ", "Group 4" = 4, "Group 5" = 2)) %>%
@@ -185,7 +216,7 @@
 ## Group rows via labeling
 Sometimes we want a few rows of the table being grouped together. They might be items under the same topic (e.g., animals in one species) or just different data groups for a categorical variable (e.g., age < 40, age > 40). With the new function `group_rows()` in `kableExtra`, this kind of task can be completed in one line. Please see the example below. Note that when you count for the start/end rows of the group, you don't need to count for the header rows nor other group label rows. You only need to think about the row numbers in the "original R dataframe".
 ```{r}
-kable(mtcars[1:10, 1:6], caption = "Group Rows", booktabs = T) %>%
+kable(mtcars[1:10, 1:6], format = "latex", caption = "Group Rows", booktabs = T) %>%
   kable_styling() %>%
   group_rows("Group 1", 4, 7) %>%
   group_rows("Group 2", 8, 10)
@@ -193,7 +224,7 @@
 
 In case some users need it, you can define your own gapping spaces between the group labeling row and previous rows. The default value is `0.5em`.
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   group_rows("Group 1", 4, 5, latex_gap_space = "2em")
 ```
 
@@ -201,7 +232,7 @@
 Unlike `group_rows()`, which will insert a labeling row, sometimes we want to list a few sub groups under a total one. In that case, `add_indent()` is probably more apporiate. 
 For advanced users, you can even define your own css for the group labeling.
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   add_indent(c(1, 3, 5))
 ```
 
@@ -213,13 +244,13 @@
                  C2 = c(rep("c", 7), rep("d", 3), rep("c", 2), rep("d", 3)),
                  C3 = 1:15,
                  C4 = sample(c(0,1), 15, replace = TRUE))
-kable(collapse_rows_dt, "latex", booktabs = T, align = "c") %>%
+kable(collapse_rows_dt, format = "latex", booktabs = T, align = "c") %>%
   column_spec(1, bold=T) %>%
   collapse_rows(columns = 1:2)
 ```
 
 ```{r}
-kable(collapse_rows_dt, "latex", align = "c") %>%
+kable(collapse_rows_dt, format = "latex", align = "c") %>%
   column_spec(1, bold = T, width = "5em") %>%
   collapse_rows(1:2)
 ```
@@ -230,21 +261,21 @@
 
 ### Alphabet
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling() %>%
   add_footnote(c("Footnote 1", "Have a good day."), notation = "alphabet")
 ```
 
 ### Number
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling() %>%
   add_footnote(c("Footnote 1", "Have a good day."), notation = "number")
 ```
 
 ### Symbol
 ```{r}
-kable(dt, booktabs = T) %>%
+kable(dt, format = "latex", booktabs = T) %>%
   kable_styling() %>%
   add_footnote(c("Footnote 1", "Footnote 2", "Footnote 3"), notation = "symbol")
 ```
@@ -252,7 +283,7 @@
 ## In-table markers
 By design, `add_footnote()` will transform any `[note]` to in-table footnote markers. 
 ```{r}
-kable(dt, caption = "Demo Table[note]", booktabs = T) %>%
+kable(dt, format = "latex", caption = "Demo Table[note]", booktabs = T) %>%
   kable_styling(latex_options = "hold_position") %>%
   add_header_above(c(" ", "Group 1[note]" = 3, "Group 2[note]" = 3)) %>%
   add_footnote(c("This table is from mtcars", 
@@ -265,7 +296,7 @@
 ## Table on a Landscape Page
 Sometimes when we have a wide table, we want it to sit on a designated landscape page. The new function `landscape()` can help you on that. Unlike other functions, this little function only serves LaTeX and doesn't have a HTML side.
 ```{r}
-kable(dt, caption = "Demo Table (Landscape)[note]", booktabs = T) %>%
+kable(dt, format = "latex", caption = "Demo Table (Landscape)[note]", booktabs = T) %>%
   kable_styling(latex_options = c("hold_position")) %>%
   add_header_above(c(" ", "Group 1[note]" = 3, "Group 2[note]" = 3)) %>%
   add_footnote(c("This table is from mtcars", 
