diff --git a/R/column_spec.R b/R/column_spec.R
index e69de29..bc8ef7e 100644
--- a/R/column_spec.R
+++ b/R/column_spec.R
@@ -0,0 +1,92 @@
+#' Specify the look of the selected column
+#'
+#' @description This function allows users to select a column and then specify
+#' its look. Right now it supports the following three properties: column width,
+#' bold text and italic text.
+#'
+#' @param kable_input Output of `knitr::kable()` with `format` specified
+#' @param column A numeric value indicating which column to be selected
+#' @param width A character string telling HTML & LaTeX how wide the column
+#' needs to be, e.g. "10cm", "3in" or "30em".
+#' @param bold A T/F value to control whether the text of the selected column
+#' need to be bolded.
+#' @param italic A T/F value to control whether the text of the selected column
+#' need to be emphasized.
+#' @export
+column_spec <- function(kable_input, column, width, bold = F, italic = F) {
+  if (!is.numeric(column)) {
+    stop("column must be a numeric value")
+  }
+  kable_format <- attr(kable_input, "format")
+  if (!kable_format %in% c("html", "latex")) {
+    message("Currently generic markdown table using pandoc is not supported.")
+    return(kable_input)
+  }
+  if (kable_format == "html") {
+    return(column_spec_html(kable_input, column, width, bold, italic))
+  }
+  if (kable_format == "latex") {
+    return(column_spec_latex(kable_input, column, width, bold, italic))
+  }
+}
+
+column_spec_html <- function(kable_input, column, width, bold, italic) {
+  kable_attrs <- attributes(kable_input)
+  kable_xml <- read_xml(as.character(kable_input), options = "COMPACT")
+  kable_tbody <- xml_tpart(kable_xml, "tbody")
+
+  group_header_rows <- attr(kable_input, "group_header_rows")
+  all_contents_rows <- seq(1, length(kable_tbody))
+  if (!is.null(group_header_rows)) {
+    all_contents_rows <- all_contents_rows[!all_contents_rows %in%
+                                             group_header_rows]
+  }
+
+  for (i in all_contents_rows) {
+    target_cell <- xml_child(xml_child(kable_tbody, i), column)
+    if (!is.null(width)) {
+      xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
+                                              "width: ", width, "; ")
+    }
+    if (bold) {
+      xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
+                                               "font-weight: bold;")
+    }
+    if (italic) {
+      xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
+                                               "font-style: italic;")
+    }
+  }
+  out <- structure(as.character(kable_xml), format = "html",
+                   class = "knitr_kable")
+  attributes(out) <- kable_attrs
+  return(out)
+}
+
+column_spec_latex <- function(kable_input, column, width, bold, italic) {
+  table_info <- magic_mirror(kable_input)
+  align_collapse <- ifelse(table_info$booktabs, "", "\\|")
+  kable_align_old <- paste(table_info$align_vector, collapse = align_collapse)
+
+  if (!is.null(width)) {
+    table_info$align_vector[column] <- paste0("p\\{", width, "\\}")
+  }
+
+  if (bold | italic) {
+    usepackage_latex("array")
+    latex_array_options <- c("\\\\bfseries", "\\\\em")[c(bold, italic)]
+    latex_array_options <- paste0(
+      "\\>\\{", paste(latex_array_options, collapse = ""), "\\}"
+    )
+    table_info$align_vector[column] <- paste0(latex_array_options,
+                                       table_info$align_vector[column])
+  }
+
+  kable_align_new <- paste(table_info$align_vector, collapse = align_collapse)
+
+  out <- sub(kable_align_old, kable_align_new, as.character(kable_input),
+             perl = T)
+  out <- structure(out, format = "latex", class = "knitr_kable")
+  attr(out, "original_kable_meta") <- table_info
+  return(out)
+}
diff --git a/R/group_rows.R b/R/group_rows.R
index cb0190f..c768386 100644
--- a/R/group_rows.R
+++ b/R/group_rows.R
@@ -86,12 +86,6 @@
       "}}\\\\\\\\\n",
       rowtext
     )
-    # last_row <- paste0(table_info$contents[end_row + 1], "\\\\\\\\")
-    # out <- sub(
-    #   last_row,
-    #   paste0(last_row, "\n\\\\addlinespace[", gap_space, "]"),
-    #   out
-    # )
   } else {
     rowtext <- paste0("\\\\hline\n", rowtext)
     new_rowtext <- paste0(
diff --git a/R/kable_styling.R b/R/kable_styling.R
index 05ede9c..c04029a 100644
--- a/R/kable_styling.R
+++ b/R/kable_styling.R
@@ -169,14 +169,6 @@
   out <- NULL
   out <- as.character(kable_input)
   table_info <- magic_mirror(kable_input)
-  table_info$valign2 <- sub("\\[", "\\\\[", table_info$valign)
-  table_info$valign2 <- sub("\\]", "\\\\]", table_info$valign2)
-  table_info$valign3 <- sub("\\[", "", table_info$valign)
-  table_info$valign3 <- sub("\\]", "", table_info$valign3)
-  table_info$begin_tabular <- paste0("\\\\begin\\{", table_info$tabular, "\\}",
-                                     table_info$valign2)
-  table_info$end_tabular <- paste0("\\\\end\\{", table_info$tabular, "\\}")
-
 
   if ("striped" %in% latex_options) {
     out <- styling_latex_striped(out)
diff --git a/R/magic_mirror.R b/R/magic_mirror.R
index 2283a47..088ee90 100644
--- a/R/magic_mirror.R
+++ b/R/magic_mirror.R
@@ -39,10 +39,19 @@
   kable_info$booktabs <- grepl("\\\\toprule", kable_input)
   # Align
   kable_info$align <- gsub("\\|", "", str_match(
-    kable_input, paste0("\\\\begin\\{", kable_info$tabular,"\\}.*\\{(.*?)\\}"))[2])
+    kable_input, paste0("\\\\begin\\{",
+                        kable_info$tabular,"\\}.*\\{(.*?)\\}"))[2])
+  kable_info$align_vector <- unlist(strsplit(kable_info$align, ""))
   # valign
   kable_info$valign <- gsub("\\|", "", str_match(
     kable_input, paste0("\\\\begin\\{", kable_info$tabular,"\\}(.*)\\{.*?\\}"))[2])
+  kable_info$valign2 <- sub("\\[", "\\\\[", kable_info$valign)
+  kable_info$valign2 <- sub("\\]", "\\\\]", kable_info$valign2)
+  kable_info$valign3 <- sub("\\[", "", kable_info$valign)
+  kable_info$valign3 <- sub("\\]", "", kable_info$valign3)
+  kable_info$begin_tabular <- paste0("\\\\begin\\{", kable_info$tabular, "\\}",
+                                     kable_info$valign2)
+  kable_info$end_tabular <- paste0("\\\\end\\{", kable_info$tabular, "\\}")
   # N of columns
   kable_info$ncol <- nchar(kable_info$align)
   # Caption
