% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/cell_spec.R
\name{cell_spec}
\alias{cell_spec}
\alias{text_spec}
\title{Specify Cell/Text format}
\usage{
cell_spec(x, format, bold = FALSE, italic = FALSE, monospace = FALSE,
  color = NULL, background = NULL, align = NULL, font_size = NULL,
  angle = NULL, tooltip = NULL, popover = NULL, link = NULL,
  escape = TRUE, background_as_tile = TRUE,
  latex_background_in_cell = TRUE)

text_spec(x, format, bold = FALSE, italic = FALSE, monospace = FALSE,
  color = NULL, background = NULL, align = NULL, font_size = NULL,
  angle = NULL, tooltip = NULL, popover = NULL, link = NULL,
  escape = TRUE, background_as_tile = TRUE,
  latex_background_in_cell = FALSE)
}
\arguments{
\item{x}{Things to be formated. It could be a vector of numbers or strings.}

\item{format}{Either "html" or "latex". It can also be set through
\code{option(knitr.table.format)}, same as \code{knitr::kable()}.}

\item{bold}{T/F for font bold.}

\item{italic}{T/F for font italic.}

\item{monospace}{T/F for font monospaced (verbatim)}

\item{color}{A character string for text color. Here please pay
attention to the differences in color codes between HTML and LaTeX.}

\item{background}{A character string for background color. Here please
pay attention to the differences in color codes between HTML and LaTeX. Also
note that in HTML, background defined in cell_spec won't cover the whole
cell.}

\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{font_size}{A numeric input for font size. For HTML, you can also use
options including \code{xx-small}, \code{x-small}, \code{small}, \code{medium}, \code{large},
\code{x-large}, \code{xx-large}, \code{smaller}, \code{larger}, \code{initial} and \code{inherit}.}

\item{angle}{0-360, degree that the text will rotate. Can be a vector.}

\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.}

\item{link}{A vector of strings for url links. Can be used together with
tooltip and popover.}

\item{escape}{T/F value showing whether special characters should be escaped.}

\item{background_as_tile}{T/F value indicating if you want to have round
cornered tile as background in HTML.}

\item{latex_background_in_cell}{T/F value. It only takes effect in LaTeX
when \code{background} provided, Default value is \code{TRUE}. If it's \code{TRUE}, the
background only works in a table cell. If it's \code{FALSE}, it works outside of a
table environment.}
}
\description{
Specify Cell format before it gets into kable
}
