Bugs:
style_tt() with a logical matrix containing all FALSE values no longer throws an error (Issue #609, thanks to @EinMaulwurf).Misc:
Misc:
print(tab, "html") always base 64 encodes images. This is useful because it makes files more portable when viewed in IDEs, and because it simplifies path handling in temporary directories across operating systems.Bugs:
height parameter with non-HTML output formats (Issue #608).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_portabletheme_html(tab, portable = TRUE)tinytable_latex_preamble theme_latex(tab, preamble = TRUE)tinytable_pdf_engine theme_latex(tab, engine = "pdflatex")tinytable_quarto_figureNew 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!
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.