diff --git a/R/footnote.R b/R/footnote.R
index 9999be7..8863327 100644
--- a/R/footnote.R
+++ b/R/footnote.R
@@ -1,5 +1,31 @@
 #' Add footnote (new)
 #'
+#' @description `footnote` provides a more flexible way to add footnote. You
+#' can add mutiple sets of footnote using differeny notation system. It is
+#' also possible to specify footnote section header one by one and print
+#' footnotes as a chunk of texts.
+#'
+#' @param kable_input HTML or LaTeX table generated by `knitr::kable`
+#' @param general Text for general footnote comments. Footnotes in this section
+#' won't be labeled with any notations
+#' @param number A vector of footnote texts. Footnotes here will be numbered.
+#' There is no upper cap for the number of footnotes here
+#' @param alphabet A vector of footnote texts, Footnotes here will be labeled
+#' with abc. The vector here should not have more than 26 elements.
+#' @param symbol A vector of footnote texts, Footnotes here will be labeled
+#' with special symbols. The vector here should not have more than 20 elements.
+#' @param footnote_order The order of how to arrange `general`, `number`,
+#' `alphabet` and `symbol`.
+#' @param footnote_as_chunk T/F value. Default is FALSE. It controls whether
+#' the footnotes should be printed in a chunk (without line break).
+#' @param escape T/F value. It controls whether the contents and titles should
+#' be escaped against HTML or LaTeX. Default is TRUE.
+#' @param general_title Section header for general footnotes. Default is
+#' "Note: ".
+#' @param number_title Section header for number footnotes. Default is "".
+#' @param alphabet_title Section header for alphabet footnotes. Default is "".
+#' @param symbol_title Section header for symbol footnotes. Default is "".
+#'
 #' @export
 footnote <- function(kable_input,
                      general = NULL,
@@ -9,6 +35,7 @@
                      footnote_order = c("general", "number",
                                         "alphabet", "symbol"),
                      footnote_as_chunk = FALSE,
+                     escape = TRUE,
                      general_title = "Note: ",
                      number_title = "",
                      alphabet_title = "",
@@ -19,15 +46,6 @@
     message("Currently generic markdown table using pandoc is not supported.")
     return(kable_input)
   }
-  footnote_titles <- list(
-    general = general_title, number = number_title,
-    alphabet = alphabet_title, symbol = symbol_title
-  )
-  footnote_contents <- list(
-    general = general, number = number, alphabet = alphabet, symbol = symbol
-  )
-  notnull <- names(footnote_contents)[!sapply(footnote_contents, is.null)]
-  if (length(notnull) == 0) {return(kable_input)}
   if (length(alphabet) > 26) {
     alphabet <- alphabet[1:26]
     warning("Please don't use more than 26 footnotes in table_footnote ",
@@ -38,9 +56,28 @@
     warning("Please don't use more than 20 footnotes in table_footnote ",
             "symbol. Use number instead.")
   }
+  footnote_titles <- list(
+    general = general_title, number = number_title,
+    alphabet = alphabet_title, symbol = symbol_title
+  )
+  footnote_contents <- list(
+    general = general, number = number, alphabet = alphabet, symbol = symbol
+  )
+  notnull <- names(footnote_contents)[!sapply(footnote_contents, is.null)]
+  if (length(notnull) == 0) {return(kable_input)}
   footnote_order <- footnote_order[footnote_order %in% notnull]
   footnote_titles <- footnote_titles[footnote_order]
   footnote_contents <- footnote_contents[footnote_order]
+  footnote_contents <- lapply(footnote_contents, esca)
+  if (escape) {
+    if (kable_format == "html") {
+      footnote_contents <- lapply(footnote_contents, escape_html)
+      footnote_titles <- lapply(footnote_titles, escape_html)
+    } else {
+      footnote_contents <- lapply(footnote_contents, escape_latex)
+      footnote_titles <- lapply(footnote_titles, escape_latex)
+    }
+  }
   footnote_table <- footnote_table_maker(
     kable_format, footnote_titles, footnote_contents
   )
