* Added kable_paper style for a NYT like table
* Let column_spec take conditional formats
* Added html_font option for kable_styling
diff --git a/NAMESPACE b/NAMESPACE
index 8f34d31..804a243 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -30,6 +30,7 @@
export(kable_material)
export(kable_material_dark)
export(kable_minimal)
+export(kable_paper)
export(kable_styling)
export(landscape)
export(linebreak)
diff --git a/R/cell_spec.R b/R/cell_spec.R
index 8e3facc..8a69c1f 100644
--- a/R/cell_spec.R
+++ b/R/cell_spec.R
@@ -59,13 +59,12 @@
latex_background_in_cell = TRUE) {
if (missing(format) || is.null(format)) {
- format <- getOption('knitr.table.format')
+ if (knitr::is_latex_output()) {
+ format <- "latex"
+ } else {
+ format <- "html"
+ }
}
- if (is.null(format)) {
- message("Setting cell_spec format as html")
- format <- "html"
- }
-
if (tolower(format) == "html") {
return(cell_spec_html(x, bold, italic, monospace, underline, strikeout,
color, background, align, font_size, angle,
@@ -174,11 +173,11 @@
x <- sprintf(ifelse(underline, "\\underline{%s}", "%s"), x)
x <- sprintf(ifelse(strikeout, "\\sout{%s}", "%s"), x)
if (!is.null(color)) {
- color <- latex_color(color)
+ color <- latex_color(color, escape = FALSE)
x <- paste0("\\textcolor", color, "{", x, "}")
}
if (!is.null(background)) {
- background <- latex_color(background)
+ background <- latex_color(background, escape = FALSE)
background_env <- ifelse(latex_background_in_cell, "cellcolor", "colorbox")
x <- paste0("\\", background_env, background, "{", x, "}")
}
diff --git a/R/collapse_rows.R b/R/collapse_rows.R
index 927502e..66349c8 100644
--- a/R/collapse_rows.R
+++ b/R/collapse_rows.R
@@ -57,7 +57,7 @@
"for details.")
return(kable_input)
}
- valign <- match.arg(valign, c("middle", "top", "bottom"))
+ valign <- match.arg(valign)
if (!is.null(target)) {
if (length(target) > 1 && is.integer(target)) {
stop("target can only be a length 1 integer")
@@ -67,8 +67,7 @@
return(collapse_rows_html(kable_input, columns, valign, target))
}
if (kable_format == "latex") {
- latex_hline <- match.arg(latex_hline, c(
- "major", "full", "none", "custom", "linespace"))
+ latex_hline <- match.arg(latex_hline)
row_group_label_position <- match.arg(row_group_label_position,
c('identity', 'stack'))
return(collapse_rows_latex(kable_input, columns, latex_hline, valign,
diff --git a/R/column_spec.R b/R/column_spec.R
index 2a97fee..0f36f65 100644
--- a/R/column_spec.R
+++ b/R/column_spec.R
@@ -7,19 +7,19 @@
#' @param column A numeric value or vector indicating which column(s) 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.
-#' @param monospace A T/F value to control whether the text of the selected column
-#' need to be monospaced (verbatim)
-#' @param underline A T/F value to control whether the text of the selected row
-#' need to be underlined
-#' @param strikeout A T/F value to control whether the text of the selected row
-#' need to be stricked out.
-#' @param color A character string for column text color. Here please pay
-#' attention to the differences in color codes between HTML and LaTeX.
-#' @param background A character string for column background color. Here please
+#' @param bold T/F value or vector to control whether the text of the selected
+#' column need to be bolded.
+#' @param italic T/F value or vector to control whether the text of the
+#' selected column need to be emphasized.
+#' @param monospace T/F value or vector to control whether the text of the
+#' selected column need to be monospaced (verbatim)
+#' @param underline T/F value or vector to control whether the text of the
+#' selected row need to be underlined
+#' @param strikeout T/F value or vector to control whether the text of the
+#' selected row need to be striked out.
+#' @param color A character string or vector for column text color. Here please
+#' pay attention to the differences in color codes between HTML and LaTeX.
+#' @param background A character string or vector for column background color. Here please
#' pay attention to the differences in color codes between HTML and LaTeX.
#' @param border_left A logical variable indicating whether there should be a
#' border line on the left of the selected column. In HTML, you can also pass
@@ -33,14 +33,24 @@
#' window is not wide enough.
#' @param width_max Only for HTML table. `width_max` defines the maximum width
#' of table columns.
-#' @param extra_css Extra css text to be passed into the cells of the row. Note
-#' that it's not for the whole column but to each individual cells
+#' @param extra_css A vector of extra css text to be passed into the cells of
+#' the column.
#' @param include_thead T/F. A HTML only feature to contoll whether the
#' header row will be manipulated. Default is `FALSE`.
#' @param latex_column_spec Only for LaTeX tables. Code to replace the column
#' specification. If not `NULL`, will override all other arguments.
#' @param latex_valign vertical alignment. Only works when you specified column
#' width. Choose among `p`, `m`, `b`.
+#' @param link A vector of strings for url links.
+#' @param new_tab T/F for whether to open up the new link in new tab
+#' @param tooltip A vector of strings to be displayed as tooltip.
+#' Obviously, this feature is only available in HTML. Read the package
+#' vignette to see how to use bootstrap tooltip css to improve the loading
+#' speed and look.
+#' @param popover Similar with tooltip but can hold more contents. The best way
+#' to build a popover is through `spec_popover()`. If you only provide a text
+#' string, it will be used as content. Note that You have to enable this
+#' bootstrap module manually. Read the package vignette to see how.
#'
#' @details Use `latex_column_spec` in a LaTeX table to change or
#' customize the column specification. Because of the way it is handled
@@ -58,7 +68,9 @@
border_left = FALSE, border_right = FALSE,
width_min = NULL, width_max = NULL,
extra_css = NULL, include_thead = FALSE,
- latex_column_spec = NULL, latex_valign = 'p') {
+ latex_column_spec = NULL, latex_valign = 'p',
+ link = NULL, new_tab = TRUE,
+ tooltip = NULL, popover = NULL) {
if (!is.numeric(column)) {
stop("column must be numeric. ")
}
@@ -76,7 +88,8 @@
color, background,
border_left, border_right,
width_min, width_max,
- extra_css, include_thead))
+ extra_css, include_thead,
+ link, new_tab, tooltip, popover))
}
if (kable_format == "latex") {
return(column_spec_latex(kable_input, column, width,
@@ -84,8 +97,8 @@
underline, strikeout,
color, background,
border_left, border_right,
- latex_column_spec = latex_column_spec,
- latex_valign = latex_valign))
+ latex_column_spec, latex_valign, include_thead,
+ link))
}
}
@@ -95,7 +108,8 @@
color, background,
border_left, border_right,
width_min, width_max,
- extra_css, include_thead) {
+ extra_css, include_thead,
+ link, new_tab, tooltip, popover) {
kable_attrs <- attributes(kable_input)
kable_xml <- read_kable_as_xml(kable_input)
kable_tbody <- xml_tpart(kable_xml, "tbody")
@@ -120,19 +134,6 @@
border_right <- T
}
- for (i in all_contents_rows) {
- for (j in column) {
- target_cell <- xml_child(xml_child(kable_tbody, i), j)
- column_spec_html_cell(
- target_cell, width, width_min, width_max,
- bold, italic, monospace, underline, strikeout,
- color, background, border_left, border_right,
- border_l_css, border_r_css,
- extra_css
- )
- }
- }
-
if (include_thead) {
kable_thead <- xml_tpart(kable_xml, "thead")
nrow_thead <- length(xml_children(kable_thead))
@@ -140,10 +141,39 @@
target_cell <- xml_child(xml_child(kable_thead, nrow_thead), j)
column_spec_html_cell(
target_cell, width, width_min, width_max,
- bold, italic, monospace, underline, strikeout,
- color, background, border_left, border_right,
+ bold[1], italic[1], monospace[1], underline[1], strikeout[1],
+ color[1], background[1], border_left, border_right,
border_l_css, border_r_css,
- extra_css
+ extra_css[1], link[1], new_tab[1], tooltip[1], popover[1]
+ )
+ }
+ }
+
+ nrows <- length(all_contents_rows)
+ off <- 0
+
+ bold <- ensure_len_html(bold, nrows, "bold")
+ italic <- ensure_len_html(italic, nrows, "italic")
+ monospace <- ensure_len_html(monospace, nrows, "monospace")
+ underline <- ensure_len_html(underline, nrows, "underline")
+ strikeout <- ensure_len_html(strikeout, nrows, "strikeout")
+ color <- ensure_len_html(color, nrows, "color")
+ background <- ensure_len_html(background, nrows,"background")
+ link <- ensure_len_html(link, nrows, "link")
+ new_tab <- ensure_len_html(new_tab, nrows, "new_tab")
+ tooltip <- ensure_len_html(tooltip, nrows, "tooltip")
+ popover <- ensure_len_html(popover, nrows, "popover")
+
+ for (i in all_contents_rows) {
+ for (j in column) {
+ target_cell <- xml_child(xml_child(kable_tbody, i), j)
+ column_spec_html_cell(
+ target_cell, width, width_min, width_max,
+ bold[i], italic[i], monospace[i], underline[i], strikeout[i],
+ color[i], background[i], border_left, border_right,
+ border_l_css, border_r_css,
+ extra_css,
+ link[i], new_tab[i], tooltip[i], popover[i]
)
}
}
@@ -154,12 +184,22 @@
return(out)
}
+ensure_len_html <- function(x, l, name) {
+ if (is.null(x)) return(NULL)
+ if (length(x) == 1) return(rep(x, l))
+ if (length(x) == l) return(x)
+ warning("The number of provided values in ", name, " does not equal to the ",
+ "number of rows. ")
+ return(rep(x, ceiling(l / length(x)))[seq(1, l)])
+}
+
column_spec_html_cell <- function(target_cell, width, width_min, width_max,
bold, italic, monospace, underline, strikeout,
color, background,
border_left, border_right,
border_l_css, border_r_css,
- extra_css) {
+ extra_css,
+ link, new_tab, tooltip, popover) {
if (is.na(xml_attr(target_cell, "style"))) {
xml_attr(target_cell, "style") <- ""
}
@@ -218,6 +258,56 @@
xml_attr(target_cell, "style") <- paste0(xml_attr(target_cell, "style"),
extra_css)
}
+
+ # favor popover over tooltip
+ if (!is.null(popover)) {
+ if (class(popover) != "ke_popover") popover <- spec_popover(popover)
+ popover_list <- attr(popover, 'list')
+ for (p in names(popover_list)) {
+ xml_attr(target_cell, p) <- popover_list[p]
+ }
+ } else if (!is.null(tooltip)) {
+ if (class(tooltip) != "ke_tooltip") tooltip <- spec_tooltip(tooltip)
+ tooltip_list <- attr(tooltip, 'list')
+ for (t in names(tooltip_list)) {
+ xml_attr(target_cell, t) <- tooltip_list[t]
+ }
+ }
+ # if (!is.null(popover)) {
+ # if (class(popover) != "ke_popover") popover <- spec_popover(popover)
+ # popover_list <- attr(popover, 'list')
+ # span_node <- xml2::read_xml(paste0(
+ # '<span>', xml_text(target_cell), '</span>'
+ # ))
+ # for (p in names(popover_list)) {
+ # xml_attr(span_node, p) <- popover_list[p]
+ # }
+ # xml_add_child(target_cell, span_node)
+ # xml_text(target_cell) <- ""
+ # } else if (!is.null(tooltip)) {
+ # if (class(tooltip) != "ke_tooltip") tooltip <- spec_tooltip(tooltip)
+ # tooltip_list <- attr(tooltip, 'list')
+ # span_node <- xml2::read_xml(paste0(
+ # '<span>', xml_text(target_cell), '</span>'
+ # ))
+ # for (t in names(tooltip_list)) {
+ # xml_attr(span_node, t) <- tooltip_list[t]
+ # }
+ # xml_add_child(target_cell, span_node)
+ # xml_text(target_cell) <- ""
+ # }
+
+ if (!is.null(link)) {
+ href_node <- xml2::read_xml(paste0(
+ '<a href="', link, '">', xml_text(target_cell), '</a>'
+ ))
+ if (!is.null(color)) {
+ xml_attr(href_node, "style") <- paste0("color: ", html_color(color),
+ " !important;")
+ }
+ xml_add_child(target_cell, href_node)
+ xml_text(target_cell) <- ""
+ }
}
column_spec_latex <- function(kable_input, column, width,
@@ -225,7 +315,8 @@
underline, strikeout,
color, background,
border_left, border_right,
- latex_column_spec, latex_valign) {
+ latex_column_spec, latex_valign, include_thead,
+ link) {
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,",
@@ -239,9 +330,7 @@
table_info$align_vector_origin[column],
function(x) {
latex_column_align_builder(
- x, width, bold, italic, monospace, underline, strikeout,
- color, background, border_left, border_right, latex_column_spec,
- latex_valign)
+ x, width, border_left, border_right, latex_column_spec, latex_valign)
}
))
@@ -258,6 +347,49 @@
table_info <- fix_newline[[2]]
}
+ if (table_info$duplicated_rows) {
+ dup_fx_out <- fix_duplicated_rows_latex(out, table_info)
+ out <- dup_fx_out[[1]]
+ table_info <- dup_fx_out[[2]]
+ }
+
+ nrows <- length(table_info$contents)
+ off <- table_info$position_offset
+
+ bold <- ensure_len_latex(bold, nrows, off, include_thead, FALSE, "bold")
+ italic <- ensure_len_latex(italic, nrows, off, include_thead, FALSE, "italic")
+ monospace <- ensure_len_latex(monospace, nrows, off, include_thead, FALSE,
+ "monospace")
+ underline <- ensure_len_latex(underline, nrows, off, include_thead, FALSE,
+ "underline")
+ strikeout <- ensure_len_latex(strikeout, nrows, off, include_thead, FALSE,
+ "strikeout")
+ color <- ensure_len_latex(color, nrows, off, include_thead, "black", "color")
+ background <- ensure_len_latex(background, nrows, off, include_thead, "white",
+ "background")
+ link <- ensure_len_latex(link, nrows, off, include_thead, "#", "link")
+
+ if (include_thead) {
+ rows <- seq(1, nrows)
+ } else {
+ rows <- seq(1 + off, nrows)
+ }
+
+ for (i in rows) {
+ target_row <- table_info$contents[i]
+ new_row <- latex_cell_builder(
+ target_row, column, table_info,
+ bold[i], italic[i], monospace[i], underline[i],
+ strikeout[i], color[i], background[i], link[i]
+ # font_size, angle
+ )
+ temp_sub <- ifelse(i == 1 & (table_info$tabular == "longtable" |
+ !is.null(table_info$repeat_header_latex)),
+ gsub, sub)
+ out <- temp_sub(target_row, new_row, out, perl = T)
+ table_info$contents[i] <- new_row
+ }
+
out <- structure(out, format = "latex", class = "knitr_kable")
if (!is.null(width)) {
if (is.null(table_info$column_width)) {
@@ -271,9 +403,24 @@
return(out)
}
-latex_column_align_builder <- function(x, width, bold, italic, monospace,
- underline, strikeout,
- color, background,
+ensure_len_latex <- function(x, l, off, include_thead, def, name) {
+ if (is.null(x)) return(NULL)
+ if (length(x) == 1) return(rep(x, l))
+ if (include_thead) {
+ if (length(x) == l) return(x)
+ warning("The number of provided values in ", name, " does not equal to the ",
+ "number of rows. ")
+ return(rep(x, ceiling(l / length(x)))[seq(1, l)])
+ } else {
+ l_ = l - off
+ if (length(x) == l_) return(c(def, x))
+ warning("The number of provided values in ", name, " does not equal to the ",
+ "number of rows. ")
+ return(c(def, rep(x, ceiling(l_ / length(x)))[seq(1, l_)]))
+ }
+}
+
+latex_column_align_builder <- function(x, width,
border_left, border_right,
latex_column_spec, latex_valign) {
extra_align <- ""
@@ -284,24 +431,23 @@
"r" = "\\\\raggedleft\\\\arraybackslash")
x <- paste0(latex_valign, "\\{", width, "\\}")
}
-
- if (!is.null(color)) {
- color <- paste0("\\\\leavevmode\\\\color", latex_color(color))
- }
-
- if (!is.null(background)) {
- background <- paste0("\\\\columncolor", latex_color(background))
- }
-
- latex_array_options <- c("\\\\bfseries", "\\\\em", "\\\\ttfamily",
- "\\\\underline", "\\\\sout")[
- c(bold, italic, monospace, underline, strikeout)]
- latex_array_options <- c(latex_array_options, extra_align,
- color, background)
- latex_array_options <- paste0(
- "\\>\\{", paste(latex_array_options, collapse = ""), "\\}"
- )
- x <- paste0(latex_array_options, x)
+ # if (!is.null(color)) {
+ # color <- paste0("\\\\leavevmode\\\\color", latex_color(color))
+ # }
+ #
+ # if (!is.null(background)) {
+ # background <- paste0("\\\\columncolor", latex_color(background))
+ # }
+ #
+ # latex_array_options <- c("\\\\bfseries", "\\\\em", "\\\\ttfamily",
+ # "\\\\underline", "\\\\sout")[
+ # c(bold, italic, monospace, underline, strikeout)]
+ # latex_array_options <- c(latex_array_options, extra_align,
+ # color, background)
+ # latex_array_options <- paste0(
+ # "\\>\\{", paste(latex_array_options, collapse = ""), "\\}"
+ # )
+ # x <- paste0(latex_array_options, x)
if (border_left) {
x <- paste0("\\|", x)
}
@@ -309,7 +455,7 @@
x <- paste0(x, "\\|")
}
if (!is.null(latex_column_spec))
- x <- latex_column_spec
+ x <- latex_column_spec
return(x)
}
@@ -317,8 +463,8 @@
replace_makecell_with_newline <- function(kable_input, table_info, column) {
if (!str_detect(kable_input, "makecell")) return(list(kable_input, table_info))
contents_table <- data.frame(sapply(table_info$contents,
- function(x) {str_split(x, " \\& ")[[1]]}),
- stringsAsFactors = F)
+ function(x) {str_split(x, " \\& ")[[1]]}),
+ stringsAsFactors = F)
names(contents_table) <- paste0("x", 1:table_info$nrow)
rows_check_makecell <- str_detect(contents_table[column, ], "makecell")
if (sum(rows_check_makecell) == 0) return(list(kable_input, table_info))
@@ -346,3 +492,53 @@
return(list(kable_input, table_info))
}
+
+latex_cell_builder <- function(target_row, column, table_info,
+ bold, italic, monospace,
+ underline, strikeout,
+ color, background, link
+ # font_size, angle
+ ) {
+ new_row <- latex_row_cells(target_row)[[1]]
+ if (bold) {
+ new_row[column] <- paste0("\\\\textbf\\{", new_row[column], "\\}")
+ }
+ if (italic) {
+ new_row[column] <- paste0("\\\\em\\{", new_row[column], "\\}")
+ }
+ if (monospace) {
+ new_row[column] <- paste0("\\\\ttfamily\\{", new_row[column], "\\}")
+ }
+ if (underline) {
+ new_row[column] <- paste0("\\\\underline\\{", new_row[column], "\\}")
+ }
+ if (strikeout) {
+ new_row[column] <- paste0("\\\\sout\\{", new_row[column], "\\}")
+ }
+ if (!is.null(color)) {
+ new_row[column] <- paste0("\\\\textcolor", latex_color(color), "\\{",
+ new_row[column], "\\}")
+ }
+ # if (!is.null(font_size)) {
+ # new_row[column] <- paste0("\\\\begingroup\\\\fontsize\\{", font_size, "\\}\\{",
+ # as.numeric(font_size) + 2,
+ # "\\}\\\\selectfont ", new_row[column], "\\\\endgroup")
+ # }
+ # if (!is.null(angle)) {
+ # new_row[column] <- paste0("\\\\rotatebox\\{", angle, "\\}\\{",
+ # new_row[column], "\\}")
+ # }
+ if (!is.null(background)) {
+ new_row[column] <- paste0("\\\\cellcolor", latex_color(background), "\\{",
+ new_row[column], "\\}")
+ }
+
+ if (!is.null(link)) {
+ new_row[column] <- paste0("\\\\href\\{", escape_latex(link), "\\}\\{",
+ new_row[column], "\\}")
+ }
+
+ new_row <- paste(new_row, collapse = " & ")
+
+ return(new_row)
+}
diff --git a/R/kable.R b/R/kable.R
index f1709d5..108e928 100644
--- a/R/kable.R
+++ b/R/kable.R
@@ -63,10 +63,10 @@
if (!missing(align) && length(align) == 1L && !grepl('[^lcr]', align)) {
align <- strsplit(align, '')[[1]]
}
- if (missing(format) | is.null(format)) {
+ if (missing(format) || is.null(format)) {
if (knitr::is_latex_output()) {
format <- "latex"
- return(knitr::kable(
+ out <- knitr::kable(
x = x, format = format, digits = digits,
row.names = row.names, col.names = col.names, align = align,
caption = caption, label = label, format.args = format.args,
@@ -76,28 +76,59 @@
vline = vline, toprule = toprule, bottomrule = bottomrule,
midrule = midrule, linesep = linesep, caption.short = caption.short,
table.envir = table.envir, ...
- ))
+ )
+ table_info <- magic_mirror(out)
+ if (is.null(col.names)) {
+ table_info$position_offset <- 0
+ }
+ return(out)
} else {
format <- "html"
- return(knitr::kable(
+ out <- knitr::kable(
x = x, format = format, digits = digits,
row.names = row.names, col.names = col.names, align = align,
caption = caption, label = label, format.args = format.args,
escape = escape,
table.attr = table.attr, ...
- ))
+ )
+ if (!"kableExtra" %in% class(out)) class(out) <- c("kableExtra", class(out))
+ return(out)
}
} else {
+ if (format == "latex") {
+ out <- knitr::kable(
+ x = x, format = format, digits = digits,
+ row.names = row.names, col.names = col.names, align = align,
+ caption = caption, label = label, format.args = format.args,
+ escape = escape,
+ booktabs = booktabs, longtable = longtable,
+ valign = valign, position = position, centering = centering,
+ vline = vline, toprule = toprule, bottomrule = bottomrule,
+ midrule = midrule, linesep = linesep, caption.short = caption.short,
+ table.envir = table.envir, ...
+ )
+ table_info <- magic_mirror(out)
+ if (is.null(col.names)) {
+ table_info$position_offset <- 0
+ }
+ return(out)
+ }
+ if (format == "html") {
+ out <- knitr::kable(
+ x = x, format = format, digits = digits,
+ row.names = row.names, col.names = col.names, align = align,
+ caption = caption, label = label, format.args = format.args,
+ escape = escape,
+ table.attr = table.attr, ...
+ )
+ if (!"kableExtra" %in% class(out)) class(out) <- c("kableExtra", class(out))
+ return(out)
+ }
return(knitr::kable(
x = x, format = format, digits = digits,
row.names = row.names, col.names = col.names, align = align,
caption = caption, label = label, format.args = format.args,
- escape = escape, table.attr = table.attr,
- booktabs = booktabs, longtable = longtable,
- valign = valign, position = position, centering = centering,
- vline = vline, toprule = toprule, bottomrule = bottomrule,
- midrule = midrule, linesep = linesep, caption.short = caption.short,
- table.envir = table.envir, ...
+ escape = escape, ...
))
}
diff --git a/R/kable_styling.R b/R/kable_styling.R
index a777faf..778335d 100644
--- a/R/kable_styling.R
+++ b/R/kable_styling.R
@@ -65,6 +65,8 @@
#' `lightable-classic-2`, `lightable-material`, `lightable-striped` and
#' `lightable-hover`. If you have your customized style sheet loaded which
#' defines your own table class, you can also load it here.
+#' @param html_font A string for HTML css font. For example,
+#' `html_font = '"Arial Narrow", arial, helvetica, sans-serif'`.
#'
#' @details For LaTeX, if you use other than English environment
#' - all tables are converted to 'UTF-8'. If you use, for example, Hungarian
@@ -100,7 +102,8 @@
protect_latex = TRUE,
table.envir = "table",
fixed_thead = FALSE,
- htmltable_class = NULL) {
+ htmltable_class = NULL,
+ html_font = NULL) {
if (length(bootstrap_options) == 1 && bootstrap_options == "basic") {
bootstrap_options <- getOption("kable_styling_bootstrap_options", "basic")
@@ -136,7 +139,8 @@
font_size = font_size,
protect_latex = protect_latex,
fixed_thead = fixed_thead,
- htmltable_class = htmltable_class))
+ htmltable_class = htmltable_class,
+ html_font = html_font))
}
if (kable_format == "latex") {
if (is.null(full_width)) {
@@ -195,7 +199,8 @@
font_size = NULL,
protect_latex = TRUE,
fixed_thead = FALSE,
- htmltable_class = NULL) {
+ htmltable_class = NULL,
+ html_font = NULL) {
if (protect_latex) {
kable_input <- extract_latex_from_kable(kable_input)
}
@@ -246,6 +251,11 @@
xml_attr(kable_caption_node, "style") <- "font-size: initial !important;"
}
}
+ if (!is.null(html_font)) {
+ kable_xml_style <- c(kable_xml_style, paste0(
+ 'font-family: ', html_font, ';'
+ ))
+ }
if (!full_width) {
kable_xml_style <- c(kable_xml_style, "width: auto !important;")
}
diff --git a/R/light_themes.R b/R/light_themes.R
index 94aa826..4200dac 100644
--- a/R/light_themes.R
+++ b/R/light_themes.R
@@ -13,35 +13,60 @@
#' @param ... Everything else you need to specify in `kable_styling`.
#'
#' @export
-kable_classic <- function(kable_input, lightable_options = "basic", ...) {
- kable_light(kable_input, "lightable-classic", lightable_options, ...)
+kable_classic <- function(
+ kable_input, lightable_options = "basic",
+ html_font = '"Arial Narrow", "Source Sans Pro", sans-serif', ...) {
+ kable_light(kable_input, "lightable-classic",
+ lightable_options, html_font, ...)
}
#' @rdname kable_classic
#' @export
-kable_classic_2 <- function(kable_input, lightable_options = "basic", ...) {
- kable_light(kable_input, "lightable-classic-2", lightable_options, ...)
+kable_classic_2 <- function(
+ kable_input, lightable_options = "basic",
+ html_font = '"Arial Narrow", "Source Sans Pro", sans-serif', ...) {
+ kable_light(kable_input, "lightable-classic-2",
+ lightable_options, html_font, ...)
}
#' @rdname kable_classic
#' @export
-kable_minimal <- function(kable_input, lightable_options = "basic", ...) {
- kable_light(kable_input, "lightable-minimal", lightable_options, ...)
+kable_minimal <- function(
+ kable_input, lightable_options = "basic",
+ html_font = 'calibri, cambria, "Source Sans Pro", sans-serif', ...) {
+ kable_light(kable_input, "lightable-minimal",
+ lightable_options, html_font, ...)
}
#' @rdname kable_classic
#' @export
-kable_material <- function(kable_input, lightable_options = "basic", ...) {
- kable_light(kable_input, "lightable-material", lightable_options, ...)
+kable_material <- function(
+ kable_input, lightable_options = "basic",
+ html_font = '"Source Sans Pro", helvetica, sans-serif', ...) {
+ kable_light(kable_input, "lightable-material",
+ lightable_options, html_font, ...)
}
#' @rdname kable_classic
#' @export
-kable_material_dark <- function(kable_input, lightable_options = "basic", ...) {
- kable_light(kable_input, "lightable-material-dark", lightable_options, ...)
+kable_material_dark <- function(
+ kable_input, lightable_options = "basic",
+ html_font = '"Source Sans Pro", helvetica, sans-serif', ...) {
+ kable_light(kable_input, "lightable-material-dark",
+ lightable_options, html_font, ...)
}
-kable_light <- function(kable_input, light_class, lightable_options, ...) {
+#' @rdname kable_classic
+#' @export
+kable_paper <- function(
+ kable_input, lightable_options = "basic",
+ html_font = '"Arial Narrow", arial, helvetica, sans-serif', ...) {
+ kable_light(kable_input, "lightable-paper", lightable_options,
+ html_font, ...)
+}
+
+kable_light <- function(kable_input, light_class, lightable_options,
+ html_font = NULL, ...) {
lightable_options <- match.arg(lightable_options,
choices = c("basic", "striped", "hover"),
several.ok = TRUE)
@@ -51,7 +76,8 @@
if ("hover" %in% lightable_options) {
light_class <- paste(light_class, "lightable-hover")
}
- out <- kable_styling(kable_input, "none", htmltable_class = light_class, ...)
+ out <- kable_styling(kable_input, "none", htmltable_class = light_class,
+ html_font = html_font, ...)
attr(out, "lightable") <- TRUE
attr(out, "lightable_class") <- light_class
return(out)
diff --git a/R/spec_tools.R b/R/spec_tools.R
index 0ae4032..350925b 100644
--- a/R/spec_tools.R
+++ b/R/spec_tools.R
@@ -35,6 +35,16 @@
latex_color_ <- function(color) {
if (substr(color, 1, 1) != "#") {
+ return(paste0("\\{", color, "\\}"))
+ } else {
+ color <- sub("#", "", color)
+ if (nchar(color) == 8) color <- substr(color, 1, 6)
+ return(paste0("\\[HTML\\]\\{", color, "\\}"))
+ }
+}
+
+latex_color__ <- function(color) {
+ if (substr(color, 1, 1) != "#") {
return(paste0("{", color, "}"))
} else {
color <- sub("#", "", color)
@@ -42,9 +52,14 @@
return(paste0("[HTML]{", color, "}"))
}
}
-latex_color <- function(colors) {
+latex_color <- function(colors, escape = TRUE) {
colors <- as.character(colors)
- sapply(colors, latex_color_)
+ if (escape) {
+ return(sapply(colors, latex_color_))
+ } else {
+ return(sapply(colors, latex_color__))
+ }
+
}
#' Generate common font size for continuous values
@@ -98,11 +113,18 @@
position <- match.arg(position, c("right", "bottom", "top", "left", "auto"),
several.ok = TRUE)
tooltip_options <- paste(
- 'data-toggle="tooltip"',
+ 'data-toggle="tooltip" data-container="body"',
paste0('data-placement="', position, '"'),
# ifelse(as_html, 'data-html="true"', NULL),
paste0('title="', title, '"'))
+ tooltip_options_list <- list(
+ 'data-toggle' = 'tooltip',
+ 'data-container' = 'body',
+ 'data-placement' = position,
+ 'title' = if(is.null(title)) '' else title
+ )
class(tooltip_options) <- "ke_tooltip"
+ attr(tooltip_options, 'list') <- tooltip_options_list
return(tooltip_options)
}
@@ -123,11 +145,22 @@
position <- match.arg(position, c("bottom", "top", "left", "right", "auto"),
several.ok = TRUE)
popover_options <- paste(
- 'data-toggle="popover"',
+ 'data-toggle="popover" data-container="body"',
paste0('data-trigger="', trigger, '"'),
paste0('data-placement="', position, '"'),
ifelse(!is.null(title), paste0('title="', title, '"'), ""),
paste0('data-content="', content, '"'))
+ popover_options_list <- list(
+ 'data-toggle' = 'popover',
+ 'data-container' = 'body',
+ 'data-trigger' = trigger,
+ 'data-placement' = position,
+ 'data-content' = content
+ )
+ if (!is.null(title)) {
+ popover_options_list['title'] <- title
+ }
class(popover_options) <- "ke_popover"
+ attr(popover_options, 'list') <- popover_options_list
return(popover_options)
}
diff --git a/R/zzz.R b/R/zzz.R
index 36133e7..3fd88fb 100644
--- a/R/zzz.R
+++ b/R/zzz.R
@@ -18,8 +18,8 @@
# usepackage_latex("xcolor")
}
}
- auto_format <- getOption("kableExtra.auto_format", default = TRUE)
- if (auto_format) auto_set_format()
+ # auto_format <- getOption("kableExtra.auto_format", default = TRUE)
+ # if (auto_format) auto_set_format()
if (!is.null(rmarkdown::metadata$output) &&
rmarkdown::metadata$output %in% c(
"ioslides_presentation", "slidy_presentation",
diff --git a/docs/awesome_table_in_html.Rmd b/docs/awesome_table_in_html.Rmd
index 4658a3c..f8a7c67 100644
--- a/docs/awesome_table_in_html.Rmd
+++ b/docs/awesome_table_in_html.Rmd
@@ -14,6 +14,12 @@
%\VignetteEncoding{UTF-8}
---
+<script>
+$(document).ready(function(){
+ $('[data-toggle="popover"]').popover();
+});
+</script>
+
<img src="kableExtra_sm.png" align="right" alt="logo" width="80" height = "93" style = "border: none; float: right;">
> Please see the package [documentation site](http://haozhu233.github.io/kableExtra/) for how to use this package in LaTeX.
@@ -68,7 +74,13 @@
```
## Alternative themes
-`kableExtra` also offers a few in-house alternative HTML table themes other than the default bootstrap theme. Right now there are 5 of them: `kable_classic`, `kable_classic_2`, `kable_minimal`, `kable_material` and `kable_material_dark`. These functions are alternatives to `kable_styling`, which means that you can specify any additional formatting options in `kable_styling` in these functions too. The only difference is that `bootstrap_options` (as discussed in the next section) is replaced with `lightable_options` at the same location with only two choices `striped` and `hover` available.
+`kableExtra` also offers a few in-house alternative HTML table themes other than the default bootstrap theme. Right now there are 6 of them: `kable_paper`, `kable_classic`, `kable_classic_2`, `kable_minimal`, `kable_material` and `kable_material_dark`. These functions are alternatives to `kable_styling`, which means that you can specify any additional formatting options in `kable_styling` in these functions too. The only difference is that `bootstrap_options` (as discussed in the next section) is replaced with `lightable_options` at the same location with only two choices `striped` and `hover` available.
+
+```{r}
+dt %>%
+ kable() %>%
+ kable_paper("hover")
+```
```{r}
dt %>%
@@ -130,7 +142,7 @@
By default, a bootstrap table takes 100% of the width. It is supposed to use together with its grid system to scale the table properly. However, when you are writing a rmarkdown document, you probably don't want to write your own css/or grid. For some small tables with only few columns, a page wide table looks awful. To make it easier, you can specify whether you want the table to have `full_width` or not in `kable_styling`. By default, `full_width` is set to be `TRUE` for HTML tables (note that for LaTeX, the default is `FALSE` since I don't want to change the "common" looks unless you specified it.)
```{r}
kable(dt) %>%
- kable_styling(bootstrap_options = "striped", full_width = F)
+ kable_paper(bootstrap_options = "striped", full_width = F)
```
## Position
@@ -184,9 +196,23 @@
column_spec(2, width = "30em", background = "yellow")
```
+> **Key Update**: I understand the need of doing conditional formatting and the previous solution `cell_spec` is relatively hard to use. Therefore in kableExtra 1.2, I improved the functionality of `column_spec` so it can take vectorized input for most of its arguments (except `width`, `border_left` and `border_right`). It is really easy right now to format a column based on other values.
+
+```{r}
+mtcars[1:8, 1:8] %>%
+ kable() %>%
+ kable_paper(full_width = F) %>%
+ column_spec(2, color = spec_color(mtcars$mpg[1:8]),
+ link = "https://haozhu233.github.io/kableExtra") %>%
+ column_spec(6, color = "white",
+ background = spec_color(mtcars$drat[1:8], end = 0.7),
+ popover = paste("am:", mtcars$am[1:8]))
+```
+
+You can still use the `spec_***` helper functions to help you define color. See the documentation [below](#visualize-data-with-viridis-color).
## Row spec
-Similar with `column_spec`, you can define specifications for rows. Currently, you can either bold or italiciz an entire row. Note that, similar with other row-related functions in `kableExtra`, for the position of the target row, you don't need to count in header rows or the group labelling rows.
+Similar with `column_spec`, you can define specifications for rows. Currently, you can either bold or italicize an entire row. Note that, similar with other row-related functions in `kableExtra`, for the position of the target row, you don't need to count in header rows or the group labeling rows.
```{r}
kable(dt) %>%
@@ -206,6 +232,9 @@
```
# Cell/Text Specification
+
+>**Key Update: As said before, if you are using kableExtra 1.2+, you are now recommended to used `column_spec` to do conditional formatting**.
+
Function `cell_spec` is introduced in version 0.6.0 of `kableExtra`. Unlike `column_spec` and `row_spec`, **this function is designed to be used before the data.frame gets into the `kable` function**. Comparing with figuring out a list of 2 dimentional index for targeted cells, this design is way easier to learn and use and it fits perfectly well with `dplyr`'s `mutate` and `summarize` functions. With this design, there are two things to be noted:
* Since `cell_spec` generates raw `HTML` or `LaTeX` code, make sure you remember to put `escape = FALSE` in `kable`. At the same time, you have to escape special symbols including `%` manually by yourself
* `cell_spec` needs a way to know whether you want `html` or `latex`. You can specify it locally in function or globally via the `options(knitr.table.format = "latex")` method as suggested at the beginning. If you don't provide anything, this function will output as HTML by default.
@@ -230,7 +259,7 @@
```
## Visualize data with Viridis Color
-This package also comes with a few helper functions, including `spec_color`, `spec_font_size` & `spec_angle`. These functions can rescale continuous variables to certain scales. For example, function `spec_color` would map a continuous variable to any [viridis color palettes](https://CRAN.R-project.org/package=viridisLite). It offers a very visually impactful representation in a tabular format.
+This package also comes with a few helper functions, including `spec_color`, `spec_font_size` & `spec_angle`. These functions can rescale continuous variables to certain scales. For example, function `spec_color` would map a continuous variable to any [viridis color palettes](https://CRAN.R-project.org/package=viridisLite). It offers a very visually impressive representation in a tabular format.
```{r}
iris[1:10, ] %>%
@@ -296,12 +325,6 @@
</script>
```
-<script>
-$(document).ready(function(){
- $('[data-toggle="popover"]').popover();
-});
-</script>
-
```{r}
popover_dt <- data.frame(
position = c("top", "bottom", "right", "left"),
diff --git a/docs/awesome_table_in_html.html b/docs/awesome_table_in_html.html
index 9c39a08..28f5862 100644
--- a/docs/awesome_table_in_html.html
+++ b/docs/awesome_table_in_html.html
@@ -11,7 +11,7 @@
<meta name="author" content="Hao Zhu" />
-<meta name="date" content="2020-08-11" />
+<meta name="date" content="2020-08-18" />
<title>Create Awesome HTML Table with knitr::kable and kableExtra</title>
@@ -1324,6 +1324,14 @@
width: 100%;
margin-bottom: 10px;
}
+.lightable-minimal td {
+margin-left: 5px;
+margin-right: 5px;
+}
+.lightable-minimal th {
+margin-left: 5px;
+margin-right: 5px;
+}
.lightable-minimal thead tr th {
border-bottom: 2px solid black;
empty-cells: hide;
@@ -1343,11 +1351,19 @@
width: 100%;
margin-bottom: 10px;
}
+.lightable-classic td {
+padding-left: 5px;
+padding-right: 5px;
+}
+.lightable-classic th {
+padding-left: 5px;
+padding-right: 5px;
+}
.lightable-classic thead tr:last-child th {
border-bottom: 1px solid #111111;
}
.lightable-classic.lightable-hover tbody tr:hover {
-background-color: #f5f5f5;
+background-color: #F9EEC1;
}
.lightable-classic.lightable-striped tr:nth-child(even) {
background-color: #f5f5f5;
@@ -1358,11 +1374,19 @@
width: 100%;
margin-bottom: 10px;
}
+.lightable-classic-2 td {
+padding-left: 5px;
+padding-right: 5px;
+}
+.lightable-classic-2 th {
+padding-left: 5px;
+padding-right: 5px;
+}
.lightable-classic-2 thead tr:last-child th {
border-bottom: 1px solid #111111;
}
.lightable-classic-2.lightable-hover tbody tr:hover {
-background-color: #f5f5f5;
+background-color: #F9EEC1;
}
.lightable-classic-2.lightable-striped tr:nth-child(even) {
background-color: #f5f5f5;
@@ -1434,6 +1458,32 @@
.lightable-material-dark.lightable-striped thead tr:last-child th {
border-bottom: 1px solid #FFFFFF12;
}
+.lightable-paper {
+width: 100%;
+margin-bottom: 10px;
+}
+.lightable-paper th {
+color: #999;
+vertical-align: bottom;
+border-bottom: 1px solid #00000020;
+line-height: 1.15em;
+padding: 10px 5px;
+}
+.lightable-paper td {
+vertical-align: middle;
+border-bottom: 1px solid #00000010;
+line-height: 1.15em;
+padding: 7px 5px;
+}
+.lightable-paper.lightable-hover tbody tr:hover {
+background-color: #F9EEC1;
+}
+.lightable-paper.lightable-striped tr:nth-child(even) {
+background-color: #00000008;
+}
+.lightable-material-dark.lightable-striped td {
+border: 0;
+}
</style>
<style type="text/css">code{white-space: pre;}</style>
@@ -1664,11 +1714,16 @@
<h1 class="title toc-ignore">Create Awesome HTML Table with knitr::kable and kableExtra</h1>
<h4 class="author">Hao Zhu</h4>
-<h4 class="date">2020-08-11</h4>
+<h4 class="date">2020-08-18</h4>
</div>
+<script>
+$(document).ready(function(){
+ $('[data-toggle="popover"]').popover();
+});
+</script>
<p><img src="data:image/png;base64,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" align="right" alt="logo" width="80" height="93" style="border: none; float: right;"></p>
<blockquote>
<p>Please see the package <a href="http://haozhu233.github.io/kableExtra/">documentation site</a> for how to use this package in LaTeX.</p>
@@ -1691,8 +1746,13 @@
<h1>Getting Started</h1>
<p>Here we are using the first few columns and rows from dataset <code>mtcars</code></p>
<pre class="r"><code>library(knitr)
-library(kableExtra)
-dt <- mtcars[1:5, 1:6]</code></pre>
+library(kableExtra)</code></pre>
+<pre><code>##
+## Attaching package: 'kableExtra'</code></pre>
+<pre><code>## The following object is masked from 'package:knitr':
+##
+## kable</code></pre>
+<pre class="r"><code>dt <- mtcars[1:5, 1:6]</code></pre>
<p>When you are using <code>kable()</code>, if you don’t specify <code>format</code>, by default it will generate a markdown table and let pandoc handle the conversion from markdown to HTML/PDF. This is the most favorable approach to render most simple tables as it is format independent. If you switch from HTML to pdf, you basically don’t need to change anything in your code. However, markdown doesn’t support complex table. For example, if you want to have a double-row header table, markdown just cannot provide you the functionality you need. As a result, when you have such a need, you should <strong>define <code>format</code> in <code>kable()</code></strong> as either “html” or “latex”. <em>You can also define a global option at the beginning using <code>options(knitr.table.format = "html")</code> so you don’t repeat the step everytime.</em></p>
<p><strong>Starting from <code>kableExtra</code> 0.9.0</strong>, when you load this package (<code>library(kableExtra)</code>), <span style=" font-weight: bold; color: white !important;border-radius: 4px; padding-right: 4px; padding-left: 4px; background-color: #d9230f !important;">it will automatically set up the global option ‘knitr.table.format’ based on your current environment</span>. Unless you are rendering a PDF, <code>kableExtra</code> will try to render a HTML table for you. <strong>You no longer need to manually set either the global option or the <code>format</code> option in each <code>kable()</code> function</strong>. I’m still including the explanation above here in this vignette so you can understand what is going on behind the scene. Note that this is only an global option. You can manually set any format in <code>kable()</code> whenever you want. I just hope you can enjoy a peace of mind in most of your time.</p>
<p>You can disable this behavior by setting <code>options(kableExtra.auto_format = FALSE)</code> before you load <code>kableExtra</code>.</p>
@@ -1999,11 +2059,157 @@
</div>
<div id="alternative-themes" class="section level2">
<h2>Alternative themes</h2>
-<p><code>kableExtra</code> also offers a few in-house alternative HTML table themes other than the default bootstrap theme. Right now there are 5 of them: <code>kable_classic</code>, <code>kable_classic_2</code>, <code>kable_minimal</code>, <code>kable_material</code> and <code>kable_material_dark</code>. These functions are alternatives to <code>kable_styling</code>, which means that you can specify any additional formatting options in <code>kable_styling</code> in these functions too. The only difference is that <code>bootstrap_options</code> (as discussed in the next section) is replaced with <code>lightable_options</code> at the same location with only two choices <code>striped</code> and <code>hover</code> available.</p>
+<p><code>kableExtra</code> also offers a few in-house alternative HTML table themes other than the default bootstrap theme. Right now there are 6 of them: <code>kable_paper</code>, <code>kable_classic</code>, <code>kable_classic_2</code>, <code>kable_minimal</code>, <code>kable_material</code> and <code>kable_material_dark</code>. These functions are alternatives to <code>kable_styling</code>, which means that you can specify any additional formatting options in <code>kable_styling</code> in these functions too. The only difference is that <code>bootstrap_options</code> (as discussed in the next section) is replaced with <code>lightable_options</code> at the same location with only two choices <code>striped</code> and <code>hover</code> available.</p>
+<pre class="r"><code>dt %>%
+ kable() %>%
+ kable_paper("hover")</code></pre>
+<table class=" lightable-paper lightable-hover" style="font-family: "Arial Narrow", arial, helvetica, sans-serif; margin-left: auto; margin-right: auto;">
+<thead>
+<tr>
+<th style="text-align:left;">
+</th>
+<th style="text-align:right;">
+mpg
+</th>
+<th style="text-align:right;">
+cyl
+</th>
+<th style="text-align:right;">
+disp
+</th>
+<th style="text-align:right;">
+hp
+</th>
+<th style="text-align:right;">
+drat
+</th>
+<th style="text-align:right;">
+wt
+</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td style="text-align:left;">
+Mazda RX4
+</td>
+<td style="text-align:right;">
+21.0
+</td>
+<td style="text-align:right;">
+6
+</td>
+<td style="text-align:right;">
+160
+</td>
+<td style="text-align:right;">
+110
+</td>
+<td style="text-align:right;">
+3.90
+</td>
+<td style="text-align:right;">
+2.620
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Mazda RX4 Wag
+</td>
+<td style="text-align:right;">
+21.0
+</td>
+<td style="text-align:right;">
+6
+</td>
+<td style="text-align:right;">
+160
+</td>
+<td style="text-align:right;">
+110
+</td>
+<td style="text-align:right;">
+3.90
+</td>
+<td style="text-align:right;">
+2.875
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Datsun 710
+</td>
+<td style="text-align:right;">
+22.8
+</td>
+<td style="text-align:right;">
+4
+</td>
+<td style="text-align:right;">
+108
+</td>
+<td style="text-align:right;">
+93
+</td>
+<td style="text-align:right;">
+3.85
+</td>
+<td style="text-align:right;">
+2.320
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Hornet 4 Drive
+</td>
+<td style="text-align:right;">
+21.4
+</td>
+<td style="text-align:right;">
+6
+</td>
+<td style="text-align:right;">
+258
+</td>
+<td style="text-align:right;">
+110
+</td>
+<td style="text-align:right;">
+3.08
+</td>
+<td style="text-align:right;">
+3.215
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Hornet Sportabout
+</td>
+<td style="text-align:right;">
+18.7
+</td>
+<td style="text-align:right;">
+8
+</td>
+<td style="text-align:right;">
+360
+</td>
+<td style="text-align:right;">
+175
+</td>
+<td style="text-align:right;">
+3.15
+</td>
+<td style="text-align:right;">
+3.440
+</td>
+</tr>
+</tbody>
+</table>
<pre class="r"><code>dt %>%
kable() %>%
kable_classic()</code></pre>
-<table class=" lightable-classic" style="margin-left: auto; margin-right: auto;">
+<table class=" lightable-classic" style="font-family: "Arial Narrow", "Source Sans Pro", sans-serif; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
@@ -2149,7 +2355,7 @@
<pre class="r"><code>dt %>%
kable() %>%
kable_classic_2()</code></pre>
-<table class=" lightable-classic-2" style="margin-left: auto; margin-right: auto;">
+<table class=" lightable-classic-2" style="font-family: "Arial Narrow", "Source Sans Pro", sans-serif; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
@@ -2295,7 +2501,7 @@
<pre class="r"><code>dt %>%
kable() %>%
kable_minimal()</code></pre>
-<table class=" lightable-minimal" style="margin-left: auto; margin-right: auto;">
+<table class=" lightable-minimal" style="font-family: calibri, cambria, "Source Sans Pro", sans-serif; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
@@ -2441,7 +2647,7 @@
<pre class="r"><code>dt %>%
kable() %>%
kable_material(c("striped", "hover"))</code></pre>
-<table class=" lightable-material lightable-striped lightable-hover" style="margin-left: auto; margin-right: auto;">
+<table class=" lightable-material lightable-striped lightable-hover" style="font-family: "Source Sans Pro", helvetica, sans-serif; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
@@ -2587,7 +2793,7 @@
<pre class="r"><code>dt %>%
kable() %>%
kable_material_dark()</code></pre>
-<table class=" lightable-material-dark" style="margin-left: auto; margin-right: auto;">
+<table class=" lightable-material-dark" style="font-family: "Source Sans Pro", helvetica, sans-serif; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
@@ -3181,8 +3387,8 @@
<h2>Full width?</h2>
<p>By default, a bootstrap table takes 100% of the width. It is supposed to use together with its grid system to scale the table properly. However, when you are writing a rmarkdown document, you probably don’t want to write your own css/or grid. For some small tables with only few columns, a page wide table looks awful. To make it easier, you can specify whether you want the table to have <code>full_width</code> or not in <code>kable_styling</code>. By default, <code>full_width</code> is set to be <code>TRUE</code> for HTML tables (note that for LaTeX, the default is <code>FALSE</code> since I don’t want to change the “common” looks unless you specified it.)</p>
<pre class="r"><code>kable(dt) %>%
- kable_styling(bootstrap_options = "striped", full_width = F)</code></pre>
-<table class="table table-striped" style="width: auto !important; margin-left: auto; margin-right: auto;">
+ kable_paper(bootstrap_options = "striped", full_width = F)</code></pre>
+<table class=" lightable-paper" style="font-family: "Arial Narrow", arial, helvetica, sans-serif; width: auto !important; margin-left: auto; margin-right: auto;">
<thead>
<tr>
<th style="text-align:left;">
@@ -4060,10 +4266,288 @@
</tr>
</tbody>
</table>
+<blockquote>
+<p><strong>Key Update</strong>: I understand the need of doing conditional formatting and the previous solution <code>cell_spec</code> is relatively hard to use. Therefore in kableExtra 1.2, I improved the functionality of <code>column_spec</code> so it can take vectorized input for most of its arguments (except <code>width</code>, <code>border_left</code> and <code>border_right</code>). It is really easy right now to format a column based on other values.</p>
+</blockquote>
+<pre class="r"><code>mtcars[1:8, 1:8] %>%
+ kable() %>%
+ kable_paper(full_width = F) %>%
+ column_spec(2, color = spec_color(mtcars$mpg[1:8]),
+ link = "https://haozhu233.github.io/kableExtra") %>%
+ column_spec(6, color = "white",
+ background = spec_color(mtcars$drat[1:8], end = 0.7),
+ popover = paste("am:", mtcars$am[1:8]))</code></pre>
+<table class=" lightable-paper" style="font-family: "Arial Narrow", arial, helvetica, sans-serif; width: auto !important; margin-left: auto; margin-right: auto;">
+<thead>
+<tr>
+<th style="text-align:left;">
+</th>
+<th style="text-align:right;">
+mpg
+</th>
+<th style="text-align:right;">
+cyl
+</th>
+<th style="text-align:right;">
+disp
+</th>
+<th style="text-align:right;">
+hp
+</th>
+<th style="text-align:right;">
+drat
+</th>
+<th style="text-align:right;">
+wt
+</th>
+<th style="text-align:right;">
+qsec
+</th>
+<th style="text-align:right;">
+vs
+</th>
+</tr>
+</thead>
+<tbody>
+<tr>
+<td style="text-align:left;">
+Mazda RX4
+</td>
+<td style="text-align:right;color: rgba(52, 182, 121, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(52, 182, 121, 1) !important;"> 21.0 </a>
+</td>
+<td style="text-align:right;">
+6
+</td>
+<td style="text-align:right;">
+160.0
+</td>
+<td style="text-align:right;">
+110
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(67, 191, 113, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 1">
+3.90
+</td>
+<td style="text-align:right;">
+2.620
+</td>
+<td style="text-align:right;">
+16.46
+</td>
+<td style="text-align:right;">
+0
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Mazda RX4 Wag
+</td>
+<td style="text-align:right;color: rgba(52, 182, 121, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(52, 182, 121, 1) !important;"> 21.0 </a>
+</td>
+<td style="text-align:right;">
+6
+</td>
+<td style="text-align:right;">
+160.0
+</td>
+<td style="text-align:right;">
+110
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(67, 191, 113, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 1">
+3.90
+</td>
+<td style="text-align:right;">
+2.875
+</td>
+<td style="text-align:right;">
+17.02
+</td>
+<td style="text-align:right;">
+0
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Datsun 710
+</td>
+<td style="text-align:right;color: rgba(149, 216, 64, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(149, 216, 64, 1) !important;"> 22.8 </a>
+</td>
+<td style="text-align:right;">
+4
+</td>
+<td style="text-align:right;">
+108.0
+</td>
+<td style="text-align:right;">
+93
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(55, 184, 120, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 1">
+3.85
+</td>
+<td style="text-align:right;">
+2.320
+</td>
+<td style="text-align:right;">
+18.61
+</td>
+<td style="text-align:right;">
+1
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Hornet 4 Drive
+</td>
+<td style="text-align:right;color: rgba(68, 191, 112, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(68, 191, 112, 1) !important;"> 21.4 </a>
+</td>
+<td style="text-align:right;">
+6
+</td>
+<td style="text-align:right;">
+258.0
+</td>
+<td style="text-align:right;">
+110
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(65, 67, 135, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 0">
+3.08
+</td>
+<td style="text-align:right;">
+3.215
+</td>
+<td style="text-align:right;">
+19.44
+</td>
+<td style="text-align:right;">
+1
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Hornet Sportabout
+</td>
+<td style="text-align:right;color: rgba(38, 129, 142, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(38, 129, 142, 1) !important;"> 18.7 </a>
+</td>
+<td style="text-align:right;">
+8
+</td>
+<td style="text-align:right;">
+360.0
+</td>
+<td style="text-align:right;">
+175
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(60, 79, 138, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 0">
+3.15
+</td>
+<td style="text-align:right;">
+3.440
+</td>
+<td style="text-align:right;">
+17.02
+</td>
+<td style="text-align:right;">
+0
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Valiant
+</td>
+<td style="text-align:right;color: rgba(44, 114, 142, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(44, 114, 142, 1) !important;"> 18.1 </a>
+</td>
+<td style="text-align:right;">
+6
+</td>
+<td style="text-align:right;">
+225.0
+</td>
+<td style="text-align:right;">
+105
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(68, 1, 84, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 0">
+2.76
+</td>
+<td style="text-align:right;">
+3.460
+</td>
+<td style="text-align:right;">
+20.22
+</td>
+<td style="text-align:right;">
+1
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Duster 360
+</td>
+<td style="text-align:right;color: rgba(68, 1, 84, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(68, 1, 84, 1) !important;"> 14.3 </a>
+</td>
+<td style="text-align:right;">
+8
+</td>
+<td style="text-align:right;">
+360.0
+</td>
+<td style="text-align:right;">
+245
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(55, 90, 140, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 0">
+3.21
+</td>
+<td style="text-align:right;">
+3.570
+</td>
+<td style="text-align:right;">
+15.84
+</td>
+<td style="text-align:right;">
+0
+</td>
+</tr>
+<tr>
+<td style="text-align:left;">
+Merc 240D
+</td>
+<td style="text-align:right;color: rgba(253, 231, 37, 1) !important;">
+<a href="https://haozhu233.github.io/kableExtra" style="color: rgba(253, 231, 37, 1) !important;"> 24.4 </a>
+</td>
+<td style="text-align:right;">
+4
+</td>
+<td style="text-align:right;">
+146.7
+</td>
+<td style="text-align:right;">
+62
+</td>
+<td style="text-align:right;color: white !important;background-color: rgba(31, 161, 135, 1) !important;" data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="am: 0">
+3.69
+</td>
+<td style="text-align:right;">
+3.190
+</td>
+<td style="text-align:right;">
+20.00
+</td>
+<td style="text-align:right;">
+1
+</td>
+</tr>
+</tbody>
+</table>
+<p>You can still use the <code>spec_***</code> helper functions to help you define color. See the documentation <a href="#visualize-data-with-viridis-color">below</a>.</p>
</div>
<div id="row-spec" class="section level2">
<h2>Row spec</h2>
-<p>Similar with <code>column_spec</code>, you can define specifications for rows. Currently, you can either bold or italiciz an entire row. Note that, similar with other row-related functions in <code>kableExtra</code>, for the position of the target row, you don’t need to count in header rows or the group labelling rows.</p>
+<p>Similar with <code>column_spec</code>, you can define specifications for rows. Currently, you can either bold or italicize an entire row. Note that, similar with other row-related functions in <code>kableExtra</code>, for the position of the target row, you don’t need to count in header rows or the group labeling rows.</p>
<pre class="r"><code>kable(dt) %>%
kable_styling("striped", full_width = F) %>%
column_spec(5:7, bold = T) %>%
@@ -4365,6 +4849,9 @@
</div>
<div id="celltext-specification" class="section level1">
<h1>Cell/Text Specification</h1>
+<blockquote>
+<p><strong>Key Update: As said before, if you are using kableExtra 1.2+, you are now recommended to used <code>column_spec</code> to do conditional formatting</strong>.</p>
+</blockquote>
<p>Function <code>cell_spec</code> is introduced in version 0.6.0 of <code>kableExtra</code>. Unlike <code>column_spec</code> and <code>row_spec</code>, <strong>this function is designed to be used before the data.frame gets into the <code>kable</code> function</strong>. Comparing with figuring out a list of 2 dimentional index for targeted cells, this design is way easier to learn and use and it fits perfectly well with <code>dplyr</code>’s <code>mutate</code> and <code>summarize</code> functions. With this design, there are two things to be noted: * Since <code>cell_spec</code> generates raw <code>HTML</code> or <code>LaTeX</code> code, make sure you remember to put <code>escape = FALSE</code> in <code>kable</code>. At the same time, you have to escape special symbols including <code>%</code> manually by yourself * <code>cell_spec</code> needs a way to know whether you want <code>html</code> or <code>latex</code>. You can specify it locally in function or globally via the <code>options(knitr.table.format = "latex")</code> method as suggested at the beginning. If you don’t provide anything, this function will output as HTML by default.</p>
<p>Currently, <code>cell_spec</code> supports features including bold, italic, monospace, text color, background color, align, font size & rotation angle. More features may be added in the future. Please see function documentations as reference.</p>
<div id="conditional-logic" class="section level2">
@@ -4512,7 +4999,7 @@
</div>
<div id="visualize-data-with-viridis-color" class="section level2">
<h2>Visualize data with Viridis Color</h2>
-<p>This package also comes with a few helper functions, including <code>spec_color</code>, <code>spec_font_size</code> & <code>spec_angle</code>. These functions can rescale continuous variables to certain scales. For example, function <code>spec_color</code> would map a continuous variable to any <a href="https://CRAN.R-project.org/package=viridisLite">viridis color palettes</a>. It offers a very visually impactful representation in a tabular format.</p>
+<p>This package also comes with a few helper functions, including <code>spec_color</code>, <code>spec_font_size</code> & <code>spec_angle</code>. These functions can rescale continuous variables to certain scales. For example, function <code>spec_color</code> would map a continuous variable to any <a href="https://CRAN.R-project.org/package=viridisLite">viridis color palettes</a>. It offers a very visually impressive representation in a tabular format.</p>
<pre class="r"><code>iris[1:10, ] %>%
mutate_if(is.numeric, function(x) {
cell_spec(x, bold = T,
@@ -4739,7 +5226,7 @@
</div>
<div id="tooltip" class="section level2">
<h2>Tooltip</h2>
-<p>It’s very easy to add a tooltip to text via <code>cell_spec</code>. For example, <code>text_spec("tooltip", color = "red", tooltip = "Hello World")</code> will give you something like <span style=" color: red !important;" data-toggle="tooltip" data-placement="right" title="Hello World">Hover over me</span> (you need to wait for a few seconds before your browser renders it).</p>
+<p>It’s very easy to add a tooltip to text via <code>cell_spec</code>. For example, <code>text_spec("tooltip", color = "red", tooltip = "Hello World")</code> will give you something like <span style=" color: red !important;" data-toggle="tooltip" data-container="body" data-placement="right" title="Hello World">Hover over me</span> (you need to wait for a few seconds before your browser renders it).</p>
<p>Note that the original browser-based tooltip is slow. If you want to have a faster response, you may want to initialize bootstrap’s tooltip by putting the following HTML code on the page.</p>
<pre><code><script>
$(document).ready(function(){
@@ -4756,11 +5243,6 @@
$('[data-toggle="popover"]').popover();
});
</script></code></pre>
-<script>
-$(document).ready(function(){
- $('[data-toggle="popover"]').popover();
-});
-</script>
<pre class="r"><code>popover_dt <- data.frame(
position = c("top", "bottom", "right", "left"),
stringsAsFactors = FALSE
@@ -4791,7 +5273,7 @@
top
</td>
<td style="text-align:left;">
-<span style=" " data-toggle="popover" data-trigger="hover" data-placement="top" data-content="top">Message on top</span>
+<span style=" " data-toggle="popover" data-container="body" data-trigger="hover" data-placement="top" data-content="top">Message on top</span>
</td>
</tr>
<tr>
@@ -4799,7 +5281,7 @@
bottom
</td>
<td style="text-align:left;">
-<span style=" " data-toggle="popover" data-trigger="hover" data-placement="bottom" data-content="bottom">Message on bottom</span>
+<span style=" " data-toggle="popover" data-container="body" data-trigger="hover" data-placement="bottom" data-content="bottom">Message on bottom</span>
</td>
</tr>
<tr>
@@ -4807,7 +5289,7 @@
right
</td>
<td style="text-align:left;">
-<span style=" " data-toggle="popover" data-trigger="hover" data-placement="right" data-content="right">Message on right</span>
+<span style=" " data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="right">Message on right</span>
</td>
</tr>
<tr>
@@ -4815,7 +5297,7 @@
left
</td>
<td style="text-align:left;">
-<span style=" " data-toggle="popover" data-trigger="hover" data-placement="left" data-content="left">Message on left</span>
+<span style=" " data-toggle="popover" data-container="body" data-trigger="hover" data-placement="left" data-content="left">Message on left</span>
</td>
</tr>
</tbody>
@@ -4823,7 +5305,7 @@
</div>
<div id="links" class="section level2">
<h2>Links</h2>
-<p>You can add links to text via <code>text_spec("Google", link = "https://google.com")</code>: <a href="https://google.com" style=" ">Google</a>. If you want your hover message to be more obvious, it might be a good idea to put a <code>#</code> (go back to the top of the page) or <code>javascript:void(0)</code> (literally do nothing) in the <code>link</code> option. <code>text_spec("Hover on me", link = "javascript:void(0)", popover = "Hello")</code>: <a href="javascript:void(0)" style=" " data-toggle="popover" data-trigger="hover" data-placement="right" data-content="Hello">Hover on me</a></p>
+<p>You can add links to text via <code>text_spec("Google", link = "https://google.com")</code>: <a href="https://google.com" style=" ">Google</a>. If you want your hover message to be more obvious, it might be a good idea to put a <code>#</code> (go back to the top of the page) or <code>javascript:void(0)</code> (literally do nothing) in the <code>link</code> option. <code>text_spec("Hover on me", link = "javascript:void(0)", popover = "Hello")</code>: <a href="javascript:void(0)" style=" " data-toggle="popover" data-container="body" data-trigger="hover" data-placement="right" data-content="Hello">Hover on me</a></p>
</div>
<div id="integration-with-formattable" class="section level2">
<h2>Integration with <code>formattable</code></h2>
@@ -5977,7 +6459,7 @@
2
</td>
<td style="text-align:center;">
-0
+1
</td>
</tr>
<tr>
@@ -5993,7 +6475,7 @@
4
</td>
<td style="text-align:center;">
-0
+1
</td>
</tr>
<tr>
@@ -6028,7 +6510,7 @@
8
</td>
<td style="text-align:center;">
-1
+0
</td>
</tr>
<tr>
@@ -6036,7 +6518,7 @@
9
</td>
<td style="text-align:center;">
-1
+0
</td>
</tr>
<tr>
@@ -6044,7 +6526,7 @@
10
</td>
<td style="text-align:center;">
-0
+1
</td>
</tr>
<tr>
@@ -6058,7 +6540,7 @@
11
</td>
<td style="text-align:center;">
-0
+1
</td>
</tr>
<tr>
@@ -6077,7 +6559,7 @@
13
</td>
<td style="text-align:center;">
-0
+1
</td>
</tr>
<tr>
@@ -6085,7 +6567,7 @@
14
</td>
<td style="text-align:center;">
-0
+1
</td>
</tr>
<tr>
@@ -6478,10 +6960,12 @@
<p>If you need to add footnote marks in table, you need to do it manually (no fancy) using <code>footnote_mark_***()</code>. Remember that similar with <code>cell_spec</code>, you need to tell this function whether you want it to do it in <code>HTML</code> (default) or <code>LaTeX</code>. You can set it for all using the <code>knitr.table.format</code> global option. ALso, if you have ever use <code>footnote_mark_***()</code>, you need to put <code>escape = F</code> in your <code>kable</code> function to avoid escaping of special characters.</p>
<pre class="r"><code>dt_footnote <- dt
names(dt_footnote)[2] <- paste0(names(dt_footnote)[2],
- footnote_marker_symbol(1))
-row.names(dt_footnote)[4] <- paste0(row.names(dt_footnote)[4],
- footnote_marker_alphabet(1))
-kable(dt_footnote, align = "c",
+ footnote_marker_symbol(1))</code></pre>
+<pre><code>## Setting footnote_marker_symbol format as html</code></pre>
+<pre class="r"><code>row.names(dt_footnote)[4] <- paste0(row.names(dt_footnote)[4],
+ footnote_marker_alphabet(1))</code></pre>
+<pre><code>## Setting footnote_marker_alphabet format as html</code></pre>
+<pre class="r"><code>kable(dt_footnote, align = "c",
# Remember this escape = F
escape = F) %>%
kable_styling(full_width = F) %>%
diff --git a/docs/awesome_table_in_pdf.Rmd b/docs/awesome_table_in_pdf.Rmd
index ef3a126..7959839 100644
--- a/docs/awesome_table_in_pdf.Rmd
+++ b/docs/awesome_table_in_pdf.Rmd
@@ -54,7 +54,6 @@
```
```{r}
-library(knitr)
library(kableExtra)
dt <- mtcars[1:5, 1:6]
```
@@ -220,6 +219,26 @@
column_spec(2, width = "30em")
```
+
+> **Key Update**: I understand the need of doing conditional formatting and the previous solution `cell_spec` is relatively hard to use. Therefore in kableExtra 1.2, I improved the functionality of `column_spec` so it can take vectorized input for most of its arguments (except `width`, `border_left` and `border_right`). It is really easy right now to format a column based on other values.
+
+```{r}
+that_cell <- c(rep(F, 7), T)
+mtcars[1:8, 1:8] %>%
+ kable(booktabs = T, linesep = "") %>%
+ kable_paper(full_width = F) %>%
+ column_spec(2, color = spec_color(mtcars$mpg[1:8]),
+ link = "https://haozhu233.github.io/kableExtra") %>%
+ column_spec(6, color = "white",
+ background = spec_color(mtcars$drat[1:8], end = 0.7),
+ popover = paste("am:", mtcars$am[1:8])) %>%
+ column_spec(9, strikeout = that_cell, bold = that_cell,
+ color = c(rep("black", 7), "red"))
+```
+
+You can still use the `spec_***` helper functions to help you define color. See the documentation [below](#visualize-data-with-viridis-color).
+
+
## Row spec
Similar with `column_spec`, you can define specifications for rows. Currently, you can either bold or italicize an entire row. Note that, similar to other row-related functions in `kableExtra`, for the position of the target row, you don't need to count in header rows or the group labeling rows.
@@ -242,6 +261,9 @@
# Cell/Text Specification
+
+>**Key Update: As said before, if you are using kableExtra 1.2+, you are now recommended to used `column_spec` to do conditional formatting**.
+
Function `cell_spec` is introduced in version 0.6.0 of `kableExtra`. Unlike `column_spec` and `row_spec`, **this function is designed to be used before the data.frame gets into the `kable` function**. Comparing with figuring out a list of 2 dimensional indexes for targeted cells, this design is way easier to learn and use, and it fits perfectly well with `dplyr`'s `mutate` and `summarize` functions. With this design, there are two things to be noted:
* Since `cell_spec` generates raw `HTML` or `LaTeX` code, make sure you remember to put `escape = FALSE` in `kable`. At the same time, you have to escape special symbols including `%` manually by yourself
* `cell_spec` needs a way to know whether you want `html` or `latex`. You can specify it locally in function or globally via the `options(knitr.table.format = "latex")` method as suggested at the beginning. If you don't provide anything, this function will output as HTML by default.
diff --git a/docs/awesome_table_in_pdf.pdf b/docs/awesome_table_in_pdf.pdf
index 196968e..10b350d 100644
--- a/docs/awesome_table_in_pdf.pdf
+++ b/docs/awesome_table_in_pdf.pdf
Binary files differ
diff --git a/docs/awesome_table_in_pdf.toc b/docs/awesome_table_in_pdf.toc
index a985c6b..984d331 100644
--- a/docs/awesome_table_in_pdf.toc
+++ b/docs/awesome_table_in_pdf.toc
@@ -3,7 +3,7 @@
\contentsline {section}{Getting Started}{2}{section*.4}%
\contentsline {subsection}{LaTeX packages used in this package}{3}{section*.5}%
\contentsline {subsection}{Plain LaTeX}{3}{section*.6}%
-\contentsline {subsection}{LaTeX table with booktabs}{3}{section*.7}%
+\contentsline {subsection}{LaTeX table with booktabs}{4}{section*.7}%
\contentsline {section}{Table Styles}{4}{section*.8}%
\contentsline {subsection}{LaTeX options}{4}{section*.9}%
\contentsline {subsubsection}{Striped}{4}{section*.10}%
@@ -16,21 +16,21 @@
\contentsline {section}{Column / Row Specification}{9}{section*.17}%
\contentsline {subsection}{Column spec}{9}{section*.18}%
\contentsline {subsection}{Row spec}{10}{section*.19}%
-\contentsline {subsection}{Header Rows}{10}{section*.20}%
-\contentsline {section}{Cell/Text Specification}{10}{section*.21}%
+\contentsline {subsection}{Header Rows}{11}{section*.20}%
+\contentsline {section}{Cell/Text Specification}{11}{section*.21}%
\contentsline {subsection}{Conditional logic}{11}{section*.22}%
-\contentsline {subsection}{Visualize data with Viridis Color}{11}{section*.23}%
-\contentsline {subsection}{Text Specification}{12}{section*.24}%
-\contentsline {section}{Grouped Columns / Rows}{12}{section*.25}%
-\contentsline {subsection}{Add header rows to group columns}{12}{section*.26}%
-\contentsline {subsection}{Group rows via labeling}{13}{section*.27}%
+\contentsline {subsection}{Visualize data with Viridis Color}{12}{section*.23}%
+\contentsline {subsection}{Text Specification}{13}{section*.24}%
+\contentsline {section}{Grouped Columns / Rows}{13}{section*.25}%
+\contentsline {subsection}{Add header rows to group columns}{13}{section*.26}%
+\contentsline {subsection}{Group rows via labeling}{14}{section*.27}%
\contentsline {subsection}{Row indentation}{15}{section*.28}%
-\contentsline {subsection}{Group rows via multi-row cell}{15}{section*.29}%
-\contentsline {section}{Table Footnote}{18}{section*.30}%
-\contentsline {section}{LaTeX Only Features}{20}{section*.31}%
-\contentsline {subsection}{Linebreak processor}{20}{section*.32}%
-\contentsline {subsection}{Table on a Landscape Page}{21}{section*.33}%
-\contentsline {subsection}{Use LaTeX table in HTML or Word}{23}{section*.34}%
-\contentsline {section}{From other packages}{23}{section*.35}%
-\contentsline {subsection}{\texttt {tables}}{23}{section*.36}%
-\contentsline {subsection}{\texttt {xtable}}{23}{section*.37}%
+\contentsline {subsection}{Group rows via multi-row cell}{16}{section*.29}%
+\contentsline {section}{Table Footnote}{19}{section*.30}%
+\contentsline {section}{LaTeX Only Features}{22}{section*.31}%
+\contentsline {subsection}{Linebreak processor}{22}{section*.32}%
+\contentsline {subsection}{Table on a Landscape Page}{22}{section*.33}%
+\contentsline {subsection}{Use LaTeX table in HTML or Word}{24}{section*.34}%
+\contentsline {section}{From other packages}{24}{section*.35}%
+\contentsline {subsection}{\texttt {tables}}{24}{section*.36}%
+\contentsline {subsection}{\texttt {xtable}}{24}{section*.37}%
diff --git a/inst/NEWS.md b/inst/NEWS.md
index 9b48ed4..3818d58 100644
--- a/inst/NEWS.md
+++ b/inst/NEWS.md
@@ -1,6 +1,19 @@
kableExtra 1.2.0
--------------------------------------------------------------------------------
+# Major Change
+
+* Added a `kable` function as a wrapper of the original `kable` but provides better documentation and auto-complete. We also moved the automatic format
+setup piece into the `kable` function call instead of changing global option
+during package start-up.
+
+* Added a few alternative HTML table themes. See https://haozhu233.github.io/kableExtra/awesome_table_in_html.html#Alternative_themes. (#451)
+
+* `column_spec` now takes vectorized input so it's easier to do conditional
+formatting without using `cell_spec`
+
+# Minor Change
+
* `add_indent` has a new option `level_of_indent` to control the width of the
indentation. (thanks @samiaab1990 #479)
@@ -12,33 +25,36 @@
* `collapse_rows` has a new option `target` to choose the target column in
`collapse_rows` (#484)
-* Fixed a bug with `group_rows` when used with `repeat_header` on the last row
-(#476)
-
-* Added mathjax to preview (#473)
-
-* Fixed a bug with `repeat_header` when the header row is customized (#480)
-
-* Fixed a bug with `collapse_rows` when text is too long. (#464)
+* Added mathjax to HTML preview (#473)
* Added a new function `remove_column` for html. The latex part hasn't been
implemented yet. (#490, thanks @DanChaltiel)
-* `add_header_above` now can take a data.frame as input. (#440, thanks @jokorn)
-
-* Fixed a bug when using UTF-8 on non-UTF-8 system. (#440, thanks @jokorn)
-
* Added a global option to control whether to preview HTML tables in RStudio
viewer. If you want to disable the default behavior, try to set
`options(kableExtra_view_html = F)`. (#455)
-* Added a few alternative HTML table themes. See https://haozhu233.github.io/kableExtra/awesome_table_in_html.html#Alternative_themes. (#451)
-
* Added a `new_tab` option to `cell_spec` to control whether to open up links
in new tab. (#454)
* Improved the behavior of `scroll_box` so it will skip non-html tables. (#450)
+* Added a `html_font` option to `kable_styling` and its variants.
+
+
+# Bug Fix
+
+* Fixed a bug with `group_rows` when used with `repeat_header` on the last row
+(#476)
+
+* Fixed a bug with `repeat_header` when the header row is customized (#480)
+
+* Fixed a bug with `collapse_rows` when text is too long. (#464)
+
+* `add_header_above` now can take a data.frame as input. (#440, thanks @jokorn)
+
+* Fixed a bug when using UTF-8 on non-UTF-8 system. (#440, thanks @jokorn)
+
* Fixed a bug in `collapse_rows` when there is no column names (#459)
* Fixed a bug for `add_header_rows` when there isn't thead in HTML (#246, #423,
@@ -48,6 +64,10 @@
#422, thanks @kbrevoort)
+
+
+
+
kableExtra 1.1.0
--------------------------------------------------------------------------------
diff --git a/inst/lightable-0.0.1/lightable.css b/inst/lightable-0.0.1/lightable.css
index d18f18c..ae1fb53 100644
--- a/inst/lightable-0.0.1/lightable.css
+++ b/inst/lightable-0.0.1/lightable.css
@@ -11,9 +11,20 @@
margin-bottom: 10px;
}
+.lightable-minimal td {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+.lightable-minimal th {
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
.lightable-minimal thead tr th {
border-bottom: 2px solid black;
empty-cells: hide;
+
}
.lightable-minimal tbody tr:first-child td {
@@ -35,12 +46,22 @@
margin-bottom: 10px;
}
+.lightable-classic td {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.lightable-classic th {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
.lightable-classic thead tr:last-child th {
border-bottom: 1px solid #111111;
}
.lightable-classic.lightable-hover tbody tr:hover {
- background-color: #f5f5f5;
+ background-color: #F9EEC1;
}
.lightable-classic.lightable-striped tr:nth-child(even) {
@@ -54,12 +75,22 @@
margin-bottom: 10px;
}
+.lightable-classic-2 td {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+.lightable-classic-2 th {
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
.lightable-classic-2 thead tr:last-child th {
border-bottom: 1px solid #111111;
}
.lightable-classic-2.lightable-hover tbody tr:hover {
- background-color: #f5f5f5;
+ background-color: #F9EEC1;
}
.lightable-classic-2.lightable-striped tr:nth-child(even) {
@@ -146,3 +177,35 @@
.lightable-material-dark.lightable-striped thead tr:last-child th {
border-bottom: 1px solid #FFFFFF12;
}
+
+.lightable-paper {
+ width: 100%;
+ margin-bottom: 10px;
+}
+
+.lightable-paper th {
+ color: #999;
+ vertical-align: bottom;
+ border-bottom: 1px solid #00000020;
+ line-height: 1.15em;
+ padding: 10px 5px;
+}
+
+.lightable-paper td {
+ vertical-align: middle;
+ border-bottom: 1px solid #00000010;
+ line-height: 1.15em;
+ padding: 7px 5px;
+}
+
+.lightable-paper.lightable-hover tbody tr:hover {
+ background-color: #F9EEC1;
+}
+
+.lightable-paper.lightable-striped tr:nth-child(even) {
+ background-color: #00000008;
+}
+
+.lightable-material-dark.lightable-striped td {
+ border: 0;
+}
diff --git a/man/column_spec.Rd b/man/column_spec.Rd
index 698c688..aeff8ec 100644
--- a/man/column_spec.Rd
+++ b/man/column_spec.Rd
@@ -22,7 +22,11 @@
extra_css = NULL,
include_thead = FALSE,
latex_column_spec = NULL,
- latex_valign = "p"
+ latex_valign = "p",
+ link = NULL,
+ new_tab = TRUE,
+ tooltip = NULL,
+ popover = NULL
)
}
\arguments{
@@ -33,25 +37,25 @@
\item{width}{A character string telling HTML & LaTeX how wide the column
needs to be, e.g. "10cm", "3in" or "30em".}
-\item{bold}{A T/F value to control whether the text of the selected column
-need to be bolded.}
+\item{bold}{T/F value or vector to control whether the text of the selected
+column need to be bolded.}
-\item{italic}{A T/F value to control whether the text of the selected column
-need to be emphasized.}
+\item{italic}{T/F value or vector to control whether the text of the
+selected column need to be emphasized.}
-\item{monospace}{A T/F value to control whether the text of the selected column
-need to be monospaced (verbatim)}
+\item{monospace}{T/F value or vector to control whether the text of the
+selected column need to be monospaced (verbatim)}
-\item{underline}{A T/F value to control whether the text of the selected row
-need to be underlined}
+\item{underline}{T/F value or vector to control whether the text of the
+selected row need to be underlined}
-\item{strikeout}{A T/F value to control whether the text of the selected row
-need to be stricked out.}
+\item{strikeout}{T/F value or vector to control whether the text of the
+selected row need to be striked out.}
-\item{color}{A character string for column text color. Here please pay
-attention to the differences in color codes between HTML and LaTeX.}
+\item{color}{A character string or vector for column text color. Here please
+pay attention to the differences in color codes between HTML and LaTeX.}
-\item{background}{A character string for column background color. Here please
+\item{background}{A character string or vector for column background color. Here please
pay attention to the differences in color codes between HTML and LaTeX.}
\item{border_left}{A logical variable indicating whether there should be a
@@ -70,8 +74,8 @@
\item{width_max}{Only for HTML table. \code{width_max} defines the maximum width
of table columns.}
-\item{extra_css}{Extra css text to be passed into the cells of the row. Note
-that it's not for the whole column but to each individual cells}
+\item{extra_css}{A vector of extra css text to be passed into the cells of
+the column.}
\item{include_thead}{T/F. A HTML only feature to contoll whether the
header row will be manipulated. Default is \code{FALSE}.}
@@ -81,6 +85,20 @@
\item{latex_valign}{vertical alignment. Only works when you specified column
width. Choose among \code{p}, \code{m}, \code{b}.}
+
+\item{link}{A vector of strings for url links.}
+
+\item{new_tab}{T/F for whether to open up the new link in new tab}
+
+\item{tooltip}{A vector of strings to be displayed as tooltip.
+Obviously, this feature is only available in HTML. Read the package
+vignette to see how to use bootstrap tooltip css to improve the loading
+speed and look.}
+
+\item{popover}{Similar with tooltip but can hold more contents. The best way
+to build a popover is through \code{spec_popover()}. If you only provide a text
+string, it will be used as content. Note that You have to enable this
+bootstrap module manually. Read the package vignette to see how.}
}
\description{
This function allows users to select a column and then specify
diff --git a/man/kable_classic.Rd b/man/kable_classic.Rd
index 4250603..787d44e 100644
--- a/man/kable_classic.Rd
+++ b/man/kable_classic.Rd
@@ -6,17 +6,50 @@
\alias{kable_minimal}
\alias{kable_material}
\alias{kable_material_dark}
+\alias{kable_paper}
\title{Alternative HTML themes}
\usage{
-kable_classic(kable_input, lightable_options = "basic", ...)
+kable_classic(
+ kable_input,
+ lightable_options = "basic",
+ html_font = "\\"Arial Narrow\\", \\"Source Sans Pro\\", sans-serif",
+ ...
+)
-kable_classic_2(kable_input, lightable_options = "basic", ...)
+kable_classic_2(
+ kable_input,
+ lightable_options = "basic",
+ html_font = "\\"Arial Narrow\\", \\"Source Sans Pro\\", sans-serif",
+ ...
+)
-kable_minimal(kable_input, lightable_options = "basic", ...)
+kable_minimal(
+ kable_input,
+ lightable_options = "basic",
+ html_font = "calibri, cambria, \\"Source Sans Pro\\", sans-serif",
+ ...
+)
-kable_material(kable_input, lightable_options = "basic", ...)
+kable_material(
+ kable_input,
+ lightable_options = "basic",
+ html_font = "\\"Source Sans Pro\\", helvetica, sans-serif",
+ ...
+)
-kable_material_dark(kable_input, lightable_options = "basic", ...)
+kable_material_dark(
+ kable_input,
+ lightable_options = "basic",
+ html_font = "\\"Source Sans Pro\\", helvetica, sans-serif",
+ ...
+)
+
+kable_paper(
+ kable_input,
+ lightable_options = "basic",
+ html_font = "\\"Arial Narrow\\", arial, helvetica, sans-serif",
+ ...
+)
}
\arguments{
\item{kable_input}{A HTML kable object.}
diff --git a/man/kable_styling.Rd b/man/kable_styling.Rd
index 4aedfaa..d95b4b8 100644
--- a/man/kable_styling.Rd
+++ b/man/kable_styling.Rd
@@ -21,7 +21,8 @@
protect_latex = TRUE,
table.envir = "table",
fixed_thead = FALSE,
- htmltable_class = NULL
+ htmltable_class = NULL,
+ html_font = NULL
)
}
\arguments{
@@ -101,6 +102,9 @@
\code{lightable-classic-2}, \code{lightable-material}, \code{lightable-striped} and
\code{lightable-hover}. If you have your customized style sheet loaded which
defines your own table class, you can also load it here.}
+
+\item{html_font}{A string for HTML css font. For example,
+\code{html_font = '"Arial Narrow", arial, helvetica, sans-serif'}.}
}
\description{
This function provides a cleaner approach to modify the style