New features:
style_tt() now supports comprehensive styling for
Tabulator tables including bold, italic, color, background, fontsize,
and more. Cell-specific styles persist across sorting and pagination
operations.theme_html(tabulator_search = "column") adds header
filters to each column in Tabulator tables, allowing per-column
searching.theme_striped() now supports Tabulator tables with
alternating row background colors.plot_tt() now supports Tabulator tables with
JavaScript-based rendering for built-in plot types (bar,
barpct, histogram, line,
density).plot_tt() now supports images in Tabulator tables via
the images parameter.theme_html(tabulator_css_rule = ...) now appends CSS
rules instead of overwriting them, allowing multiple calls to combine
styles.plot_tt() bar plots now accept color as a
length-2 vector (c(bar_color, background_color)) to show
progress bars with backgrounds in static formats (PNG, PDF, LaTeX). Use
xlim to control the range. Note: Tabulator format uses only
the first color.theme_html(script = ...) allows users to inject custom
JavaScript code or script tags into HTML output. Useful for loading
external JavaScript libraries like Plotly, D3, etc.Changes:
plot_tt(fun = "barpct") is deprecated but still
supported for backward compatibility. Use fun = "bar" with
xlim = c(0, 1) and a two-color vector instead.Internal changes:
style_tt() logical parameter handling:
defaults changed from FALSE to NULL, with
NULL values stored as NA in the style
dataframe. Simplified expand_style() to use consistent
“last non-NA wins” logic for all style properties including logical
ones.Bugs:
style_tt() with both a
rowspan and a line. Thanks to @eringrand for reporting
Issue #592.group_tt(j = "_") (and other single-character
delimiters) now errors when column names contain differing numbers of
delimiters, preventing malformed spanning headers.Breaking changes:
"gfm" is no longer a valid output format.
Use output = "markdown" with
theme_markdown(style = "gfm") instead.theme_empty() drops every change made to this point, so
the order of operations matter."html_portable" is no longer a valid
output format in save_tt() or
print(). Use theme_html(portable = TRUE)
instead.plot_tt() deprecates the asp argument. Use
width_plot and height_plot instead.theme_void() becomes theme_empty() to
avoid conflict with ggplot2::theme_void().strip_tt() was added very
recently but is now removed. Use theme_empty()
instead.Deprecated global options:
tinytable_html_engine
theme_html(tab, engine = "bootstrap")tinytable_html_portable
theme_html(tab, portable = TRUE)tinytable_latex_preamble
theme_latex(tab, preamble = TRUE)tinytable_pdf_engine
theme_latex(tab, engine = "pdflatex")tinytable_quarto_figure
New functions:
format_vector() is similar to format_tt()
but accepts and returns vectors.style_vector() is similar to style_tt()
but accepts and returns vectors.plot_vector() is similar to plot_tt() but
it returns a character vector of links to plots or images, with
appropriate markup and styling, like href for HTML output
or \includegraphics{} for LaTeX.New arguments:
format_tt(output = ) to apply formatting conditionally
based on output format.style_tt(smallcap = TRUE) to style text in small
capitals. In HTML, LaTeX, and Typst, it uses proper small caps
formatting. In Markdown, it converts text to uppercase.tt(x, colnames = "label") renames column names using
the attr(df$x, "label") attribute, when available, falling
back to column names otherwise.format_tt(linebreak = "<br>") can substitute a
user-specified string to an appropriate character sequence to generate
line breaks in the output of the tinytable
(ex: \\ for LaTeX, <br> for HTML,
etc.)theme_markdown(ansi=TRUE) enables support for
style_tt() colors, backgrounds, and text styles in Markdown
output.theme_markdown(vline=FALSE, hline=FALSE) suppresses
lines.plot_tt(height_plot, width_plot) control the size (in
pixels) of the plotting device canvas. This allows users to control the
resolution of the original plot, as well as the relative size of
elements.plot_tt(fun = "barpct", color = "red", background = "blue")
draws percentage bars with two colors for p and 1-p.plot_tt(sprintf = "...") allows custom formatting of
generated cell content with sprintf patterns.New miscellaneous features:
i and
j arguments in style_tt(),
format_tt(), and plot_tt().tt() is now a generic function, allowing special
table-drawing methods for specific classes of objects.
tinytable provides methods for data.frame,
data.table, and tbl_df. See the “Custom”
vignette for examples.subset(x, select = c(x, y)) can now be used to select
columns.options(tinytable_tempdir = "/home/username/tempdir")plot_tt().plot_tt() can add images to replace column names. Issue
#566.plot_tt()Bugs:
tabulator output works with hyphens in columns
namesformat_tt(i = "colnames") is
no longer applied twice. Issue #551.color ignored in matrix indexing.i
condition matches nothing. Thanks to @RJDan for report #564.group_tt(j = ) respects column widths in bootstrap HTML
output.plot_tt()save_tt("typst") no longer aborts if there is
typst directory. Thanks to @sTeADone for report #580.tt_style(), tt_format(),
tt_plot(), tt_group(), tt_save().
Thanks to @rpruim for
the suggestion in Issue #540.font= instead of cmd= for
italic, bold, and monospace. This allows using more than one style in a
single cell. Thanks to @lvjr for the recommendation in Issue
#524.Bugs:
theme_latex(): support removal of
environment_table when environment=NULL.
Thanks to @wklimowicz for report #535.Deprecated or replaced features:
theme_tt() function has been deprecated. Use
format-specific or style-specific theme functions instead:
theme_html(),
theme_latex(), theme_typst()theme_grid(),
theme_revealjs(), theme_rotate(),
theme_striped(), theme_void()output argument from style_tt().tabularray_inner and tabularray_outer
arguments from style_tt(). Use theme_latex()
instead.bootstrap_class, bootstrap_css, and
bootstrap_css_rule arguments from style_tt().
Use theme_html() instead.options(tinytable_latex_float_placement) has been
deprecated. Use options(tinytable_latex_placement)
instead.New:
tt(x) |> theme_tt("tabulator") |> print("tabulator")theme_*() functions are now systematically documented
and much more robust, instead of being routed via
theme_tt().group_tt(j = "_") allows multiple delimiters in column
names to easily create multiple level headers. Thanks to @nmercadeb for feature
request #518.Bug fixes:
group_tt(i = x) works when x is a factor
vector.format_tt(escape=TRUE)Breaking changes:
theme_spacing() function has been removed. Use the new
height argument in tt() instead for row height
control.format_tt() is now consistent with
style_tt() and plot_tt(). It refers to rows
and columns in the final table, after insertions by
group_tt().indent is removed form the
group_tt() function. Use
style_tt(x, "~groupi", indent = 1) instead.print("dataframe") is now consistent with other formats
and only prints the result. Use save_tt("dataframe") to
obtain a data frame.New features:
i for style_tt()
and format_tt():
"group": row group rows (complement of “groupi”)"~groupi": complement of “groupi”"groupj": header rows"colnames": column names"caption": caption"notes": notestt(height=2) controls row height in em units. Works
HTML, LaTeX, and Typst.format_tt() argument i accepts character
strings to format specific table components: “colnames”, “caption”,
“notes”, “groupi” (row group labels), “groupj” (column group
labels).group_tt(i = ..., j = ...) now supports matrix
insertion: when i is an integer vector and j
is a character matrix, rows from the matrix are inserted at the
specified positions. Single-column matrices are automatically reshaped
when the number of elements is a multiple of the table’s column
count.group_tt(i = ...) can now be called multiple times to
insert several rows one after the other.style_tt(colspan) is now supported for Markdown and
Typst outputs.style_tt(i = "~groupi") styles all non-group rows
(complement of “groupi”).options(tinytable_color_name_normalization=TRUE)
(default): automatic color name processing (default: TRUE). When
enabled, R color names recognized by col2rgb() are
converted to hex format for consistent rendering across HTML, LaTeX, and
Typst formats. If R color conversion fails, LaTeX color names are used
as fallback. Colors explicitly supplied as hex values with “#” prefix
are passed through unchanged. Set to FALSE to disable processing and
pass color names unchanged.Typst: Major refactor improves several things and brings Typst very close to feature parity with other formats.
rowspan and colspan arguments are now
supported, with informative error messages when they are not used
correctly.alignv argument in style_tt().
This allows vertical alignment of cells in Typst tables.plot_tt() supports height.rowsep in
theme_tt("spacing").Misc:
format_tt() uses num_mark_big without
digits argument.theme_tt("revealjs").Bugs:
group_tt(): single
matrix rows are now properly duplicated when inserted at multiple
positions using syntax like
group_tt(i = c(2, 5), j = matrix).theme_bootstrap() for LaTeX and Typst. Issue
#479.theme_tt("multipage") correctly converts LaTeX
environment to longtblr. Thanks to @ujtwr for report #493.Internal changes:
group_tt() architecture: removed
legacy lazy evaluation system (@lazy_group_i,
@lazy_group_j) in favor of direct data structure
manipulation with @group_data_i and
@group_data_j slots.format_tt() function implementation for
better performance and maintainability.Bugs:
rowspan for HTML files. Thanks to
@J-Moravec and
@ASKurz for reports
#355 and #457.theme_tt(x, "multipage") failed to insert
rowhead in LaTeX. Thanks to @sTeADone for report #460.x is a data.table without columns.group_tt(i = ) labels
are long. Thanks to @JohannesNE for report #469.Misc:
group_tt() argument j accepts a single
string as delimiter (ex: "_") when column names of the data
frame include group names. Thanks to @sda030 for the feature request, a first
implementation, and testing.style_tt(i = "groupi") styles group rows.theme_revealjs() now supports dark theme with
css = "dark" argument.tt() gets a colnames argument, instead of
having to delete names manually.New:
strip_tt() function removes elements of an existing
tinytable object.Bugs:
Docs improvement:
- as list. Thanks to Chris
Goodman.New:
litedown notebooks with “latex”, “html”, or
“markdown” output.Bugs:
format_tt() works on tibbles. Thanks to @jon-mellon for report
#426.modelsummary repository.tabularray LaTeX update breaks
theme_tt("rotating"). Thanks to @kylebutts for report #444.Tests:
tinysnapshot means snapshot tests are
no longer sensitive to random seeds.Breaking change:
format_tt() is now stricter, applying no formatting at
all by default. Users must specify an argument explicitly or set a
global option to change the table.Bugs:
save_tt("file.pdf") works with colors. Thanks to @olivedv for the report and
solution #395.group_tt(i=vec): vec can be a factor
vectorstyle_tt(align="d") with empty strings
(modelsummary::datasummary_balance() test)style_tt(line_color) accepts Hex codes. Thanks to @andrewheiss for report
#415.tt(rownames=TRUE) should not add column names if they
do not exist. Thanks to @Nowosad for report #414.style_tt(tabularray_outer = ...) correctly inserts
argument in outer. Issue #419. Thanks to @wklimowiczNew:
style_tt("notes") and style_tt("caption")
can style footnotes and captions. Note: This will only style captions
handled by the caption argument in tt(), and
not captions created by Quarto.table@group_index_i is now documented.Misc:
theme_tt("spacing"): Change the row and column spacing
to create more compact or airy tables. LaTeX and HTML only. Thanks to
@statzhero for
feature request #353.style_tt(): the i and j
indices are now consistent in all formats. They refer to rows
after the insertion of row groups.save_tt() respects
options(tinytable_save_overwrite=TRUE)style_tt(align="d"). Issue #367options(tinytable_print_rstudio_notebook = "inline") or
"viewer"Bugs:
group_tt(). Thanks to @eeemda for report #362.New:
output="html_portable" returns a portable HTML file,
where plot_tt() encodes and embeds the images directly in
the HTML code, rather than link to external images. Thanks to @J-Moravec for
implementing this nice feature!format_tt() gets a math argument to wrap
cell content in \(...\) math mode.group_tt(i = vec) accepts a vector of labels of length
equal to the number of rows in the dataset.tt() gets an escape argument. Thanks to
Cameron Patrick for the feature request.i argument in style_tt() now accepts a
logical matrix of same dimensions as x, to style specific
cells, rather than all combinations of i and j
vectors. Thanks to @dhicks for the feature request #329.style_tt() gets new output argument for
conditional styling based on output format.names() method now supported for both returning column
names and re-assingning them. Issue #332.Typst:
style_tt() can override cell styling with successive
calls, and the call order is respected.options(tinytable_quarto_figure = FALSE) wraps Typst
tables in a figure environment in Quarto documents.Bugs:
cmidrule. Thanks to @jsr-p for code submission
#349.HTML tables no longer insert MathJax scripts by default. This behavior could enter in conflict with other MathJax scripts loaded explicitly by the user or automatically by Quarto. Users can revert to the previous behavior by setting a global option:
options(tinytable_html_mathjax = TRUE)
Alternatively, users can insert appropriate scripts directly in their HTML document or as a Quarto literal chunk:
```{=html}
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script>
MathJax = {
tex: {
inlineMath: [['$', '$'], ['\\(', '\\)']]
},
svg: {
fontCache: 'global'
}
};
</script>
```
tinytable_markdown_hlines has been removed. To
get a more minimal looking markdown table, use output “gfm” which is gfm
compliant.format_tt(markdown=TRUE) escapes groups and notes when
i and j are NULL.plot_tt(): The height argument is now
respected in Markdown and Word documents.group_tt() allows 0 and duplicates in i
argument for labels in the first row and consecutive labels.i=NULL.colnames(x)<-NULL works on a tinytable
object.format_tt(num_big_mark) applies to integer
columns.getOption("viewer") instead of
rstudioapi::viewer() for positron supportglue::glue() string is accepted by
format_tt(). Thanks to @LukasWallrich for report #792 on the
modelsummary repository.gfm) output. Thanks
to @kylebutts for
contribution #315.theme_tt("rotate") to rotate tables in LaTeX or
Typst.save_tt("/path/to/file") returns the file path
invisibly. Thanks to @yjunechoe for issue #328.theme_tt("tabular") no longer uses
tabularray or booktabs. Only relies on basic
LaTeX packages.theme_tt("tabular", style = "tabularray") does the same
as above, but keeps the \begin{tblr} environment.style_tt() supports align for different
rows and cells, rather than just whole columns.style_tt() supports indent argument.group_tt() supports indent argument.group_tt(j) and
style_tt(background)theme_tt(x, horizontal = "l") can left, center, or
right-align a table in the page.save_tt("pdf"):
options(tinytable_save_pdf_clean = TRUE)options(tinytable_save_pdf_engine = "xelatex")options(tinytable_tt_rownames=TRUE): Print row names in
the first column by calling. Thanks to @rsbivand for Issue #264.options(tinytable_html_mathjax = TRUE).
Inserts MathJax scripts in the HTML file. This may cause conflicts if
MathJax is otherwise loaded in the document.replace does not work in LaTeX with
format_tt(quarto=TRUE). Thanks to @cbgoodman for Issue #263.style_tt(indent) works for LaTeXformat_tt() on a table without column names. Thanks to
@andrewheiss for
report #306.Breaking change:
width argument is moved from
style_tt() to tt().tt():
width argument now accepts a vector of numeric values
to control the width of each column, as a proportion of the total
linewidth.format_tt():
quarto argument enables Quarto data processing for
the whole table and marks specific cells as containing Quarto content.
This is especially useful to include @Citation1981 in a table. Thanks to
@andrewheiss for
issue #215 and @giabaio for further discussion and
debugging.replace argument which accepts a single logical, a
single string, or a named list to specify multiple replacements.replace=TRUE by default replaces NA by an
empty string. FALSE prints “NA” as string.replace_na is deprecated in favor of
replace. Backward compatibility is maintained and a warning
is issued.theme_tt():
style_tt():
save_tt():
Typst:
caption argument, and rather to
define both the label and tbl-cap
chunk options in Quarto. This is a breaking change, as Typst tables are
no longer enclosed in a #figure environment in Quarto
documents when both tbl-cap and label chunk
options are defined.format_tt(escape=TRUE) escapes square brackets.Misc:
beamer_presentations, but see:
https://github.com/vincentarelbundock/tinytable/issues/244options(tinytable_quarto_disable_processing = FALSE).
Thanks to @andrewheiss for issue #215.Bug fixes:
format_tt(). Issue #230.save_tt() can now save to PDF when the table includes a
caption. Thanks to @etiennebacher for report #224.group_tt(i) inserted an extra latex column, which made
horizontal lines stop to early. Thanks to @andrewheiss for report #235.rstudioapi package is available.colnames and colnames<- are now
exported functions.tt() supports data.frame-like objects which also
inherit from other classes, ex:
marginaleffects::slopes()options(tinytable_tt_print) is respected in
print() without argument.New features:
rbind() and rbind2() can be used to stack
tinytable objects. rbind2() is more flexible
than rbind(). See ?tinytable::rbind2print(): “dataframe”colnames(tab) <- c("a", "b", "c")theme_tt("resize") gets a direction
argument with “up”, “down”, “both” options. Thanks to @MarcoPortmann for
feature request #207Minor:
Bugs:
theme_tt() resize issue with talltblr
environment and notes in LaTeX. Thanks to @MarcoPortmann for reporting issue
#206New function theme_tt():
tinytable.resize: Insert a LaTeX table in a
resizebox environment to ensure a table fits the page, or
to scale it to a fraction of \linewidthplacement: Determine where a LaTeX table float is
positioned. Ex: [H], [htbp]multipage: Split long LaTeX tables across multiple
pages with (optional) repeated headers/footers. Uses the
longtblr environment from tabularray.format_tt():
i argument to format subsets of rows.fn argument which accepts an arbitrary function to
format table content.num_fmt="significant_cell" rounds significant digits on
a cell-by-cell basis rather than for full columns (as is default in base
R format()).num_mark_big and num_mark_dec require an
explicit digits. We now raise an informative error.escape = TRUE now escapes captions, notes, and spanning
cells created by group_tt() when i and
j are both NULL. To avoid escaping group
labels, users can specify i and/or j
explicitly.Typst format:
group_tt(i)plot_tt(). Thanks
to @aghaynes for
contribution #155.tinytable. This allows users to apply targeted show rules.
For example, in a table of contents:
outline(target: figure.where(kind: "tinytable"))Misc:
style_tt() gains a finalize argument. This
accepts functions to be applied to the table object at the very end of
the building process, to programmatically change its content. For
example, this can be used with regular expressions to modify the text
version of the table hosted in tab@table_string, or the
function could programmatically modify the caption in
tab@caption.style_tt(): LaTeX format supports decimal alignement
with align="d". The width of columns is determined by the
maximum number of digits to the left and to the right in all cells
specified by i, j.tibble. ANSI characters (ex: fancy
pillar formatting) are stripped automatically or converted
to HTML when the fansi package is installed.
fansi is a dependency of tibble, so it should
often be installed.tinytable_tt_digits global option can set the
default number of digits in the tt() function.tinytable objects are now S4 class objects,
with slots to hold data about the content and structure.as.character() now works on tinytable
objects, returning a string in the output format specified by the
@output slot of the tinytable object (markdown
by default).tt(x, caption = "Blah blah \\label{tab:blah})Breaking changes:
format_tt() could be use sequentially to
apply two formats to the same cell. Now, multiple calls to
format_tt() can still be make chained with pipes, but they
must apply to different cells with i, j,
otherwise only the last change is respected. One exception is the
escape argument which can be applied to pre-formatted
cells.tinytable objects no longer have a
meta_tinytable attribute. Use S4 slots instead.placement argument in tt() is removed in
favor of theme_tt("placement").Bugs:
format_tt() did not work on factor vector.format_tt() escapes <> tags in Typst.group_tt(i) in
HTML.New:
j argument in style_tt() and
format_tt() now accepts a string vector to match columns.
Issue #122plot_tt(fun = "line")format_tt(j=NULL, escape=TRUE) now escapes column
headers in addition to all cells.format_tt() gains a replace_na argument to
replace missing values.style_tt(): rowspan and
colspan arguments are now supported in all formats except
Typst. In markdown and Word, we get “pseudo-spans” with empty cells
around the main cell, instead of true merged cells.style_tt(): alignv argument is now
supported for LaTeX and HTMLBugfix:
style_tt(). Thanks to @strengejacke for report #133.New:
Typst tables are now supported using the
tablex extension:
escape argument in format_tt() escapes or
substitutes special characters in LaTeX or HTML output to prevent
compilation and rendering errors.notes argument in tt() can insert
superscript markers inside cells to refer to notes at the bottom of the
page.
tt(x, notes = list("*" = list(i = 0:1, j = 2, text = "Hello world)))notes agument in tt() now works wth
Markdown and Word, but must be a single string.group_tt() can be called multiple times to create
mult-row headers.Improvements:
line, line_width,
and line_color arguments.Bug fixes:
Documentation:
Initial package release. Yay!