diff --git a/R/row_spec.R b/R/row_spec.R
index fcbd226..3108de8 100644
--- a/R/row_spec.R
+++ b/R/row_spec.R
@@ -194,7 +194,13 @@
                                      underline, strikeout,
                                      color, background, align, font_size, angle,
                                      hline_after, extra_latex_after)
-    out <- sub(paste0(target_row, "\\\\\\\\"), new_row, out, perl = T)
+    if (length(new_row) == 1) {
+      out <- sub(target_row, new_row, out, perl = T)
+    } else {
+      out <- sub(paste0(target_row, "\\\\\\\\"),
+                 paste(new_row, collapse = ""), out, perl = T)
+    }
+    table_info$contents[i] <- new_row
   }
 
   out <- structure(out, format = "latex", class = "knitr_kable")
@@ -209,49 +215,49 @@
   new_row <- latex_row_cells(target_row)
   if (bold) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\textbf{", x, "}")
+      paste0("\\\\textbf\\{", x, "\\}")
     })
   }
   if (italic) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\em{", x, "}")
+      paste0("\\\\em\\{", x, "\\}")
     })
   }
   if (monospace) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\ttfamily{", x, "}")
+      paste0("\\\\ttfamily\\{", x, "\\}")
     })
   }
   if (underline) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\underline{", x, "}")
+      paste0("\\\\underline\\{", x, "\\}")
     })
   }
   if (strikeout) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\sout{", x, "}")
+      paste0("\\\\sout\\{", x, "\\}")
     })
   }
   if (!is.null(color)) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\textcolor", latex_color(color), "{", x, "}")
+      paste0("\\\\textcolor", latex_color(color), "\\{", x, "\\}")
     })
   }
   if (!is.null(font_size)) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\begingroup\\\\fontsize{", font_size, "}{",
+      paste0("\\\\begingroup\\\\fontsize\\{", font_size, "\\}\\{",
              as.numeric(font_size) + 2,
-             "}\\\\selectfont ", x, "\\\\endgroup")})
+             "\\}\\\\selectfont ", x, "\\\\endgroup")})
   }
   if (!is.null(align)) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\multicolumn{1}{", align, "}{", x, "}")
+      paste0("\\\\multicolumn\\{1\\}\\{", align, "\\}\\{", x, "\\}")
     })
   }
 
   if (!is.null(angle)) {
     new_row <- lapply(new_row, function(x) {
-      paste0("\\\\rotatebox{", angle, "}{", x, "}")
+      paste0("\\\\rotatebox\\{", angle, "\\}\\{", x, "\\}")
     })
   }
 
@@ -261,14 +267,18 @@
     new_row <- paste0("\\\\rowcolor", latex_color(background), "  ", new_row)
   }
 
-  new_row <- paste0(new_row, "\\\\\\\\")
-
-  if (hline_after) {
-    new_row <- paste0(new_row, "\n\\\\hline")
+  if (!hline_after & is.null(extra_latex_after)) {
+    return(new_row)
+  } else {
+    latex_after <- "\\\\\\\\"
+    if (hline_after) {
+      latex_after <- paste0(latex_after, "\n\\\\hline")
+    }
+    if (!is.null(extra_latex_after)) {
+      latex_after <- paste0(latex_after, "\n",
+                            regex_escape(extra_latex_after,
+                                         double_backslash = TRUE))
+    }
+    return(c(new_row, latex_after))
   }
-  if (!is.null(extra_latex_after)) {
-    new_row <- paste0(new_row, "\n",
-                      regex_escape(extra_latex_after, double_backslash = TRUE))
-  }
-  return(new_row)
 }
