- Fix a bug in collapse_row on removing addlinespace
- remove addlinespace from group_rows
- add monospace to column_spec
diff --git a/R/collapse_rows.R b/R/collapse_rows.R
index 72ee31c..d260362 100644
--- a/R/collapse_rows.R
+++ b/R/collapse_rows.R
@@ -127,7 +127,7 @@
}
out <- sub(contents[i + 1], new_contents[i], out)
}
- out <- sub("\\\\addlinespace\n", "", out)
+ out <- gsub("\\\\addlinespace\n", "", out)
out <- structure(out, format = "latex", class = "knitr_kable")
table_info$collapse_rows <- TRUE
diff --git a/R/column_spec.R b/R/column_spec.R
index a177174..f936305 100644
--- a/R/column_spec.R
+++ b/R/column_spec.R
@@ -14,13 +14,16 @@
#' need to be bolded.
#' @param italic A T/F value to control whether the text of the selected column
#' need to be emphasized.
+#' @param monospace A T/F value to control whether the text of the selected column
+#' need to be monospaced (verbatim)
#'
#' @examples x <- knitr::kable(head(mtcars), "html")
#' column_spec(x, 1, width = "20em", bold = TRUE, italic = TRUE)
#'
#' @export
column_spec <- function(kable_input, column,
- width = NULL, bold = FALSE, italic = FALSE) {
+ width = NULL, bold = FALSE, italic = FALSE,
+ monospace = FALSE) {
if (!is.numeric(column)) {
stop("column must be a numeric value")
}
@@ -30,14 +33,14 @@
return(kable_input)
}
if (kable_format == "html") {
- return(column_spec_html(kable_input, column, width, bold, italic))
+ return(column_spec_html(kable_input, column, width, bold, italic, monospace))
}
if (kable_format == "latex") {
- return(column_spec_latex(kable_input, column, width, bold, italic))
+ return(column_spec_latex(kable_input, column, width, bold, italic, monospace))
}
}
-column_spec_html <- function(kable_input, column, width, bold, italic) {
+column_spec_html <- function(kable_input, column, width, bold, italic, monospace) {
kable_attrs <- attributes(kable_input)
kable_xml <- read_xml(as.character(kable_input), options = "COMPACT")
kable_tbody <- xml_tpart(kable_xml, "tbody")
@@ -72,6 +75,10 @@
xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
"font-style: italic;")
}
+ if (monospace) {
+ xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
+ "font-family: monospace;")
+ }
}
out <- structure(as.character(kable_xml), format = "html",
class = "knitr_kable")
@@ -79,7 +86,7 @@
return(out)
}
-column_spec_latex <- function(kable_input, column, width, bold, italic) {
+column_spec_latex <- function(kable_input, column, width, bold, italic, monospace) {
table_info <- magic_mirror(kable_input)
if (!is.null(table_info$collapse_rows)) {
message("Usually it is recommended to use column_spec before collapse_rows,",
@@ -89,7 +96,7 @@
kable_align_old <- paste(table_info$align_vector, collapse = align_collapse)
table_info$align_vector[column] <- latex_column_align_builder(
- table_info$align_vector[column], width, bold, italic)
+ table_info$align_vector[column], width, bold, italic, monospace)
kable_align_new <- paste(table_info$align_vector, collapse = align_collapse)
@@ -106,7 +113,7 @@
return(out)
}
-latex_column_align_builder <- function(x, width, bold, italic) {
+latex_column_align_builder <- function(x, width, bold, italic, monospace) {
extra_align <- ""
if (!is.null(width)) {
extra_align <- switch(x,
@@ -116,8 +123,9 @@
x <- paste0("p\\{", width, "\\}")
}
- if (bold | italic | extra_align != "") {
- latex_array_options <- c("\\\\bfseries", "\\\\em")[c(bold, italic)]
+ if (bold | italic | monospace | extra_align != "") {
+ latex_array_options <- c("\\\\bfseries", "\\\\em", "\\\\ttfamily")[
+ c(bold, italic, monospace)]
latex_array_options <- c(latex_array_options, extra_align)
latex_array_options <- paste0(
"\\>\\{", paste(latex_array_options, collapse = ""), "\\}"
diff --git a/R/group_rows.R b/R/group_rows.R
index 7b2ad33..c38aaae 100644
--- a/R/group_rows.R
+++ b/R/group_rows.R
@@ -98,6 +98,7 @@
)
}
out <- sub(rowtext, new_rowtext, out)
+ out <- gsub("\\\\addlinespace\n", "", out)
table_info$group_rows_used <- TRUE
attr(out, "kable_meta") <- table_info
out <- add_indent(out, seq(start_row, end_row))