keep working on style
diff --git a/R/kable_styling.R b/R/kable_styling.R
index 9bde4f0..1d357b2 100644
--- a/R/kable_styling.R
+++ b/R/kable_styling.R
@@ -11,36 +11,38 @@
 #' "condensed" and "responsive".
 #' @param full_width A `TRUE` or `FALSE` variable controlling whether the HTML
 #' table should have 100\% width.
-#' @param float A character string determining whether and how the HTML table
+#' @param position A character string determining whether and how the HTML table
 #' should float on the page. Values could be "left", "center", "right"
 #' @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) {
+                          latex_options = "basic",
+                          full_width = NULL,
+                          position = c("center", "left", "right",
+                                       "float_left", "float_right"),
+                          font_size = 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") {
+    if (is.null(full_width)) full_width <- T
     return(htmlTable_styling(kable_input,
                              bootstrap_options = bootstrap_options,
                              full_width = full_width,
-                             float = float,
+                             position = position,
                              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))
+    if (is.null(full_width)) full_width <- F
+    return(pdfTable_styling(kable_input,
+                            latex_options = latex_options,
+                            full_width = full_width,
+                            position = position,
+                            font_size = font_size))
   }
 }
 
@@ -48,8 +50,10 @@
 htmlTable_styling <- function(kable_input,
                               bootstrap_options = "basic",
                               full_width = T,
-                              float = c("center", "left", "right"),
+                              position = c("center", "left", "right",
+                                           "float_left", "float_right"),
                               font_size = NULL) {
+
   kable_xml <- read_xml(as.character(kable_input), options = c("COMPACT"))
 
   # Modify class
@@ -86,15 +90,17 @@
     kable_xml_style <- c(kable_xml_style, "width: auto !important;")
   }
 
-  float <- match.arg(float)
-  if (float == "center") {
-    kable_xml_style <- c(kable_xml_style,
-                         "margin-left:auto; margin-right:auto;")
-  }
-  if (float == "right") {
-    kable_xml_style <- c(kable_xml_style,
-                         "float: right;")
-  }
+  position <- match.arg(position)
+  position_style <- switch(
+    position,
+    center = "margin-left: auto; margin-right: auto;",
+    left = "text-align: right;",
+    right = "margin-right: 0; margin-left: auto",
+    float_left = "float: left; margin-right: 10px;",
+    float_right = "float: right; margin-left: 10px;"
+  )
+  kable_xml_style <- c(kable_xml_style, position_style)
+
   if (length(kable_xml_style) != 0) {
     xml_attr(kable_xml, "style") <- paste(kable_xml_style, collapse = " ")
   }
@@ -104,10 +110,67 @@
 
 # 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) {
+                             latex_options = "basic",
+                             full_width = F,
+                             position = c("center", "left", "right",
+                                       "float_left", "float_right"),
+                             font_size = NULL) {
 
+  latex_options <- match.arg(
+    latex_options,
+    c("basic", "striped", "hold_position", "scale_down"),
+    several.ok = T
+  )
+
+  out = NULL
+  out <- as.character(kable_input)
+  table_info <- magic_mirror(kable_input)
+  valign <- sub("\\[", "\\\\[", table_info$valign)
+  valign <- sub("\\]", "\\\\]", valign)
+  begin_tabular <- paste0("\\\\begin\\{", table_info$tabular, "\\}", valign)
+  end_tabular <- paste0("\\\\end\\{", table_info$tabular, "\\}")
+
+
+  if ("striped" %in% latex_options) {
+    usepackage_latex("xcolor", "table")
+    out <- paste0(
+      # gray!6 is the same as shadecolor ({RGB}{248, 248, 248}) in pdf_document
+      "\\rowcolors{2}{gray!6}{white}\n",
+      out,
+      "\n\\rowcolors{2}{white}{white}"
+    )
+  }
+
+  # hold_position is only meaningful in a table environment
+  if ("hold_position" %in% latex_options & table_info$table_env) {
+    table_env <- "\\\\begin\\{table\\}"
+    out <- sub("\\\\begin\\{table\\}", "\\\\begin\\{table\\}[!h]", out)
+  }
+
+  if ("scale_down" %in% latex_options | full_width) {
+    out <- sub(begin_tabular,
+               paste0("\\\\resizebox\\{\\\\textwidth\\}\\{\\!\\}\\{",
+                      begin_tabular),
+               out)
+    out <- sub(end_tabular, paste0(end_tabular, "\\}"), out)
+  }
+
+  if (full_width) {
+    size_matrix <- sapply(sapply(table_info$contents, str_split, " & "), nchar)
+    col_max_length <- apply(size_matrix, 1, max) + 4
+    col_ratio <- round(col_max_length / sum(col_max_length) * 0.9, 2)
+    col_align <- paste0("p{", col_ratio, "\\\\hsize}")
+    col_align <- paste0("{", paste(col_align, collapse = ""), "}")
+
+    out <- sub(paste0(begin_tabular, "\\{[^\\\\n]*\\}"), begin_tabular, out)
+    out <- sub(begin_tabular, paste0(begin_tabular, col_align), out)
+  }
+
+  position <- match.arg(position)
+  if (position == "right") {
+    warning("Right a")
+  }
+
+  out <- structure(out, format = "latex", class = "knitr_kable")
+  return(out)
 }