#156 add align to add_header_above
diff --git a/R/add_header_above.R b/R/add_header_above.R
index f5d857e..59bae17 100644
--- a/R/add_header_above.R
+++ b/R/add_header_above.R
@@ -14,6 +14,9 @@
#' @param italic A T/F value to control whether the text should to be emphasized.
#' @param monospace A T/F value to control whether the text of the selected column
#' need to be monospaced (verbatim)
+#' @param align A character string for cell alignment. For HTML, possible values could
+#' be `l`, `c`, `r` plus `left`, `center`, `right`, `justify`, `initial` and `inherit`
+#' while for LaTeX, you can only choose from `l`, `c` & `r`.
#' @param escape A T/F value showing whether special characters should be
#' escaped.
#' @param line A T/F value to control whether a line will appear underneath the
@@ -27,7 +30,8 @@
#' @export
add_header_above <- function(kable_input, header = NULL,
bold = FALSE, italic = FALSE,
- monospace = FALSE, escape = TRUE,line = TRUE) {
+ monospace = FALSE, align = "c",
+ escape = TRUE, line = TRUE) {
kable_format <- attr(kable_input, "format")
if (!kable_format %in% c("html", "latex")) {
warning("Please specify format in kable. kableExtra can customize either ",
@@ -36,18 +40,18 @@
return(kable_input)
}
if (kable_format == "html") {
- return(htmlTable_add_header_above(kable_input, header,
- bold, italic, monospace, escape,line))
+ return(htmlTable_add_header_above(kable_input, header, bold, italic,
+ monospace, align, escape,line))
}
if (kable_format == "latex") {
- return(pdfTable_add_header_above(kable_input, header,
- bold, italic, monospace, escape,line))
+ return(pdfTable_add_header_above(kable_input, header, bold, italic,
+ monospace, align, escape,line))
}
}
# HTML
-htmlTable_add_header_above <- function(kable_input, header,
- bold, italic, monospace, escape,line) {
+htmlTable_add_header_above <- function(kable_input, header, bold, italic,
+ monospace, align, escape, line) {
if (is.null(header)) return(kable_input)
kable_attrs <- attributes(kable_input)
kable_xml <- read_kable_as_xml(kable_input)
@@ -67,8 +71,8 @@
"columns with the original kable output.")
}
- new_header_row <- htmlTable_new_header_generator(header,
- bold, italic, monospace,line)
+ new_header_row <- htmlTable_new_header_generator(header, bold, italic,
+ monospace,align, line)
xml_add_child(kable_xml_thead, new_header_row, .where = 0)
out <- as_kable_xml(kable_xml)
if (is.null(kable_attrs$header_above)) {
@@ -96,8 +100,13 @@
return(data.frame(header = names(header), colspan = header, row.names = NULL))
}
-htmlTable_new_header_generator <- function(header_df, bold, italic, monospace,line) {
+htmlTable_new_header_generator <- function(header_df, bold, italic,
+ monospace, align, line) {
+ if (align %in% c("l", "c", "r")) {
+ align <- switch(align, r = "right", c = "center", l = "left")
+ }
row_style <- paste0(
+ paste0("text-align: ", align, "; "),
ifelse(bold, "font-weight: bold; ", ""),
ifelse(italic, "font-style: italic; ", ""),
ifelse(monospace, "font-family: monospace; ", "")
@@ -106,7 +115,7 @@
if (trimws(x[1]) == "") {
paste0('<th style="border-bottom:hidden" colspan="', x[2], '"></th>')
} else {
- paste0('<th style="text-align:center; border-bottom:hidden; ',
+ paste0('<th style="border-bottom:hidden; ',
'padding-bottom:0; padding-left:3px;padding-right:3px;',
row_style,
'" colspan="',
@@ -121,20 +130,21 @@
}
# Add an extra header row above the current header in a LaTeX table ------
-pdfTable_add_header_above <- function(kable_input, header,
- bold, italic, monospace, escape, line) {
+pdfTable_add_header_above <- function(kable_input, header, bold, italic,
+ monospace, align, escape, line) {
table_info <- magic_mirror(kable_input)
header <- standardize_header_input(header)
if (escape) {
header$header <- escape_latex2(header$header)
- header$header <- linebreak(header$header, align = "c", double_escape = TRUE)
+ header$header <- linebreak(header$header, align = align, double_escape = TRUE)
}
+ align <- match.arg(align, c("c", "l", "r"))
hline_type <- switch(table_info$booktabs + 1, "\\\\hline", "\\\\toprule")
- new_header_split <- pdfTable_new_header_generator(header, table_info$booktabs,
- bold, italic, monospace)
+ new_header_split <- pdfTable_new_header_generator(
+ header, table_info$booktabs, bold, italic, monospace, align)
if(line){
new_header <- paste0(new_header_split[1], "\n", new_header_split[2])
} else {
@@ -157,13 +167,13 @@
}
pdfTable_new_header_generator <- function(header_df, booktabs = FALSE,
- bold, italic, monospace) {
+ bold, italic, monospace, align) {
if (booktabs) {
- header_df$align <- "c"
+ header_df$align <- align
} else {
- header_df$align <- "|c|"
- header_df$align[1] <- "c|"
- header_df$align[nrow(header_df)] <- "|c"
+ header_df$align <- paste0("|", align, "|")
+ header_df$align[1] <- paste0(align, "|")
+ header_df$align[nrow(header_df)] <- paste0("|", align)
}
header_items <- apply(header_df, 1, function(x) {
# if(x[2] == 1) return(x[1])
diff --git a/man/add_header_above.Rd b/man/add_header_above.Rd
index a056225..0c54c36 100644
--- a/man/add_header_above.Rd
+++ b/man/add_header_above.Rd
@@ -5,7 +5,7 @@
\title{Add a header row on top of current header}
\usage{
add_header_above(kable_input, header = NULL, bold = FALSE, italic = FALSE,
- monospace = FALSE, escape = TRUE, line = TRUE)
+ monospace = FALSE, align = "c", escape = TRUE, line = TRUE)
}
\arguments{
\item{kable_input}{Output of \code{knitr::kable()} with \code{format} specified}
@@ -23,6 +23,10 @@
\item{monospace}{A T/F value to control whether the text of the selected column
need to be monospaced (verbatim)}
+\item{align}{A character string for cell alignment. For HTML, possible values could
+be \code{l}, \code{c}, \code{r} plus \code{left}, \code{center}, \code{right}, \code{justify}, \code{initial} and \code{inherit}
+while for LaTeX, you can only choose from \code{l}, \code{c} & \code{r}.}
+
\item{escape}{A T/F value showing whether special characters should be
escaped.}