From 5c3858e37340f4f7ee35402784016ecd4a36f5f6 Mon Sep 17 00:00:00 2001 From: vincentarelbundock Date: Sat, 21 Sep 2024 12:54:53 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20vincenta?= =?UTF-8?q?relbundock/tinytable@d78631e3eb7f1c3c63abeb44e039acba707068be?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- NEWS.html | 1 + man/format_tt.html | 132 +- man/group_tt.html | 246 ++-- man/rbind2-tinytable-tinytable-method.html | 92 +- man/theme_tt.html | 34 +- man/tt.html | 88 +- search.json | 12 +- vignettes/custom.html | 204 +-- vignettes/format.html | 362 ++--- vignettes/group.html | 688 ++++----- vignettes/plot.html | 246 ++-- vignettes/style.html | 1282 ++++++++--------- vignettes/theme.html | 128 +- vignettes/tinytable.html | 520 +++---- .../id3z04tz4ipap1rqsjzkj9.png | Bin 0 -> 11877 bytes .../id3zoxd2fs0k4lv8zehgxz.png | Bin 0 -> 11898 bytes .../id49lbjdua348spcv6dyhi.png | Bin 0 -> 15240 bytes .../id570p76t22alamj6l054z.png | Bin 0 -> 12175 bytes .../id5ixxq6q77t55c3l3wg23.png | Bin 0 -> 1829 bytes .../id7uu1g1y977h82kbj3vj1.png | Bin 0 -> 5057 bytes .../id7xh0qhoffyze46yg82y7.png | Bin 0 -> 512 bytes .../id81dtgr3hsi0oerqmjbci.png | Bin 0 -> 2072 bytes .../id8k8ii5f4ysmr7u1i7gnr.png | Bin 0 -> 2564 bytes .../idasjdgrthvduibvis66tq.png | Bin 0 -> 10521 bytes .../idbxj4p9v6xscz2xcvifjn.png | Bin 0 -> 1846 bytes .../idck18s9s81zi0kej6uga1.png | Bin 0 -> 5073 bytes .../idcyzj1gywoyo6cdusv3ka.png | Bin 0 -> 1728 bytes .../idczwtp46hd9d0onz2b53j.png | Bin 0 -> 8399 bytes .../iddp0ep7ij403ogeifqiqh.png | Bin 0 -> 1127 bytes .../iddt3zb93yup1ngq65e3k9.png | Bin 0 -> 529 bytes .../ide8sqbrmg1p8x6yukkbow.png | Bin 0 -> 2214 bytes .../ideotyzsgfkett1zsd9dnm.png | Bin 0 -> 2444 bytes .../idgzkr0xpc8awp6kqhz8om.png | Bin 0 -> 12842 bytes .../idkbv47x0uzlhetbrymzyi.png | Bin 0 -> 2191 bytes .../idl7n770uyjsc4osl3uvz0.png | Bin 0 -> 548 bytes .../idma3jugg21dfboto6kpoj.png | Bin 0 -> 5080 bytes .../idpvbcfx7bl1w6v1jyuacn.png | Bin 0 -> 2558 bytes .../idrrat8bom7ytjc0r2fits.png | Bin 0 -> 11196 bytes .../idsps0kmdrru6ifc9sxbpp.png | Bin 0 -> 11912 bytes .../idwkc5icrbdns5bn3txyu8.png | Bin 0 -> 2250 bytes .../idx14406ky49zk59ryojlh.png | Bin 0 -> 2077 bytes vignettes/tinytable_tutorial.pdf | Bin 1797562 -> 1799130 bytes 42 files changed, 2018 insertions(+), 2017 deletions(-) create mode 100644 vignettes/tinytable_assets/id3z04tz4ipap1rqsjzkj9.png create mode 100644 vignettes/tinytable_assets/id3zoxd2fs0k4lv8zehgxz.png create mode 100644 vignettes/tinytable_assets/id49lbjdua348spcv6dyhi.png create mode 100644 vignettes/tinytable_assets/id570p76t22alamj6l054z.png create mode 100644 vignettes/tinytable_assets/id5ixxq6q77t55c3l3wg23.png create mode 100644 vignettes/tinytable_assets/id7uu1g1y977h82kbj3vj1.png create mode 100644 vignettes/tinytable_assets/id7xh0qhoffyze46yg82y7.png create mode 100644 vignettes/tinytable_assets/id81dtgr3hsi0oerqmjbci.png create mode 100644 vignettes/tinytable_assets/id8k8ii5f4ysmr7u1i7gnr.png create mode 100644 vignettes/tinytable_assets/idasjdgrthvduibvis66tq.png create mode 100644 vignettes/tinytable_assets/idbxj4p9v6xscz2xcvifjn.png create mode 100644 vignettes/tinytable_assets/idck18s9s81zi0kej6uga1.png create mode 100644 vignettes/tinytable_assets/idcyzj1gywoyo6cdusv3ka.png create mode 100644 vignettes/tinytable_assets/idczwtp46hd9d0onz2b53j.png create mode 100644 vignettes/tinytable_assets/iddp0ep7ij403ogeifqiqh.png create mode 100644 vignettes/tinytable_assets/iddt3zb93yup1ngq65e3k9.png create mode 100644 vignettes/tinytable_assets/ide8sqbrmg1p8x6yukkbow.png create mode 100644 vignettes/tinytable_assets/ideotyzsgfkett1zsd9dnm.png create mode 100644 vignettes/tinytable_assets/idgzkr0xpc8awp6kqhz8om.png create mode 100644 vignettes/tinytable_assets/idkbv47x0uzlhetbrymzyi.png create mode 100644 vignettes/tinytable_assets/idl7n770uyjsc4osl3uvz0.png create mode 100644 vignettes/tinytable_assets/idma3jugg21dfboto6kpoj.png create mode 100644 vignettes/tinytable_assets/idpvbcfx7bl1w6v1jyuacn.png create mode 100644 vignettes/tinytable_assets/idrrat8bom7ytjc0r2fits.png create mode 100644 vignettes/tinytable_assets/idsps0kmdrru6ifc9sxbpp.png create mode 100644 vignettes/tinytable_assets/idwkc5icrbdns5bn3txyu8.png create mode 100644 vignettes/tinytable_assets/idx14406ky49zk59ryojlh.png diff --git a/NEWS.html b/NEWS.html index e8149eb9..cef18702 100644 --- a/NEWS.html +++ b/NEWS.html @@ -383,6 +383,7 @@

Development

diff --git a/man/format_tt.html b/man/format_tt.html index db470a05..1b0e1072 100644 --- a/man/format_tt.html +++ b/man/format_tt.html @@ -689,12 +689,12 @@

Examples

- +
@@ -748,16 +748,16 @@

Examples

- - + + - - + + - +
9 9999 99910 00010 001
10 0029 99910 00010 000
10 0009 999 9 999
@@ -770,12 +770,12 @@

Examples

- +
@@ -849,12 +849,12 @@

Examples

-
+
@@ -940,12 +940,12 @@

Examples

-
+
@@ -1013,12 +1013,12 @@

Examples

-
+
@@ -1086,12 +1086,12 @@

Examples

-
+
@@ -1170,12 +1170,12 @@

Examples

-
+
diff --git a/man/group_tt.html b/man/group_tt.html index 6ec2b24d..929681fa 100644 --- a/man/group_tt.html +++ b/man/group_tt.html @@ -482,12 +482,12 @@

Examples

-
+
@@ -656,12 +656,12 @@

Examples

-
+
@@ -853,12 +853,12 @@

Examples

-
+
@@ -1043,12 +1043,12 @@

Examples

-
Hamburgers
+
diff --git a/man/rbind2-tinytable-tinytable-method.html b/man/rbind2-tinytable-tinytable-method.html index 468c712f..923aa6be 100644 --- a/man/rbind2-tinytable-tinytable-method.html +++ b/man/rbind2-tinytable-tinytable-method.html @@ -487,12 +487,12 @@

Examples

-
Foo
+
@@ -603,12 +603,12 @@

Examples

-
Combine two tiny tables.
+
@@ -720,12 +720,12 @@

Examples

-
Combine two tiny tables.
+
@@ -830,12 +830,12 @@

Examples

-
Combine two tiny tables.
+
diff --git a/man/theme_tt.html b/man/theme_tt.html index ec8b5520..f1c2bea2 100644 --- a/man/theme_tt.html +++ b/man/theme_tt.html @@ -575,12 +575,12 @@

Examples

-
Combine two tiny tables.
+
diff --git a/man/tt.html b/man/tt.html index 73780a91..6e98531d 100644 --- a/man/tt.html +++ b/man/tt.html @@ -620,12 +620,12 @@

Examples

-
+
@@ -725,12 +725,12 @@

Examples

-
+
@@ -953,12 +953,12 @@

Examples

-
+
diff --git a/search.json b/search.json index 4d2e5fc4..d2cd270a 100644 --- a/search.json +++ b/search.json @@ -76,7 +76,7 @@ "href": "man/format_tt.html", "title": "tinytable", "section": "", - "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE) inserts MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 9 999\n 9 999\n \n \n 10 002\n 9 999\n \n \n 10 000\n 9 999\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", + "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE) inserts MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 10 001\n \n \n 10 000\n 10 000\n \n \n 10 000\n 9 999\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", "crumbs": [ "Tutorial (PDF)", "Functions", @@ -88,7 +88,7 @@ "href": "man/format_tt.html#format-columns-of-a-data-frame", "title": "tinytable", "section": "", - "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE) inserts MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 9 999\n 9 999\n \n \n 10 002\n 9 999\n \n \n 10 000\n 9 999\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", + "text": "This function formats the columns of a data frame based on the column type (logical, date, numeric). It allows various formatting options like significant digits, decimal points, and scientific notation. It also includes custom formatting for date and boolean values. If this function is applied several times to the same cell, the last transformation is retained and the previous calls are ignored, except for the escape argument which can be applied to previously transformed data.\n\n\n\nformat_tt(\n x,\n i = NULL,\n j = NULL,\n digits = get_option(\"tinytable_format_digits\", default = NULL),\n num_fmt = get_option(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = get_option(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = get_option(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = get_option(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = get_option(\"tinytable_format_num_mark_dec\", default =\n getOption(\"OutDec\", default = \".\")),\n date = get_option(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = get_option(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = get_option(\"tinytable_format_other\", default = as.character),\n replace = get_option(\"tinytable_format_replace\", default = TRUE),\n escape = get_option(\"tinytable_format_escape\", default = FALSE),\n markdown = get_option(\"tinytable_format_markdown\", default = FALSE),\n quarto = get_option(\"tinytable_format_quarto\", default = FALSE),\n fn = get_option(\"tinytable_format_fn\", default = NULL),\n sprintf = get_option(\"tinytable_format_sprintf\", default = NULL),\n ...\n)\n\n\n\n\n\n\n\nx\n\n\nA data frame or a vector to be formatted.\n\n\n\n\ni\n\n\nRow indices where the formatting should be applied.\n\n\n\n\nj\n\n\nColumn indices where the styling should be applied. Can be:\n\n\nInteger vectors indicating column positions.\n\n\nCharacter vector indicating column names.\n\n\nA single string specifying a Perl-style regular expression used to match column names.\n\n\n\n\n\n\ndigits\n\n\nNumber of significant digits or decimal places.\n\n\n\n\nnum_fmt\n\n\nThe format for numeric values; one of ‘significant’, ‘significant_cell’, ‘decimal’, or ‘scientific’.\n\n\n\n\nnum_zero\n\n\nLogical; if TRUE, trailing zeros are kept in \"decimal\" format (but not in \"significant\" format).\n\n\n\n\nnum_suffix\n\n\nLogical; if TRUE display short numbers with digits significant digits and K (thousands), M (millions), B (billions), or T (trillions) suffixes.\n\n\n\n\nnum_mark_big\n\n\nCharacter to use as a thousands separator.\n\n\n\n\nnum_mark_dec\n\n\nDecimal mark character. Default is the global option ‘OutDec’.\n\n\n\n\ndate\n\n\nA string passed to the format() function, such as \"%Y-%m-%d\". See the \"Details\" section in ?strptime\n\n\n\n\nbool\n\n\nA function to format logical columns. Defaults to title case.\n\n\n\n\nother\n\n\nA function to format columns of other types. Defaults to as.character().\n\n\n\n\nreplace\n\n\nLogical, String or Named list of vectors\n\n\nTRUE: Replace NA by an empty string.\n\n\nFALSE: Print NA as the string \"NA\".\n\n\nString: Replace NA entries by the user-supplied string.\n\n\nNamed list: Replace matching elements of the vectors in the list by theirs names. Example:\n\n\nlist(“-” = c(NA, NaN), “Tiny” = -Inf, “Massive” = Inf)\n\n\n\n\n\n\n\n\nescape\n\n\nLogical or \"latex\" or \"html\". If TRUE, escape special characters to display them as text in the format of the output of a tt() table.\n\n\nIf i and j are both NULL, escape all cells, column names, caption, notes, and spanning labels created by group_tt().\n\n\n\n\n\n\nmarkdown\n\n\nLogical; if TRUE, render markdown syntax in cells. Ex: italicized text is properly italicized in HTML and LaTeX.\n\n\n\n\nquarto\n\n\nLogical. Enable Quarto data processing and wrap cell content in a data-qmd span (HTML) or macro (LaTeX). See warnings in the Global Options section below.\n\n\n\n\nfn\n\n\nFunction for custom formatting. Accepts a vector and returns a character vector of the same length.\n\n\n\n\nsprintf\n\n\nString passed to the ?sprintf function to format numbers or interpolate strings with a user-defined pattern (similar to the glue package, but using Base R).\n\n\n\n\n…\n\n\nAdditional arguments are ignored.\n\n\n\n\n\n\nA data frame with formatted columns.\n\n\n\n\n\n\n\noptions(“tinytable_quarto_figure” = FALSE): Typst only. Normally, it is best to allow Quarto to define the figure environment, so the default behavior is to not include one.\n\n\n\nThe format_tt(quarto=TRUE) argument activates Quarto data processing for specific cells. This funcationality comes with a few warnings:\n\n\nCurrently, Quarto provides a LaTeX macro, but it does not appear to do anything with it. References and markdown codes may not be processed as expected in LaTeX.\n\n\nQuarto data processing can enter in conflict with tinytable styling or formatting options. See below for how to disable it.\n\n\noptions(tinytable_quarto_disable_processing = TRUE)\nDisable Quarto processing of cell content. Setting this global option to FALSE may lead to conflicts with some tinytable features, but it also allows use of markdown and Quarto-specific code in table cells, such as cross-references.\n\nx <- data.frame(Math = \"x^2^\", Citation = \"@Lovelace1842\")\nfn <- function(z) sprintf(\"<span data-qmd='%s'></span>\", z)\ntt(x) |> format_tt(i = 1, fn = fn)\n\n\nSee this link for more details: https://quarto.org/docs/authoring/tables.html#disabling-quarto-table-processing\n\n\n\noptions(tinytable_html_mathjax = TRUE) inserts MathJax scripts in the HTML document. Warning: This may conflict with other elements of the page if MathJax is otherwise loaded.\n\n\n\n\n\noptions(tinytable_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_pdf_engine = “xelatex”): \"xelatex\", \"pdflatex\", \"lualatex\"\n\n\n\n\n\n\nlibrary(\"tinytable\")\n\ndat <- data.frame(\n a = rnorm(3, mean = 10000),\n b = rnorm(3, 10000))\ntab <- tt(dat)\nformat_tt(tab,\n digits = 2,\n num_mark_dec = \",\",\n num_mark_big = \" \")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n 10 000\n 10 001\n \n \n 10 000\n 10 000\n \n \n 10 000\n 9 999\n \n \n \n \n\n\nk <- tt(data.frame(x = c(0.000123456789, 12.4356789)))\nformat_tt(k, digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1, num_fmt = \"decimal\", num_zero = TRUE) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.4\n 99T\n \n \n Food: Halloumi\n 201.4\n 7.3B\n \n \n Food: Tofu\n 0.1\n 29M\n \n \n Food: Beans\n 0.0\n 94K\n \n \n \n \n\n\ny <- tt(data.frame(x = c(123456789.678, 12435.6789)))\nformat_tt(y, digits=3, num_mark_big=\" \")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 123 456 790\n \n \n 12 436\n \n \n \n \n\n\nx <- tt(data.frame(Text = c(\"_italicized text_\", \"__bold text__\")))\nformat_tt(x, markdown=TRUE)\n\n\n\n \n\n \n \n \n \n \n \n Text\n \n \n \n \n \n italicized text\n \n \n bold text\n \n \n \n \n\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\ntt(dat) |> format_tt(escape = TRUE) \n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>", "crumbs": [ "Tutorial (PDF)", "Functions", @@ -507,7 +507,7 @@ "href": "NEWS.html", "title": "News", "section": "", - "text": "New:\n\nThe 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.\nstyle_tt() gets new output argument for conditional styling based on output format.\nnames() method now supported for both returning column names and re-assingning them. Issue #332.\n\nTypst:\n\nTable code is much more concise and efficient.\nFix indexing bug for groups. Issue #323 and #343.\n\n\n\n\n\n\nHTML 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:\noptions(tinytable_html_mathjax = TRUE)\nAlternatively, users can insert appropriate scripts directly in their HTML document or as a Quarto literal chunk:\n```{=html}\n<script id=\"MathJax-script\" async src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n<script>\nMathJax = {\n tex: {\n inlineMath: [['$', '$'], ['\\\\(', '\\\\)']]\n },\n svg: {\n fontCache: 'global'\n }\n};\n</script>\n```\n\nOption tinytable_markdown_hlines has been removed. To get a more minimal looking markdown table, use output “gfm” which is gfm compliant.\n\n\n\n\n\nGlobal options are more consistent and better documented. Thanks to @kylebutts for PR #313.\nSupport Viewer Pane in Positron IDE. Thank to @kylebutts for code contribution in PR #299.\nImproved documentation.\nformat_tt(markdown=TRUE) escapes groups and notes when i and j are NULL.\nplot_tt(): The height argument is now respected in Markdown and Word documents.\ngroup_tt() allows 0 and duplicates in i argument for labels in the first row and consecutive labels.\nHeaders are now styled and formatted when i=NULL.\ncolnames(x)<-NULL works on a tinytable object.\nformat_tt(num_big_mark) applies to integer columns.\nUse getOption(\"viewer\") instead of rstudioapi::viewer() for positron support\nglue::glue() string is accepted by format_tt(). Thanks to @LukasWallrich for report #792 on the modelsummary repository.\nSupport Github Flavored Markdown (gfm) output. Thanks to @kylebutts for contribution #315.\ntheme_tt(\"rotate\") to rotate tables in LaTeX or Typst.\nsave_tt(\"/path/to/file\") returns the file path invisibly. Thanks to @yjunechoe for issue #328.\n\n\n\n\n\nSimplify JS functions in HTML documents. Avoid nesting full HTML documents inside Quarto output.\nRemove polyfill JS because of security issues.\nAvoid error in interactive use in Positron.\n\n\n\n\n\ntheme_tt(\"tabular\") no longer uses tabularray or booktabs. Only relies on basic LaTeX packages.\ntheme_tt(\"tabular\", style = \"tabularray\") does the same as above, but keeps the \\begin{tblr} environment.\n\n\n\n\n\nstyle_tt() supports align for different rows and cells, rather than just whole columns.\nstyle_tt() supports indent argument.\ngroup_tt() supports indent argument.\nNo more gutters when group_tt(j) and style_tt(background)\ntheme_tt(x, horizontal = \"l\") can left, center, or right-align a table in the page.\n\n\n\n\n\nsave_tt(\"pdf\"):\n\noptions(tinytable_save_pdf_clean = TRUE)\noptions(tinytable_save_pdf_engine = \"xelatex\")\n\noptions(tinytable_tt_rownames=TRUE): Print row names in the first column by calling. Thanks to @rsbivand for Issue #264.\nEXPERIMENTAL: options(tinytable_html_mathjax = TRUE). Inserts MathJax scripts in the HTML file. This may cause conflicts if MathJax is otherwise loaded in the document.\n\n\n\n\n\nFootnotes were center-aligned in some Quarto chunks. Thanks to @andrewheiss for report #303.\nreplace does not work in LaTeX with format_tt(quarto=TRUE). Thanks to @cbgoodman for Issue #263.\nstyle_tt(indent) works for LaTeX\nNotes were hard-coded to 5 colspan. We now use the actual number of columns in the table. Thanks to @DominikVogel for report #788.\nDo not suppress labels when inserting notes. Thanks to @cportner for Issue #290.\nformat_tt() on a table without column names. Thanks to @andrewheiss for report #306.\nrequires [] in tabularray but () otherwise. Thanks to @andrewheiss for report #307.\n\n\n\n\n\nBreaking change:\n\nThe width argument is moved from style_tt() to tt().\n\ntt():\n\nwidth argument now accepts a vector of numeric values to control the width of each column, as a proportion of the total linewidth.\n\nformat_tt():\n\nNew 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.\nNew replace argument which accepts a single logical, a single string, or a named list to specify multiple replacements.\nreplace=TRUE by default replaces NA by an empty string. FALSE prints “NA” as string.\nreplace_na is deprecated in favor of replace. Backward compatibility is maintained and a warning is issued.\nAll arguments can now be set using global options.\n\ntheme_tt():\n\n“void” is now supported for Typst tables. Thanks to @marcboschmatas for PR #223.\n\nstyle_tt():\n\nNo longer keep many versions of the same data frame, which could increase memory use. Thanks to @MarcoPortmann for the report.\n\nsave_tt():\n\nDo not change working directory when saving to file raises an error. Thanks to @etiennebacher for report #225.\n\nTypst:\n\nBetter compatibility with Quarto captions. Recommended strategy is to not use the 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.\nformat_tt(escape=TRUE) escapes square brackets.\nTables are centered by default.\n\nMisc:\n\nSupport beamer_presentations, but see: https://github.com/vincentarelbundock/tinytable/issues/244\nTable objects can be modified and printed several times —with styling— in a single HTML document like a ReavealJS slideshow. Thanks to @kazuyanagimoto for report #759.\nGlobal option to enable Quarto data processing: options(tinytable_quarto_disable_processing = FALSE). Thanks to @andrewheiss for issue #215.\n\nBug fixes:\n\nData frames without column headers could be displayed as “c(1,2,3,3)”. Bug in format_tt(). Issue #230.\nsave_tt() can now save to PDF when the table includes a caption. Thanks to @etiennebacher for report #224.\ngroup_tt(i) inserted an extra latex column, which made horizontal lines stop to early. Thanks to @andrewheiss for report #235.\nMultiple unnamed footnotes allowed in LaTeX tabularray. Issue #242.\n\n\n\n\n\nRStudio displays table in HTML viewer by default when the rstudioapi package is available.\ncolnames and colnames<- are now exported functions.\ntt() supports data.frame-like objects which also inherit from other classes, ex: marginaleffects::slopes()\nBug: options(tinytable_tt_print) is respected in print() without argument.\n\n\n\n\nNew features:\n\nrbind() and rbind2() can be used to stack tinytable objects. rbind2() is more flexible than rbind(). See ?tinytable::rbind2\nNew output format in print(): “dataframe”\nRename table headers: colnames(tab) <- c(\"a\", \"b\", \"c\")\ntheme_tt(\"resize\") gets a direction argument with “up”, “down”, “both” options. Thanks to @MarcoPortmann for feature request #207\n\nMinor:\n\nInformative error message when no default browser is selected via global options.\nFix CRAN errors on Mac old releases.\n\nBugs:\n\ntheme_tt() resize issue with talltblr environment and notes in LaTeX. Thanks to @MarcoPortmann for reporting issue #206\n\n\n\n\nNew function theme_tt():\n\nFunction to apply collections of transformations to a tinytable.\nVisual themes:\n\ngrid, void, striped, bootstrap, default\n\nresize: Insert a LaTeX table in a resizebox environment to ensure a table fits the page, or to scale it to a fraction of \\linewidth\nplacement: Determine where a LaTeX table float is positioned. Ex: [H], [htbp]\nmultipage: Split long LaTeX tables across multiple pages with (optional) repeated headers/footers. Uses the longtblr environment from tabularray.\n\nformat_tt():\n\nNew i argument to format subsets of rows.\nNew fn argument which accepts an arbitrary function to format table content.\nnum_fmt=\"significant_cell\" rounds significant digits on a cell-by-cell basis rather than for full columns (as is default in base R format()).\nNumeric formatting options can be set via global options, defined in the function signature.\nnum_mark_big and num_mark_dec require an explicit digits. We now raise an informative error.\nescape = 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.\n\nTypst format:\n\nSupport for row headers with group_tt(i)\nSupports images and inline plots with plot_tt(). Thanks to @aghaynes for contribution #155.\n“kind: tinytable” parameter is now added to all figures enclosing a tinytable. This allows users to apply targeted show rules. For example, in a table of contents: outline(target: figure.where(kind: \"tinytable\"))\n\nMisc:\n\nstyle_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.\nstyle_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.\nSupport RevealJS slides in Quarto documents.\nImproved support for 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.\nNew tinytable_tt_digits global option can set the default number of digits in the tt() function.\nRefactor: tinytable objects are now S4 class objects, with slots to hold data about the content and structure.\nas.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).\nLaTeX code in captions no longer requires double escaping, allowing: tt(x, caption = \"Blah blah \\\\label{tab:blah})\n\nBreaking changes:\n\nIn some cases, 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.\ntinytable objects no longer have a meta_tinytable attribute. Use S4 slots instead.\nplacement argument in tt() is removed in favor of theme_tt(\"placement\").\n\nBugs:\n\nformat_tt() did not work on factor vector.\n\n\n\n\n\nformat_tt() escapes <> tags in Typst.\nBug introduced in 0.0.4 prevented group_tt(i) in HTML.\n\n\n\n\nNew:\n\nj argument in style_tt() and format_tt() now accepts a string vector to match columns. Issue #122\nLine plots: plot_tt(fun = \"line\")\nformat_tt(j=NULL, escape=TRUE) now escapes column headers in addition to all cells.\nformat_tt() gains a replace_na argument to replace missing values.\nstyle_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.\nstyle_tt(): alignv argument is now supported for LaTeX and HTML\n\nBugfix:\n\nMarkdown group columns when labels are wider than columns. Thanks to @etiennebacher for report #127.\nMarkdown group rows broke indexing when using style_tt(). Thanks to @strengejacke for report #133.\n\n\n\n\nNew:\n\nTypst tables are now supported using the tablex extension:\n\nhttps://typst.app/\nhttps://github.com/PgBiel/typst-tablex\n\nescape argument in format_tt() escapes or substitutes special characters in LaTeX or HTML output to prevent compilation and rendering errors.\nnotes argument in tt() can insert superscript markers inside cells to refer to notes at the bottom of the page.\n\ntt(x, notes = list(\"*\" = list(i = 0:1, j = 2, text = \"Hello world)))\n\nnotes agument in tt() now works wth Markdown and Word, but must be a single string.\ngroup_tt() can be called multiple times to create mult-row headers.\n\n\n\n\nImprovements:\n\nRules and cell borders: line, line_width, and line_color arguments.\nEnhanced knitr output detection.\nNew themes.\nCaption argument support for Markdown tables.\nDefensive programming enhancements.\nplot_tt() regular expression column selection.\nHeader/footer are no longer indented by group_tt(i).\n\nBug fixes:\n\nInline plots visibility in RStudio viewer pane.\nBug in group_tt(i) for markdown and docx output.\nResolved style_tt resetting issue.\nBug fix for column alignment in markdown affecting docx output.\n\nDocumentation:\n\nImproved vignette on the package website.\nVarious documentation updates.\nMath in $$ is the new recommendation.\n\n\n\n\nInitial package release. Yay!", + "text": "New:\n\nThe 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.\nstyle_tt() gets new output argument for conditional styling based on output format.\nnames() method now supported for both returning column names and re-assingning them. Issue #332.\n\nTypst:\n\nTable code is much more concise and efficient.\nFix indexing bug for groups. Issue #323 and #343.\nstyle_tt() can override cell styling with successive calls, and the call order is respected.\n\n\n\n\n\n\nHTML 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:\noptions(tinytable_html_mathjax = TRUE)\nAlternatively, users can insert appropriate scripts directly in their HTML document or as a Quarto literal chunk:\n```{=html}\n<script id=\"MathJax-script\" async src=\"https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js\"></script>\n<script>\nMathJax = {\n tex: {\n inlineMath: [['$', '$'], ['\\\\(', '\\\\)']]\n },\n svg: {\n fontCache: 'global'\n }\n};\n</script>\n```\n\nOption tinytable_markdown_hlines has been removed. To get a more minimal looking markdown table, use output “gfm” which is gfm compliant.\n\n\n\n\n\nGlobal options are more consistent and better documented. Thanks to @kylebutts for PR #313.\nSupport Viewer Pane in Positron IDE. Thank to @kylebutts for code contribution in PR #299.\nImproved documentation.\nformat_tt(markdown=TRUE) escapes groups and notes when i and j are NULL.\nplot_tt(): The height argument is now respected in Markdown and Word documents.\ngroup_tt() allows 0 and duplicates in i argument for labels in the first row and consecutive labels.\nHeaders are now styled and formatted when i=NULL.\ncolnames(x)<-NULL works on a tinytable object.\nformat_tt(num_big_mark) applies to integer columns.\nUse getOption(\"viewer\") instead of rstudioapi::viewer() for positron support\nglue::glue() string is accepted by format_tt(). Thanks to @LukasWallrich for report #792 on the modelsummary repository.\nSupport Github Flavored Markdown (gfm) output. Thanks to @kylebutts for contribution #315.\ntheme_tt(\"rotate\") to rotate tables in LaTeX or Typst.\nsave_tt(\"/path/to/file\") returns the file path invisibly. Thanks to @yjunechoe for issue #328.\n\n\n\n\n\nSimplify JS functions in HTML documents. Avoid nesting full HTML documents inside Quarto output.\nRemove polyfill JS because of security issues.\nAvoid error in interactive use in Positron.\n\n\n\n\n\ntheme_tt(\"tabular\") no longer uses tabularray or booktabs. Only relies on basic LaTeX packages.\ntheme_tt(\"tabular\", style = \"tabularray\") does the same as above, but keeps the \\begin{tblr} environment.\n\n\n\n\n\nstyle_tt() supports align for different rows and cells, rather than just whole columns.\nstyle_tt() supports indent argument.\ngroup_tt() supports indent argument.\nNo more gutters when group_tt(j) and style_tt(background)\ntheme_tt(x, horizontal = \"l\") can left, center, or right-align a table in the page.\n\n\n\n\n\nsave_tt(\"pdf\"):\n\noptions(tinytable_save_pdf_clean = TRUE)\noptions(tinytable_save_pdf_engine = \"xelatex\")\n\noptions(tinytable_tt_rownames=TRUE): Print row names in the first column by calling. Thanks to @rsbivand for Issue #264.\nEXPERIMENTAL: options(tinytable_html_mathjax = TRUE). Inserts MathJax scripts in the HTML file. This may cause conflicts if MathJax is otherwise loaded in the document.\n\n\n\n\n\nFootnotes were center-aligned in some Quarto chunks. Thanks to @andrewheiss for report #303.\nreplace does not work in LaTeX with format_tt(quarto=TRUE). Thanks to @cbgoodman for Issue #263.\nstyle_tt(indent) works for LaTeX\nNotes were hard-coded to 5 colspan. We now use the actual number of columns in the table. Thanks to @DominikVogel for report #788.\nDo not suppress labels when inserting notes. Thanks to @cportner for Issue #290.\nformat_tt() on a table without column names. Thanks to @andrewheiss for report #306.\nrequires [] in tabularray but () otherwise. Thanks to @andrewheiss for report #307.\n\n\n\n\n\nBreaking change:\n\nThe width argument is moved from style_tt() to tt().\n\ntt():\n\nwidth argument now accepts a vector of numeric values to control the width of each column, as a proportion of the total linewidth.\n\nformat_tt():\n\nNew 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.\nNew replace argument which accepts a single logical, a single string, or a named list to specify multiple replacements.\nreplace=TRUE by default replaces NA by an empty string. FALSE prints “NA” as string.\nreplace_na is deprecated in favor of replace. Backward compatibility is maintained and a warning is issued.\nAll arguments can now be set using global options.\n\ntheme_tt():\n\n“void” is now supported for Typst tables. Thanks to @marcboschmatas for PR #223.\n\nstyle_tt():\n\nNo longer keep many versions of the same data frame, which could increase memory use. Thanks to @MarcoPortmann for the report.\n\nsave_tt():\n\nDo not change working directory when saving to file raises an error. Thanks to @etiennebacher for report #225.\n\nTypst:\n\nBetter compatibility with Quarto captions. Recommended strategy is to not use the 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.\nformat_tt(escape=TRUE) escapes square brackets.\nTables are centered by default.\n\nMisc:\n\nSupport beamer_presentations, but see: https://github.com/vincentarelbundock/tinytable/issues/244\nTable objects can be modified and printed several times —with styling— in a single HTML document like a ReavealJS slideshow. Thanks to @kazuyanagimoto for report #759.\nGlobal option to enable Quarto data processing: options(tinytable_quarto_disable_processing = FALSE). Thanks to @andrewheiss for issue #215.\n\nBug fixes:\n\nData frames without column headers could be displayed as “c(1,2,3,3)”. Bug in format_tt(). Issue #230.\nsave_tt() can now save to PDF when the table includes a caption. Thanks to @etiennebacher for report #224.\ngroup_tt(i) inserted an extra latex column, which made horizontal lines stop to early. Thanks to @andrewheiss for report #235.\nMultiple unnamed footnotes allowed in LaTeX tabularray. Issue #242.\n\n\n\n\n\nRStudio displays table in HTML viewer by default when the rstudioapi package is available.\ncolnames and colnames<- are now exported functions.\ntt() supports data.frame-like objects which also inherit from other classes, ex: marginaleffects::slopes()\nBug: options(tinytable_tt_print) is respected in print() without argument.\n\n\n\n\nNew features:\n\nrbind() and rbind2() can be used to stack tinytable objects. rbind2() is more flexible than rbind(). See ?tinytable::rbind2\nNew output format in print(): “dataframe”\nRename table headers: colnames(tab) <- c(\"a\", \"b\", \"c\")\ntheme_tt(\"resize\") gets a direction argument with “up”, “down”, “both” options. Thanks to @MarcoPortmann for feature request #207\n\nMinor:\n\nInformative error message when no default browser is selected via global options.\nFix CRAN errors on Mac old releases.\n\nBugs:\n\ntheme_tt() resize issue with talltblr environment and notes in LaTeX. Thanks to @MarcoPortmann for reporting issue #206\n\n\n\n\nNew function theme_tt():\n\nFunction to apply collections of transformations to a tinytable.\nVisual themes:\n\ngrid, void, striped, bootstrap, default\n\nresize: Insert a LaTeX table in a resizebox environment to ensure a table fits the page, or to scale it to a fraction of \\linewidth\nplacement: Determine where a LaTeX table float is positioned. Ex: [H], [htbp]\nmultipage: Split long LaTeX tables across multiple pages with (optional) repeated headers/footers. Uses the longtblr environment from tabularray.\n\nformat_tt():\n\nNew i argument to format subsets of rows.\nNew fn argument which accepts an arbitrary function to format table content.\nnum_fmt=\"significant_cell\" rounds significant digits on a cell-by-cell basis rather than for full columns (as is default in base R format()).\nNumeric formatting options can be set via global options, defined in the function signature.\nnum_mark_big and num_mark_dec require an explicit digits. We now raise an informative error.\nescape = 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.\n\nTypst format:\n\nSupport for row headers with group_tt(i)\nSupports images and inline plots with plot_tt(). Thanks to @aghaynes for contribution #155.\n“kind: tinytable” parameter is now added to all figures enclosing a tinytable. This allows users to apply targeted show rules. For example, in a table of contents: outline(target: figure.where(kind: \"tinytable\"))\n\nMisc:\n\nstyle_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.\nstyle_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.\nSupport RevealJS slides in Quarto documents.\nImproved support for 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.\nNew tinytable_tt_digits global option can set the default number of digits in the tt() function.\nRefactor: tinytable objects are now S4 class objects, with slots to hold data about the content and structure.\nas.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).\nLaTeX code in captions no longer requires double escaping, allowing: tt(x, caption = \"Blah blah \\\\label{tab:blah})\n\nBreaking changes:\n\nIn some cases, 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.\ntinytable objects no longer have a meta_tinytable attribute. Use S4 slots instead.\nplacement argument in tt() is removed in favor of theme_tt(\"placement\").\n\nBugs:\n\nformat_tt() did not work on factor vector.\n\n\n\n\n\nformat_tt() escapes <> tags in Typst.\nBug introduced in 0.0.4 prevented group_tt(i) in HTML.\n\n\n\n\nNew:\n\nj argument in style_tt() and format_tt() now accepts a string vector to match columns. Issue #122\nLine plots: plot_tt(fun = \"line\")\nformat_tt(j=NULL, escape=TRUE) now escapes column headers in addition to all cells.\nformat_tt() gains a replace_na argument to replace missing values.\nstyle_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.\nstyle_tt(): alignv argument is now supported for LaTeX and HTML\n\nBugfix:\n\nMarkdown group columns when labels are wider than columns. Thanks to @etiennebacher for report #127.\nMarkdown group rows broke indexing when using style_tt(). Thanks to @strengejacke for report #133.\n\n\n\n\nNew:\n\nTypst tables are now supported using the tablex extension:\n\nhttps://typst.app/\nhttps://github.com/PgBiel/typst-tablex\n\nescape argument in format_tt() escapes or substitutes special characters in LaTeX or HTML output to prevent compilation and rendering errors.\nnotes argument in tt() can insert superscript markers inside cells to refer to notes at the bottom of the page.\n\ntt(x, notes = list(\"*\" = list(i = 0:1, j = 2, text = \"Hello world)))\n\nnotes agument in tt() now works wth Markdown and Word, but must be a single string.\ngroup_tt() can be called multiple times to create mult-row headers.\n\n\n\n\nImprovements:\n\nRules and cell borders: line, line_width, and line_color arguments.\nEnhanced knitr output detection.\nNew themes.\nCaption argument support for Markdown tables.\nDefensive programming enhancements.\nplot_tt() regular expression column selection.\nHeader/footer are no longer indented by group_tt(i).\n\nBug fixes:\n\nInline plots visibility in RStudio viewer pane.\nBug in group_tt(i) for markdown and docx output.\nResolved style_tt resetting issue.\nBug fix for column alignment in markdown affecting docx output.\n\nDocumentation:\n\nImproved vignette on the package website.\nVarious documentation updates.\nMath in $$ is the new recommendation.\n\n\n\n\nInitial package release. Yay!", "crumbs": [ "Tutorial (PDF)", "News" @@ -518,7 +518,7 @@ "href": "NEWS.html#development", "title": "News", "section": "", - "text": "New:\n\nThe 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.\nstyle_tt() gets new output argument for conditional styling based on output format.\nnames() method now supported for both returning column names and re-assingning them. Issue #332.\n\nTypst:\n\nTable code is much more concise and efficient.\nFix indexing bug for groups. Issue #323 and #343.", + "text": "New:\n\nThe 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.\nstyle_tt() gets new output argument for conditional styling based on output format.\nnames() method now supported for both returning column names and re-assingning them. Issue #332.\n\nTypst:\n\nTable code is much more concise and efficient.\nFix indexing bug for groups. Issue #323 and #343.\nstyle_tt() can override cell styling with successive calls, and the call order is respected.", "crumbs": [ "Tutorial (PDF)", "News" @@ -639,7 +639,7 @@ "href": "vignettes/format.html", "title": "Formatting", "section": "", - "text": "library(tinytable)\noptions(tinytable_tt_digits = 3)\noptions(tinytable_theme_placement_latex_float = \"H\")\nx <- mtcars[1:4, 1:5]\n\n\n\nThe tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1970-02-19\n True \n \n \n 201399\n 201.4 \n 1971-09-02\n True \n \n \n 100188\n 0.13\n 1971-11-08\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n February 19 1970\n True\n \n \n 201 399,18\n 201.4\n September 02 1971\n True\n \n \n 100 188,39\n 0.1\n November 08 1971\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K\n\n\n\n\n\nBy default, format_tt() formats numbers to ensure that the smallest value in a vector (column) has at least a certain number of significant digits. For example,\n\nk <- data.frame(x = c(0.000123456789, 12.4356789))\ntt(k, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12.43568\n \n \n \n \n\n\n\nWe can alter this behavior to ensure to round significant digits on a per-cell basis, using the num_fmt argument in format_tt():\n\ntt(k) |> format_tt(digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\n\nThe numeric formatting options in format_tt() can also be controlled using global options:\n\noptions(\"tinytable_tt_digits\" = 2)\noptions(\"tinytable_format_num_fmt\" = \"significant_cell\")\ntt(k)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12 \n \n \n \n \n\n\n\n\n\n\nMissing values can be replaced by a custom string using the replace argument (default \"\"):\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\n\ntt(tab)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n NA\n 3\n \n \n 1\n NA\n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt()\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n \n 3\n \n \n 1\n \n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\n\nWe can also specify multiple value replacements at once using a named list of vectors:\n\ntmp <- data.frame(x = 1:5, y = c(pi, NA, NaN, -Inf, Inf))\ndict <- list(\"-\" = c(NA, NaN), \"-∞\" = -Inf, \"∞\" = Inf)\ntt(tmp) |> format_tt(replace = dict, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n x\n y\n \n \n \n \n \n 1\n 3.1\n \n \n 2\n -\n \n \n 3\n -\n \n \n 4\n -∞\n \n \n 5\n ∞\n \n \n \n \n\n\n\n\n\n\nLaTeX and HTML use special characters to indicate strings which should be interpreted rather than displayed as text. For example, including underscores or dollar signs in LaTeX can cause compilation errors in some documents. To display those special characters, we need to substitute or escape them with backslashes, depending on the output format. The escape argument of format_tt() can be used to do this automatically:\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\n\ntt(dat) |> format_tt(escape = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>\n \n \n \n \n\n\n\nWhen applied to a tt() table, format_tt() will determine the type of escaping to do automatically. When applied to a string or vector, we must specify the type of escaping to apply:\n\nformat_tt(\"_ Dollars $\", escape = \"latex\")\n\n[1] \"\\\\_ Dollars \\\\$\"\n\n\n\n\n\nMarkdown can be rendered in cells by using the markdown argument of the format_tt() function (note: this requires installing the markdown as an optional dependency).\n\ndat <- data.frame( markdown = c(\n \"This is _italic_ text.\",\n \"This sentence ends with a superscript.^2^\")\n)\n\ntt(dat) |>\n format_tt(j = 1, markdown = TRUE) |>\n style_tt(j = 1, align = \"c\")\n\n\n\n \n\n \n \n \n \n \n \n markdown\n \n \n \n \n \n This is italic text.\n \n \n This sentence ends with a superscript.2\n \n \n \n \n\n\n\nMarkdown syntax can be particularly useful when formatting URLs in a table:\n\ndat <- data.frame(\n `Package (link)` = c(\n \"[`marginaleffects`](https://www.marginaleffects.com/)\",\n \"[`modelsummary`](https://www.modelsummary.com/)\",\n \"[`tinytable`](https://vincentarelbundock.github.io/tinytable/)\",\n \"[`countrycode`](https://vincentarelbundock.github.io/countrycode/)\",\n \"[`WDI`](https://vincentarelbundock.github.io/WDI/)\",\n \"[`softbib`](https://vincentarelbundock.github.io/softbib/)\",\n \"[`tinysnapshot`](https://vincentarelbundock.github.io/tinysnapshot/)\",\n \"[`altdoc`](https://etiennebacher.github.io/altdoc/)\",\n \"[`tinyplot`](https://grantmcdermott.com/tinyplot/)\",\n \"[`parameters`](https://easystats.github.io/parameters/)\",\n \"[`insight`](https://easystats.github.io/insight/)\"\n ),\n Purpose = c(\n \"Interpreting statistical models\",\n \"Data and model summaries\",\n \"Draw beautiful tables easily\",\n \"Convert country codes and names\",\n \"Download data from the World Bank\",\n \"Software bibliographies in R\",\n \"Snapshots for unit tests using `tinytest`\",\n \"Create documentation website for R packages\",\n \"Extension of base R plot functions\",\n \"Extract from model objects\",\n \"Extract information from model objects\"\n ),\n check.names = FALSE\n)\n\ntt(dat) |> format_tt(j = 1, markdown = TRUE)\n\n\n\n \n\n \n \n Vincent sometimes contributes to these R packages.\n \n \n \n Package (link)\n Purpose\n \n \n \n \n \n marginaleffects\n Interpreting statistical models \n \n \n modelsummary\n Data and model summaries \n \n \n tinytable\n Draw beautiful tables easily \n \n \n countrycode\n Convert country codes and names \n \n \n WDI\n Download data from the World Bank \n \n \n softbib\n Software bibliographies in R \n \n \n tinysnapshot\n Snapshots for unit tests using `tinytest` \n \n \n altdoc\n Create documentation website for R packages\n \n \n tinyplot\n Extension of base R plot functions \n \n \n parameters\n Extract from model objects \n \n \n insight\n Extract information from model objects \n \n \n \n \n\n\n\n\n\n\nOn top of the built-in features of format_tt, a custom formatting function can be specified via the fn argument. The fn argument takes a function that accepts a single vector and returns a string (or something that coerces to a string like a number).\n\ntt(x) |> \n format_tt(j = \"mpg\", fn = function(x) paste0(x, \" mpg\")) |>\n format_tt(j = \"drat\", fn = \\(x) signif(x, 2))\n\n\n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 22.8 mpg\n 4\n 108\n 93\n 3.8\n \n \n 21.4 mpg\n 6\n 258\n 110\n 3.1\n \n \n \n \n\n\n\nFor example, the scales package which is used internally by ggplot2 provides a bunch of useful tools for formatting (e.g. dates, numbers, percents, logs, currencies, etc.). The label_*() functions can be passed to the fn argument.\nNote that we call format_tt(escape = TRUE) at the end of the pipeline because the column names and cells include characters that need to be escaped in LaTeX: _, %, and $. This last call is superfluous in HTML.\n\nthumbdrives <- data.frame(\n date_lookup = as.Date(c(\"2024-01-15\", \"2024-01-18\", \"2024-01-14\", \"2024-01-16\")),\n price = c(18.49, 19.99, 24.99, 24.99),\n price_rank = c(1, 2, 3, 3),\n memory = c(16e9, 12e9, 10e9, 8e9),\n speed_benchmark = c(0.6, 0.73, 0.82, 0.99)\n)\n\ntt(thumbdrives) |>\n format_tt(j = 1, fn = scales::label_date(\"%e %b\", locale = \"fr\")) |>\n format_tt(j = 2, fn = scales::label_currency()) |>\n format_tt(j = 3, fn = scales::label_ordinal()) |> \n format_tt(j = 4, fn = scales::label_bytes()) |> \n format_tt(j = 5, fn = scales::label_percent()) |>\n format_tt(escape = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n date_lookup\n price\n price_rank\n memory\n speed_benchmark\n \n \n \n \n \n 2024-01-15\n $18.49\n 1st\n 16 GB\n 60%\n \n \n 2024-01-18\n $19.99\n 2nd\n 12 GB\n 73%\n \n \n 2024-01-14\n $24.99\n 3rd\n 10 GB\n 82%\n \n \n 2024-01-16\n $24.99\n 3rd\n 8 GB\n 99%\n \n \n \n \n\n\n\n\n\n\nQuarto automatically applies some data processing to the content of the tables it renders. By default, tinytable disables this processing, because it can enter in conflict with styling and formatting features of the package.\nTo enable Quarto data processing, we can use the quarto argument of the format_tt() function. This argument allows users to mark certain cells explicitly for processing by Quarto, by wrapping them in a special “span” called “data-qmd”, supported by Quarto:\n\nk <- data.frame(Thing = \"qwerty\", Citation = \"@Lovelace1842\")\n\ntt(k) |> format_tt(quarto = TRUE)\n\n\n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nSome users may want to apply Quarto data processing to all tables. This can be done with themes:\n\ntheme_quarto <- function(x) format_tt(x, quarto = TRUE)\noptions(tinytable_tt_theme = theme_quarto)\n\ntt(k)\n\n\n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nBack to normal:\n\noptions(tinytable_tt_theme = NULL)\n\nAlternatively, users can set a global option to process all tables in Quarto, but they will then have to mark each cell with special content using format_tt(quarto):\n\noptions(tinytable_quarto_disable_processing = FALSE)\n\ntt(x)\n\n\n\n \n\n \n \n \n\n\n\nmpg\ncyl\ndisp\nhp\ndrat\n\n\n\n\n21.0\n6\n160\n110\n3.90\n\n\n21.0\n6\n160\n110\n3.90\n\n\n22.8\n4\n108\n93\n3.85\n\n\n21.4\n6\n258\n110\n3.08\n\n\n\n\n \n\n\n\nNotice that Quarto is now processing the table, so we lose the default tinytable theme and get the default striped Quarto look.\nBack to normal:\n\noptions(tinytable_quarto_disable_processing = TRUE)", + "text": "library(tinytable)\noptions(tinytable_tt_digits = 3)\noptions(tinytable_theme_placement_latex_float = \"H\")\nx <- mtcars[1:4, 1:5]\n\n\n\nThe tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1971-05-09\n True \n \n \n 201399\n 201.4 \n 1972-02-24\n True \n \n \n 100188\n 0.13\n 1972-03-20\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n May 09 1971\n True\n \n \n 201 399,18\n 201.4\n February 24 1972\n True\n \n \n 100 188,39\n 0.1\n March 20 1972\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K\n\n\n\n\n\nBy default, format_tt() formats numbers to ensure that the smallest value in a vector (column) has at least a certain number of significant digits. For example,\n\nk <- data.frame(x = c(0.000123456789, 12.4356789))\ntt(k, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12.43568\n \n \n \n \n\n\n\nWe can alter this behavior to ensure to round significant digits on a per-cell basis, using the num_fmt argument in format_tt():\n\ntt(k) |> format_tt(digits = 2, num_fmt = \"significant_cell\")\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12\n \n \n \n \n\n\n\nThe numeric formatting options in format_tt() can also be controlled using global options:\n\noptions(\"tinytable_tt_digits\" = 2)\noptions(\"tinytable_format_num_fmt\" = \"significant_cell\")\ntt(k)\n\n\n\n \n\n \n \n \n \n \n \n x\n \n \n \n \n \n 0.00012\n \n \n 12 \n \n \n \n \n\n\n\n\n\n\nMissing values can be replaced by a custom string using the replace argument (default \"\"):\n\ntab <- data.frame(a = c(NA, 1, 2), b = c(3, NA, 5))\n\ntt(tab)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n NA\n 3\n \n \n 1\n NA\n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt()\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n \n 3\n \n \n 1\n \n \n \n 2\n 5\n \n \n \n \n\n\ntt(tab) |> format_tt(replace = \"-\")\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n \n \n \n \n \n -\n 3\n \n \n 1\n -\n \n \n 2\n 5\n \n \n \n \n\n\n\nWe can also specify multiple value replacements at once using a named list of vectors:\n\ntmp <- data.frame(x = 1:5, y = c(pi, NA, NaN, -Inf, Inf))\ndict <- list(\"-\" = c(NA, NaN), \"-∞\" = -Inf, \"∞\" = Inf)\ntt(tmp) |> format_tt(replace = dict, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n x\n y\n \n \n \n \n \n 1\n 3.1\n \n \n 2\n -\n \n \n 3\n -\n \n \n 4\n -∞\n \n \n 5\n ∞\n \n \n \n \n\n\n\n\n\n\nLaTeX and HTML use special characters to indicate strings which should be interpreted rather than displayed as text. For example, including underscores or dollar signs in LaTeX can cause compilation errors in some documents. To display those special characters, we need to substitute or escape them with backslashes, depending on the output format. The escape argument of format_tt() can be used to do this automatically:\n\ndat <- data.frame(\n \"LaTeX\" = c(\"Dollars $\", \"Percent %\", \"Underscore _\"),\n \"HTML\" = c(\"<br>\", \"<sup>4</sup>\", \"<emph>blah</emph>\")\n)\n\ntt(dat) |> format_tt(escape = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n LaTeX\n HTML\n \n \n \n \n \n Dollars $\n <br>\n \n \n Percent %\n <sup>4</sup>\n \n \n Underscore _\n <emph>blah</emph>\n \n \n \n \n\n\n\nWhen applied to a tt() table, format_tt() will determine the type of escaping to do automatically. When applied to a string or vector, we must specify the type of escaping to apply:\n\nformat_tt(\"_ Dollars $\", escape = \"latex\")\n\n[1] \"\\\\_ Dollars \\\\$\"\n\n\n\n\n\nMarkdown can be rendered in cells by using the markdown argument of the format_tt() function (note: this requires installing the markdown as an optional dependency).\n\ndat <- data.frame( markdown = c(\n \"This is _italic_ text.\",\n \"This sentence ends with a superscript.^2^\")\n)\n\ntt(dat) |>\n format_tt(j = 1, markdown = TRUE) |>\n style_tt(j = 1, align = \"c\")\n\n\n\n \n\n \n \n \n \n \n \n markdown\n \n \n \n \n \n This is italic text.\n \n \n This sentence ends with a superscript.2\n \n \n \n \n\n\n\nMarkdown syntax can be particularly useful when formatting URLs in a table:\n\ndat <- data.frame(\n `Package (link)` = c(\n \"[`marginaleffects`](https://www.marginaleffects.com/)\",\n \"[`modelsummary`](https://www.modelsummary.com/)\",\n \"[`tinytable`](https://vincentarelbundock.github.io/tinytable/)\",\n \"[`countrycode`](https://vincentarelbundock.github.io/countrycode/)\",\n \"[`WDI`](https://vincentarelbundock.github.io/WDI/)\",\n \"[`softbib`](https://vincentarelbundock.github.io/softbib/)\",\n \"[`tinysnapshot`](https://vincentarelbundock.github.io/tinysnapshot/)\",\n \"[`altdoc`](https://etiennebacher.github.io/altdoc/)\",\n \"[`tinyplot`](https://grantmcdermott.com/tinyplot/)\",\n \"[`parameters`](https://easystats.github.io/parameters/)\",\n \"[`insight`](https://easystats.github.io/insight/)\"\n ),\n Purpose = c(\n \"Interpreting statistical models\",\n \"Data and model summaries\",\n \"Draw beautiful tables easily\",\n \"Convert country codes and names\",\n \"Download data from the World Bank\",\n \"Software bibliographies in R\",\n \"Snapshots for unit tests using `tinytest`\",\n \"Create documentation website for R packages\",\n \"Extension of base R plot functions\",\n \"Extract from model objects\",\n \"Extract information from model objects\"\n ),\n check.names = FALSE\n)\n\ntt(dat) |> format_tt(j = 1, markdown = TRUE)\n\n\n\n \n\n \n \n Vincent sometimes contributes to these R packages.\n \n \n \n Package (link)\n Purpose\n \n \n \n \n \n marginaleffects\n Interpreting statistical models \n \n \n modelsummary\n Data and model summaries \n \n \n tinytable\n Draw beautiful tables easily \n \n \n countrycode\n Convert country codes and names \n \n \n WDI\n Download data from the World Bank \n \n \n softbib\n Software bibliographies in R \n \n \n tinysnapshot\n Snapshots for unit tests using `tinytest` \n \n \n altdoc\n Create documentation website for R packages\n \n \n tinyplot\n Extension of base R plot functions \n \n \n parameters\n Extract from model objects \n \n \n insight\n Extract information from model objects \n \n \n \n \n\n\n\n\n\n\nOn top of the built-in features of format_tt, a custom formatting function can be specified via the fn argument. The fn argument takes a function that accepts a single vector and returns a string (or something that coerces to a string like a number).\n\ntt(x) |> \n format_tt(j = \"mpg\", fn = function(x) paste0(x, \" mpg\")) |>\n format_tt(j = \"drat\", fn = \\(x) signif(x, 2))\n\n\n\n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 21 mpg\n 6\n 160\n 110\n 3.9\n \n \n 22.8 mpg\n 4\n 108\n 93\n 3.8\n \n \n 21.4 mpg\n 6\n 258\n 110\n 3.1\n \n \n \n \n\n\n\nFor example, the scales package which is used internally by ggplot2 provides a bunch of useful tools for formatting (e.g. dates, numbers, percents, logs, currencies, etc.). The label_*() functions can be passed to the fn argument.\nNote that we call format_tt(escape = TRUE) at the end of the pipeline because the column names and cells include characters that need to be escaped in LaTeX: _, %, and $. This last call is superfluous in HTML.\n\nthumbdrives <- data.frame(\n date_lookup = as.Date(c(\"2024-01-15\", \"2024-01-18\", \"2024-01-14\", \"2024-01-16\")),\n price = c(18.49, 19.99, 24.99, 24.99),\n price_rank = c(1, 2, 3, 3),\n memory = c(16e9, 12e9, 10e9, 8e9),\n speed_benchmark = c(0.6, 0.73, 0.82, 0.99)\n)\n\ntt(thumbdrives) |>\n format_tt(j = 1, fn = scales::label_date(\"%e %b\", locale = \"fr\")) |>\n format_tt(j = 2, fn = scales::label_currency()) |>\n format_tt(j = 3, fn = scales::label_ordinal()) |> \n format_tt(j = 4, fn = scales::label_bytes()) |> \n format_tt(j = 5, fn = scales::label_percent()) |>\n format_tt(escape = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n date_lookup\n price\n price_rank\n memory\n speed_benchmark\n \n \n \n \n \n 2024-01-15\n $18.49\n 1st\n 16 GB\n 60%\n \n \n 2024-01-18\n $19.99\n 2nd\n 12 GB\n 73%\n \n \n 2024-01-14\n $24.99\n 3rd\n 10 GB\n 82%\n \n \n 2024-01-16\n $24.99\n 3rd\n 8 GB\n 99%\n \n \n \n \n\n\n\n\n\n\nQuarto automatically applies some data processing to the content of the tables it renders. By default, tinytable disables this processing, because it can enter in conflict with styling and formatting features of the package.\nTo enable Quarto data processing, we can use the quarto argument of the format_tt() function. This argument allows users to mark certain cells explicitly for processing by Quarto, by wrapping them in a special “span” called “data-qmd”, supported by Quarto:\n\nk <- data.frame(Thing = \"qwerty\", Citation = \"@Lovelace1842\")\n\ntt(k) |> format_tt(quarto = TRUE)\n\n\n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nSome users may want to apply Quarto data processing to all tables. This can be done with themes:\n\ntheme_quarto <- function(x) format_tt(x, quarto = TRUE)\noptions(tinytable_tt_theme = theme_quarto)\n\ntt(k)\n\n\n\n \n\n \n \n \n\n\n\nThing\nCitation\n\n\n\n\nqwerty\nLovelace (1842)\n\n\n\n\n \n\n\n\nBack to normal:\n\noptions(tinytable_tt_theme = NULL)\n\nAlternatively, users can set a global option to process all tables in Quarto, but they will then have to mark each cell with special content using format_tt(quarto):\n\noptions(tinytable_quarto_disable_processing = FALSE)\n\ntt(x)\n\n\n\n \n\n \n \n \n\n\n\nmpg\ncyl\ndisp\nhp\ndrat\n\n\n\n\n21.0\n6\n160\n110\n3.90\n\n\n21.0\n6\n160\n110\n3.90\n\n\n22.8\n4\n108\n93\n3.85\n\n\n21.4\n6\n258\n110\n3.08\n\n\n\n\n \n\n\n\nNotice that Quarto is now processing the table, so we lose the default tinytable theme and get the default striped Quarto look.\nBack to normal:\n\noptions(tinytable_quarto_disable_processing = TRUE)", "crumbs": [ "Tutorial (PDF)", "Tutorial", @@ -651,7 +651,7 @@ "href": "vignettes/format.html#numbers-dates-strings-etc.", "title": "Formatting", "section": "", - "text": "The tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1970-02-19\n True \n \n \n 201399\n 201.4 \n 1971-09-02\n True \n \n \n 100188\n 0.13\n 1971-11-08\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n February 19 1970\n True\n \n \n 201 399,18\n 201.4\n September 02 1971\n True\n \n \n 100 188,39\n 0.1\n November 08 1971\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K", + "text": "The tt() function is minimalist; it’s inteded purpose is simply to draw nice tables. Users who want to format numbers, dates, strings, and other variables in different ways should process their data before supplying it to the tt() table-drawing function. To do so, we can use the format_tt() function supplied by the tinytable.\nIn a very simple case—such as printing 2 significant digits of all numeric variables—we can use the digits argument of tt():\n\ndat <- data.frame(\n w = c(143002.2092, 201399.181, 100188.3883),\n x = c(1.43402, 201.399, 0.134588),\n y = as.Date(sample(1:1000, 3), origin = \"1970-01-01\"),\n z = c(TRUE, TRUE, FALSE))\n\ntt(dat, digits = 2)\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143002\n 1.43\n 1971-05-09\n True \n \n \n 201399\n 201.4 \n 1972-02-24\n True \n \n \n 100188\n 0.13\n 1972-03-20\n False\n \n \n \n \n\n\n\nWe can get more fine-grained control over formatting by calling format_tt() after tt(), optionally by specifying the columns to format with j:\n\ntt(dat) |> \n format_tt(\n j = 2:4,\n digits = 1,\n date = \"%B %d %Y\") |>\n format_tt(\n j = 1,\n digits = 2,\n num_mark_big = \" \",\n num_mark_dec = \",\",\n num_fmt = \"decimal\")\n\n\n\n \n\n \n \n \n \n \n \n w\n x\n y\n z\n \n \n \n \n \n 143 002,21\n 1.4\n May 09 1971\n True\n \n \n 201 399,18\n 201.4\n February 24 1972\n True\n \n \n 100 188,39\n 0.1\n March 20 1972\n False\n \n \n \n \n\n\n\nWe can use a regular expression in j to select columns, and the ?sprintf function to format strings, numbers, and to do string interpolation (similar to the glue package, but using Base R):\n\ndat <- data.frame(\n a = c(\"Burger\", \"Halloumi\", \"Tofu\", \"Beans\"),\n b = c(1.43202, 201.399, 0.146188, 0.0031),\n c = c(98938272783457, 7288839482, 29111727, 93945))\ntt(dat) |>\n format_tt(j = \"a\", sprintf = \"Food: %s\") |>\n format_tt(j = 2, digits = 1) |>\n format_tt(j = \"c\", digits = 2, num_suffix = TRUE)\n\n\n\n \n\n \n \n \n \n \n \n a\n b\n c\n \n \n \n \n \n Food: Burger\n 1.432\n 99T\n \n \n Food: Halloumi\n 201.399\n 7.3B\n \n \n Food: Tofu\n 0.146\n 29M\n \n \n Food: Beans\n 0.003\n 94K\n \n \n \n \n\n\n\nFinally, if you like the format_tt() interface, you can use it directly with numbers, vectors, or data frames:\n\nformat_tt(pi, digits = 1)\n\n[1] \"3\"\n\nformat_tt(dat, digits = 1, num_suffix = TRUE)\n\n a b c\n1 Burger 1 99T\n2 Halloumi 201 7B\n3 Tofu 0.1 29M\n4 Beans 0.003 94K", "crumbs": [ "Tutorial (PDF)", "Tutorial", diff --git a/vignettes/custom.html b/vignettes/custom.html index 8f362d58..b37fb247 100644 --- a/vignettes/custom.html +++ b/vignettes/custom.html @@ -427,12 +427,12 @@

Bootstrap classes

-
+
@@ -532,12 +532,12 @@

Bootstrap classes

-
+
@@ -638,12 +638,12 @@

Bootstrap classes

-
+
@@ -747,12 +747,12 @@

CSS declarations

-
+
@@ -898,12 +898,12 @@

CSS rules

-
+
@@ -1067,12 +1067,12 @@

CSS rules

-
+
diff --git a/vignettes/format.html b/vignettes/format.html index 97ed151a..21b00caa 100644 --- a/vignettes/format.html +++ b/vignettes/format.html @@ -445,12 +445,12 @@

Numbers, dates,
-

+
@@ -510,19 +510,19 @@

Numbers, dates,

- + - + - + @@ -548,12 +548,12 @@

Numbers, dates,
-

143002 1.431970-02-191971-05-09 True
201399 201.4 1971-09-021972-02-24 True
100188 0.131971-11-081972-03-20 False
+
@@ -613,19 +613,19 @@

Numbers, dates,

- + - + - + @@ -648,12 +648,12 @@

Numbers, dates,
-

143 002,21 1.4February 19 1970May 09 1971 True
201 399,18 201.4September 02 1971February 24 1972 True
100 188,39 0.1November 08 1971March 20 1972 False
+
@@ -760,12 +760,12 @@

Significan
-

+
@@ -835,12 +835,12 @@

Significan
-

+
@@ -912,12 +912,12 @@

Significan
-

+
@@ -992,12 +992,12 @@

Replacement

-
+
@@ -1072,12 +1072,12 @@

Replacement

-
+
@@ -1152,12 +1152,12 @@

Replacement

-
+
@@ -1237,12 +1237,12 @@

Replacement

-
+
@@ -1336,12 +1336,12 @@

Escape special c
-

+
@@ -1436,12 +1436,12 @@

Markdown

-
+
@@ -1544,12 +1544,12 @@

Markdown

-
+

Vincent sometimes contributes to these R packages.

@@ -1664,12 +1664,12 @@

Custom functions

-

Vincent sometimes contributes to these R packages.

+
@@ -1784,12 +1784,12 @@

Custom functions

-
+
@@ -1895,12 +1895,12 @@

Quarto data process
-

+
@@ -1973,12 +1973,12 @@

Quarto data process
-

Thing
+
@@ -2054,12 +2054,12 @@

Quarto data process
-

Thing
+
diff --git a/vignettes/group.html b/vignettes/group.html index cd4fea4e..196f9155 100644 --- a/vignettes/group.html +++ b/vignettes/group.html @@ -423,12 +423,12 @@

Rows

-
mpg
+
@@ -619,12 +619,12 @@

Rows

-
+
@@ -753,12 +753,12 @@

Rows

-
+
@@ -886,12 +886,12 @@

Rows

-
+
@@ -1030,12 +1030,12 @@

Rows

-
+
@@ -1259,12 +1259,12 @@

Automatic row groups<
-

+
@@ -1512,12 +1512,12 @@

Columns

-
+
@@ -1716,12 +1716,12 @@

Columns

-
Hamburgers
+
@@ -1946,12 +1946,12 @@

Columns

-
Hamburgers
+
diff --git a/vignettes/plot.html b/vignettes/plot.html index 9d358c80..c92c3a1e 100644 --- a/vignettes/plot.html +++ b/vignettes/plot.html @@ -431,12 +431,12 @@

Inserting image
-

Hello
+
@@ -514,12 +514,12 @@

Inserting image
-

+
@@ -618,12 +618,12 @@

Built-in plots

-
+
@@ -698,24 +698,24 @@

Built-in plots

- - - - + + + + - - - - + + + + - - - - + + + +
mpg
hp
qsec
@@ -744,12 +744,12 @@

Custom plots: Base
- +
@@ -804,15 +804,15 @@

Custom plots: Base

- + - + - +
mpg
hp
qsec
@@ -845,12 +845,12 @@

Custom plots: g
- +
@@ -905,15 +905,15 @@

Custom plots: g

- + - + - +
mpg
hp
qsec
@@ -962,12 +962,12 @@

Custom plots: g
- +
@@ -1037,21 +1037,21 @@

Custom plots: g

- - - + + + - - - + + + - - - + + +
Adelie
Chinstrap
Gentoo
@@ -1073,12 +1073,12 @@

Fontawesome

- +
diff --git a/vignettes/style.html b/vignettes/style.html index 23ab9263..e6237f96 100644 --- a/vignettes/style.html +++ b/vignettes/style.html @@ -449,12 +449,12 @@

Cells, rows, columns
-

+
@@ -561,12 +561,12 @@

Cells, rows, columns
-

+
@@ -673,12 +673,12 @@

Cells, rows, columns
-

+
@@ -799,12 +799,12 @@

Cells, rows, columns
-

+
@@ -915,12 +915,12 @@

Cells, rows, columns
-

+
@@ -1030,12 +1030,12 @@

Cells, rows, columns
-

+
@@ -1142,12 +1142,12 @@

Cells, rows, columns
-

+
@@ -1257,12 +1257,12 @@

Cells, rows, columns
-

+
@@ -1378,12 +1378,12 @@

Cells, rows, columns
-

+
@@ -1505,12 +1505,12 @@

Colors

-
+
@@ -1624,12 +1624,12 @@

Alignment

-
+
@@ -1719,12 +1719,12 @@

Alignment

-
+
@@ -1824,12 +1824,12 @@

Alignment

-
+
@@ -1913,12 +1913,12 @@

Font size

-
+
@@ -2039,12 +2039,12 @@

Spanning cell
-

+
@@ -2147,12 +2147,12 @@

Spanning cell
-

+
@@ -2265,12 +2265,12 @@

Spanning cell
-

+
@@ -2378,12 +2378,12 @@

Spanning cell
-

+
@@ -2459,12 +2459,12 @@

Spanning cell
-

+
@@ -2544,12 +2544,12 @@

Headers

-
+
@@ -2642,12 +2642,12 @@

Headers

-
+
@@ -2747,12 +2747,12 @@

Headers

-
+
@@ -2871,12 +2871,12 @@

Conditional styling
-

+
@@ -3006,12 +3006,12 @@

Conditional styling
-

+
@@ -3138,12 +3138,12 @@

Vectorized sty
-

+
@@ -3271,12 +3271,12 @@

Vectorized sty
-

+
@@ -3407,12 +3407,12 @@

Vectorized sty
-

+
@@ -3561,12 +3561,12 @@

Lines (borders)

-
+
@@ -3676,12 +3676,12 @@

Lines (borders)

-
+
@@ -3792,12 +3792,12 @@

Lines (borders)

-
+
@@ -3883,12 +3883,12 @@

Cell padding
-

+
diff --git a/vignettes/theme.html b/vignettes/theme.html index 9ca46241..4220f256 100644 --- a/vignettes/theme.html +++ b/vignettes/theme.html @@ -419,12 +419,12 @@

Visual themes

-
+
@@ -619,12 +619,12 @@

Visual themes

-
+
@@ -911,12 +911,12 @@

Custom themes

-
Always use the same caption.
+
diff --git a/vignettes/tinytable.html b/vignettes/tinytable.html index 00259cd7..11207fdd 100644 --- a/vignettes/tinytable.html +++ b/vignettes/tinytable.html @@ -423,12 +423,12 @@

Tiny Tables

-
Always use the same caption.
+
@@ -530,12 +530,12 @@

Width

-
+
@@ -634,12 +634,12 @@

Width

-
+
@@ -739,12 +739,12 @@

Width

-
+
@@ -867,12 +867,12 @@

Width

-
+
@@ -1002,12 +1002,12 @@

Width

-
+
@@ -1082,12 +1082,12 @@

Footnotes

-
+

A full-width table with wrapped text in cells and a footnote.

@@ -1160,12 +1160,12 @@

Footnotes

-

A full-width table with wrapped text in cells and a footnote.

+
@@ -1276,12 +1276,12 @@

Footnotes

-
+
@@ -1408,12 +1408,12 @@

Captions and
-

+
@@ -1545,12 +1545,12 @@

Math

-
+
@@ -1630,12 +1630,12 @@

Line breaks
-

+
@@ -1784,12 +1784,12 @@

Combination an
-

+
@@ -1880,12 +1880,12 @@

Combination an
-

+
@@ -1962,12 +1962,12 @@

Combination an
-

+
@@ -2078,12 +2078,12 @@

Combination an
-

Combine two tiny tables.
+
@@ -2198,12 +2198,12 @@

Combination an
-

Combine two tiny tables.
+
@@ -2310,12 +2310,12 @@

Combination an
-

Combine two tiny tables.
+
diff --git a/vignettes/tinytable_assets/id3z04tz4ipap1rqsjzkj9.png b/vignettes/tinytable_assets/id3z04tz4ipap1rqsjzkj9.png new file mode 100644 index 0000000000000000000000000000000000000000..213bef867cbb32b8585b1686f6174bed4a0a6161 GIT binary patch literal 11877 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%0AdNbE50x{a@ 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id3zoxd2fs0k4lv8zehgxz.png b/vignettes/tinytable_assets/id3zoxd2fs0k4lv8zehgxz.png new file mode 100644 index 0000000000000000000000000000000000000000..5f1e6473044bd1b6291d02ab49d447586fdcca56 GIT binary patch literal 11898 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id49lbjdua348spcv6dyhi.png b/vignettes/tinytable_assets/id49lbjdua348spcv6dyhi.png new file mode 100644 index 0000000000000000000000000000000000000000..51ac33e121545a4b551927b2fe78037fdd3f6ce7 GIT binary patch literal 15240 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id7uu1g1y977h82kbj3vj1.png b/vignettes/tinytable_assets/id7uu1g1y977h82kbj3vj1.png new file mode 100644 index 0000000000000000000000000000000000000000..0981e71f874c51f262122c8085ceea6b8a4a0e7b GIT binary patch literal 5057 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id8k8ii5f4ysmr7u1i7gnr.png b/vignettes/tinytable_assets/id8k8ii5f4ysmr7u1i7gnr.png new file mode 100644 index 0000000000000000000000000000000000000000..0ba387fc3e1135765e809dcc4044514a6a01b861 GIT binary patch literal 2564 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 K$0o%2^#1{gI{m-^ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idcyzj1gywoyo6cdusv3ka.png b/vignettes/tinytable_assets/idcyzj1gywoyo6cdusv3ka.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8a2afc91a3e2ce3e185da6c19afe23505011ed GIT binary patch literal 1728 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/iddt3zb93yup1ngq65e3k9.png b/vignettes/tinytable_assets/iddt3zb93yup1ngq65e3k9.png new file mode 100644 index 0000000000000000000000000000000000000000..82861ab5fd3e952e89b50c9a7cd62d32927913c0 GIT binary patch literal 529 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Q#hD`B=`NlpMaE5fKP}kkp92_%Krl={~tX2 z|G=sL2TmU^d+!JoWh)8t3ufT4bV~i7@VKN3D8gCb5n0T@pr;JNj1^1m%Ydd%_H=O! zshIQj*6F^c01=l!mp}jG^Qu!kF6`re5q`&1Wlq!Pl#<6LZ_n05r{0VG!pF%iB&MR{ z5iwzdLZaiLrWRHV0ZaDRM(c|#zsvsjId`yX@_S>vs$tp%;)`GJvDKNu!L4?vsdGbu z64A{6t*!r^>gO!h*S{`fn}2`TH{t)i_rLcf#~;6ZGjPWJU$?&5DzDj4(7z#pH1s%v z`T2`}o%!2irdO|%R{wH(bMWuV5Bt`ZOYSx6`kH!Qdrf2fUk|t6`<|}8b5&gIODk(_ zqGNo-1tOW+Yf@`DYzzA8R2J7pf4{hO?VDG#^HMDm9qkyB9&WlMCBJ$;FwPh}UHx3v IIVCg!00q9^&;S4c literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/ide8sqbrmg1p8x6yukkbow.png b/vignettes/tinytable_assets/ide8sqbrmg1p8x6yukkbow.png new file mode 100644 index 0000000000000000000000000000000000000000..4e1ff0a72c3081fd6daa5eed5888dce5ffbea85b GIT binary patch literal 2214 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fatiPXaRt&wMn(<}4vC40 z>FMbm9UUuHtXR2n<@)vOH*DCjd-v`=d-fbSaNyXnV>fQxxOeZ~{rmUdy?giJ!-tO_ zKmPpr^Z)<(MX%kv!j8ZAa6i=2!PUfbf`jl( zv5=3CYkx{t+?)P}pW&Ram5D-0hQo^s4Hp(NE_7ygYG-TVW*60kD)Q1PO^?(dR+ zr|K;4eJXpgzxL;vf0O@~?0Ne3LjBoyr86&Zs(zW(;-|6jx=M)?=U%mi!d@>-Ip+pA zt@nJyqrDXZe{!?^K_3FM^4?Fvv7O4;IG=7vyH!e z({tLdUtQdG@1E<6@2UCcF5KSD@ps>wvyxTS;tTIj-)rfd|6b|KZ=lW>Z)02P;=euP z*}J#ya##>&Rd#ly?P zFCZW+Dj)(xVnX7Q(n=~a%4#wyYO4B1YHDhlCKg(z7TRW3Iu_Qt7B;$;HhNaJ`quWQ zPHqkk4$dKwE-o&vuC6}useV9^m=OpBso8;PIjMDRY4zt=%zm z|LIu=&(5Def5FLX3r}5NeCFozi+5M7Sg~^D%2ih%t-bMV{rdGAHf%U{?AXbZC(oQY zbL-ZvckkYP`0(N5$B$pWeEItI>+j#c|NQy$|Ns9zj^(o%7&zKJT^vIy=DfWeeJM3m z(Cwm=qoAn1>OEJM5C@Sxix+&^AHL_|<<1|)?8af!s(Zw0Hin%`pU?dN`@Few3}0IK z%oR#@FfKgI%ORWR@S=d(sa;yY>Q2LjhipKp4~yFWy;P5`t@@Supg!)yh5x@leO|lo z&-vS{9^YRs&%RIPOV@=+mlvW7H+Njnc1jmq7~XPD$!R^uT-TO3 zL91?#y-Fowf>o|Bbd>0$(4Xt?=K7qkWXupV+&B4h||1anJg?~OF z-^%B&Kp(dZU@(j6mEZmF9F%#C%87tRX-GoZe}uSj54{l)5J z?>#6re-Lf^H$8m5{@1_L{efOx`hG6ZtLE|6z>@L(yT9ks?LlQ^`2Sy1TmSu3Kj8Pj pD(H|uw`|2iPArWB)OJHW!(#8#(;CA=8iCC#22WQ%mvv4FO#pePX9EBL literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idgzkr0xpc8awp6kqhz8om.png b/vignettes/tinytable_assets/idgzkr0xpc8awp6kqhz8om.png new file mode 100644 index 0000000000000000000000000000000000000000..6583425795933e33946b3b473e63b903950b9af4 GIT binary patch literal 12842 zcmX9_bwE_j*QQfSx_o6$=${rIfd&1aSdLLq$g( z2?-!00~8d1iVD!s06IFrzyO$-01FFXV*?x0wyNF z%nVpq04pnCV*~8$fP(|PdIdN+0T&l|{Tgs{10Ej0%M1AU06#wv5CDRLKu8D(3j+}m zASw#P#DKUskdOe9l0ZrdNJ|4586YbQJ9z&dcz6I$PvGSR zyuE>s5AgK`ety8;9|Qz|z(5cb1cHM>NC*fG1z}+zJRC$sfXGM?6$PTBK}-yYjRkRW zAU+->B!I+3kdy?HlR-)f`0xRwrh<EOC@BF@C@3ujWo4ke98^?*%1TgG1*)sT=g**~2GrJqFJC}i9jLDd z4Go~N5i~V{=4Q~+0$N)^TN`L^2OS-tvlDc6f$nb5(*wSK1--qXuMhP1gMk4sI0(Ld z14Bb#co>X~fYDJfHU`GW!Ndgk{vAwCf~hGmJq>1N01O6x`~b7FU~Ue~&x3^p@bf2F zTm-*t=40h^m(YYS{|gPk3)y9?lOu(t>H_rbvd z`1=_`99{PLsuh$3=DkOJuECkG7X`m=%STa-bBhjX^L$>#< zXMfE%if?rOipir>TT07I4_(R0>kyW)_9(?jeGCZc2(wdc4V?b_J#RJl{PzCnyN}IP zfRDHL4h=JFBs2Hdh)wmYm=&rhoTR~5&+u4imYMo?R?bv+RJz8s2SriM?&H5oO+rJ~PlRfat zq%tcOwx=R&I=RidKlMkCOGoh=Tn=Z1zQpDHc@EdEOPB@`5j1V_j;~d8IA&1LLr|u^ z?{C9k%o9Jmi{{EeEmA1)qEPo6gIscVJq909w5FQCe}AK2LQO6|?FzUbykUUE+@62& zr*bm=CUum7g^?}Xtes834pp7^wI`uoM2SrcXRDqULciw{yaJ(sRdguSw&Hk#F(L&>FRIX z_DP`ksT4k0LGMR>WTU2;gumz z-^8gmQ>@|{#u$+@^i;SiQl} zw#U!)=JtQP!x|Z@W&IO0OgDNL5L$OT)Q`TO|~au1}o9&v)rpYRMiJ#lCXo6{8m4 z;gmPfB;x4d|M24QpZ_yM_6SUDsguebh#WaaZsqkt(6mUa*$D8OGy(INTXCrl$=*D7G1 zPiP6xFFZoe7g|SQJh5JB$!9daiaUTW;~Y5X`>D)=bOqi^P-)|9z<|Frx=JL&^Y-<2 z`2rb67wZK1JdX1PWzXXvVA0y7IwQ~4#%;eZDQVi-KJRAyy0`6@e5Gp+&BY?pm7C1f zdl@obW;)a+s5R4eiU%cCFbB_|uKoctl(dG;LKn>-AZ@QJl!3{MnFOuEx~7^*!x+~lLP6P2rv3>nmg-FpUz*hg zyBPIayU@cMQXWj6=DBHjA+4d_MzFnmxCj_}OiWx0=E_iN_Ts(VuQofoR2+J@v1xKh ztFsb^eMNoXd@+f-B7kve;H;TP)SA4sJi6XO-!dD>?9R{<+S%*w^+rCD=2Vqg;g@S& z1#Gv?{pVs}xvJmNTM(MP%5B1wUdwu{=s+1z_XnPeGn#SzWhV6%FPe5u+ph^YFSWmY zjre@ERBcV?s$y*Acit7Ax*8_e!sF&4{}dgu49S4#G9(!Z&z9d#1kma0+o#4p(I#bBU~56}?H>RpcC7U%}6{`U5P_WbL+*%{DUGs#;CZU}b2KjL5%W!9;u zyZyBa|9SgaY^_ld?*-jL=4CqxzpLqv{sHyY$jD}^2%6;)rS+xtl?84zNrrCF^V8RB zYC9YgwLbiJ*U}+@u7-M)Ig;wHxeYIm@o{diTpd#19vkct#6EPb?nt$mt}m1gzo<>M zl<`R2-sz%x+- zW6bJR7iExPy~?oS1rEnAWgvBU&e6=H>nqZ-KAdrkL~wR|YWhQnIanL-13s?F@zO$I+UBM|s_~dD_Ev z3h}Uaw2m}T+V}cgO zikGP-4G(#>S(k?9x1PD`MHwmbC+O-f-d0a5`^e{h>zB?aX=@cS?(|D5{Bv#~HcrIv zosqM1jbTn`$+xT$w=3&RoTzNs{#RN@fc1caxiz{zfuvF<*m6!fDzekxoAJuOn4G_% zeShE5^Jc;7el`uqNI%# z4<2rBDr?a1%DglkY&()L!APReXkub8gj6U+k&S_u`ttBf1`;Kp2mC}9*i(HPQX|QMCHh~V}IF|Fdp})Yl>|MBZd3|RT?jM@FN|CBnZUF%{ z7%y9|h0O57=BGP5TQ%Nd75Z6OzFLRfjfBCu9_*=EkEky@cN^B8OIzX&zdo7iP#9Ef z$|>)EsbKqjm+p;cLAI=%N_yyt|ERmX-Fu3M`a3h5c%K0M8*lEu(>Tv0-N7rxp|?7@ zVvX6mixbhhz5==?va4$svc374ZWT5bhQB_2o-4m}u zeHHc*u0*@!)Iz9P?Zj{_RL;3u5iz1!})xr|~m59kf;F9{h`HM)~b zeMyQ#cqCqPkw*I?30Ks$HlV*n53zo=F)9|+GA&tP*hQfEu%(5v7Z^n36_EI&<4ZS= z>0g?f20eoAq=GzUzl4ODtswlvLyt^k<-d-lwmL^uj` zB)*93tZrIeY`s>JycFaleL;^OkWm8DC~%E13+1K&JK#d6=F;6%PGE5D1y;c|=fR>y z6CRcU5`AI!n$)4_rtO8y_~&=gwN^sXE2@Ntb2di&!RdK}`U;^9--wr*6xKdVXArd( zxl60-E#5@CV=u)eeLwo4bVn_I>!>>rD%eK1`91ykP0WnhAL2VCdE5A!le)p)G=h1w z*?}7}MtM^t>JN@CBj>IsJC!4e_KRV4urvZK$b-_XAyMmJ<ArC`uGjGh$KF1&1z*x zMoTF>em+pyZETil_wE@BAcV4Y7WXWUpHORr!qTp_qaPfa3?qKEGs|<{a~77JU{^d% z)}1_Th|H5l88LmLjAC>Uv0uo?hMFSnDCF<`0fx)!9?c`k%`QNw^=*3Rq41yW$HK;V z3!fzMDedNWQ)hp1sG7T@H>N+IWT#%)1aObS8*;i+m=(QvB(3K=Y5gJFU8D|gErld~ zb-vbQV61+36>%EJbmPidHKww=*wPsPU}mM`gv9;^W>k_Y`q$baH1Ww@^`wDw9Fw@v zwA4uCJN%`(wJg2&SW5{b6zN1xoxftO7*%j6PO<|~%JKA%ApY>mu){j=7!`iaW#^EX{@)MJ;}w<9^?A4tL` z%qIB6rUGiF)<_@r+^AP0Q9cWhD0Xq2T>WtJsB(P`WwzB~Iu39ZVEUO5LbN5^B9o8D zJupl1$jSq`Cl_kvZ29({Pib32ZnK~z`A5iZZV|jXV~2tIpg2gPFAHM^-t2}C_?Ui1 z95=F_Ia$+Ixbc=DvsMRgXfHMLRt}|CD4fD1Zk&IrCp)WQ@LxB+w0pg@r+Y%cCZ_?N zWjcmPK4vnfcw#*UcKvzXY@@SqDiq?O@D@JOoACF7cmU-B3)6|9V=7l7sMJ2VoA3rvI;f=giFVibV%$P6D(CaE4*l39Jm!-#Q|Ms}_ z35z=9+|?6Mi~BKG^A9COZ*`tgzI-r*=$v=dxybLWlf<~ZXSd~ekb%D$)DkW_gT34& zY87FN4PTWW8vJW-h(nLpHSz&v1%8VOHB19{Z*0 z%3>6`gUIO}@W4Gsqel`X|JafJ>@L3(%(<9JtY;MYS9k|Zy#5os$tCfQ5uC%zTZ!YM z)0vrt@;zV0#K+4pWylFQ8y3{Ra!9|jz9xB$f+O*1;yvFY7($3GwxkV6yCyBgKCbna zt2z@Zd&SC@#O~FSJkp^o1oLPjJX zD(asOM16YA8{_#gH$vvj&~THsi)o~!pRmXNB&UmoFY*fc>TWC-yU5_6!Lc`Nq<=J; zGY9r2?V4j#)BodGRA~e?K^8el#^l_SBDLH(%)g}Nbi1s<@`F68Ex)wsiomBUC~VN; zlHm2JmNc*b8Rod@?7}efag-fapQQ){PT0xJeqF-HIt24$qTgkmQ7jKS^hzV2n4z8v z4$gjaV$f|>9KuzR{RvP7Ucr>byzlrmj*c3sy@-Vdf2jr2i^*Eee^ zbO)0zDX{S$f}pOJFtwHMIWsKGt%S)ML@7H}N%N6TI^f&PAezlAHL?m?l+7y}!c4mq z{88*Xc4kD3QdbKMIp2{2ygmMsf(F#kI|lj9C#sJPVd2kH>j{yA;)EmQX*(JF<(mCE zVQoj46R+-e`PvDUMI-3~1r@N~L$(P$73f^-EWi94?i$WaxBEj~kfw?r0F8KGe$}}L zsZjmByk(!+9r4N;o9FKk#f(hYZ7Hs3rTEjQkH97?^`gyC>G)x$eRYOo8$J>+ zk^Z;5*Y-2I^HW&fOz<#e5m_X^Jb6VFZn(H9hJM%P-`+2Q{f>vF@dv#z&c<fzBW~DHB<5Z%qpEeE*vBBG>~fJ*=OAh zc&))Cywom{iRrjh7XDTfJ5I`qj~~htmqreo6GP3&ow%+LdGe{9dQ%VHaw1o2tdZ(g zNtu6Te}HtD=Cj1$X>|}5O(|#p0&igX7GD7B!y+Ei#W^$my5<^HjPlD-8*6qlBE%Fe zhaQwaZ@mbXtIE34l#D!*FCi$)CaFYZrpLZU(Y<4=MAo7{6^}g)q>RCi!HZ7FJltr8 zi;|ViQ4Nx;#+XpWBkQ_NRvZ%=U3nfJpJi`%YW%oLJ?HZ@?JI3xVbp=0`14YSi>;rZ zZfr1}W~=;yRb}P{BJLb)SO0y=2=~?~@ee|}C4*Sn3|FBoMl{hqq&uRDIkA+4bGAklld->{h z6u18w`}kH*PsZ4NTWM19KcbJ8GJjB%(!_<`rR`qY1;=#`Pca3YQLxk&1ley(oAG)E zGhkU?Y)Kh3K$%s3GTp#~P6EOi#A|;)FUfC$9!XIlpc8{qW;PE3b&(>1lWI%F#8xC-pz6&(#mUbhN#R#}_&j zOYmluUW@nhoXkCy4w6(8c&rpQ*h{~sl%>?Cs1&8wCq0`*OFTZf8}T9%vp?Gt*Z+oV z*Y+~LlW5-^e@mjXC|^dX|7y(>Mu&dtQNNQY-066Q{7B|eDz7SC#3ilvQk))V08!8r_%;X=$vv zGX%`)zg?L=9nGo7$ifSZi57#?5O*v10S`Aq&sjosXu6_! zSL4}GP9~r3^|g+Bo}M4{Z-}|Q@N}NN+9vnpyzRl`=i3=LMWV+x$>fAGGiT>^V@~TS z!<_QJAUN9+n9ma>r?gd2Vg{7FEidG+32_Za`zo4qq9tCGPQv*_@tH})!VncDu`^yg zN5XOd-`6`vz3@fm86m_QhMynx3Fe-Pm=|CNhr1ry4(OFl!w;^dwq+?^p25&y}{=M?3?+|)U#8Xj;qV2_k3;Fw0-3r*x!{lnt5)pxE z<3yJjmL1Nd+BlJ@LgVG&fWHSy&Rm7&*E&aXZeopO)MVi{$1b)8F+B8x*WRPQQq`c$ zlBFuYQy?}uacNjDMPlq#EQoQ>c2u%&_Bigjo1VUkz=Tqm-1>#@4*JoG2L zbWF7VOd|7>@`YxtGf|*HJk$5vzRJWRlkk^vzQnqgk{4GJ+&bd^h-bD~#11EuT~P6f zqKv)T?uA$+o$3@C=C)JX^PS=mXfI#Y^B2$!>OhAq2R=kO#LBUZ9gMan%gW(QP^|Ej z@2BFz(}?FYk-7I&bA&l4LOXxnT2#ZFJ@eU*C5s9j6Z|wil+h${a>E9BzU4&+da~;_ zqbBtGHSi9g$;>%>F12P`J=!e$-4iSEfHA#AY`A$K(W~#TMtZQ7Dm$05&}f|^3X_6l z=1NxKZjd`mx^q@IhLSX1hNElj`p8pH;Uh+?r!#z;J&CL{gRd``rVHv!kA%~3da(lXSJEzk?>Q+Y&( ze?FA8+5b7ZWPAbX)$G70hL|m*&6~(wc6_l8d=@hU#lMqVUH(o?TA&HX%5b9aocO98 zlnja(z+O9%YpS<-3vYanO2^Vs2>J8m#}YJ`io#m6SsxQ&M5(H(p5*-zncX% zHvN0JJrdgJ=Hqb3nUH%DYo=pHtW1&li>)|vk{eW$kifXq}RGbUl|jTgo@(^c7m&!cgXs!SQ^pwCn%vJqa+IA+@8^R6JhjQD?I>i-Zlb z(pGDAN<*2a71ApfQ+q@R@Qc$C+oAjDNaf~g@Zf6R<^_kW>-A;R?X9{u&^iY+WuLs2 z!?cqF>`bAgbf14XIa0)gc6ih6JeW0?;`uF9yU#AZN~#sRr9qe@8(;m|nj_U_iJ9U3 zZu>xlLV=o`z7RTLchpvXx@5^s_Vv8Ch}>lk-rQ|J&74L(^9^Z8?sZF0l$9f@TfJww z#>p6U4>4I|$9`%3EC1a>C9ahkn0|3KpVk&gbg(l3? z#cjdEDO-(`RJ0P;8Y+T6M1pMEzmta3?JTN$#B!b$l+;3$ogAZoKU|=OMJK6=_A};l zAtB-a`tK}&t6|dFW-cB(`Rio#kpnFg(l6C03pW{GsA^AH{Ll4qrrzsd%tFlGWOr-Z zu_FS$UwJ)r-k_pNhR@Dn^QLTN1!csDVK+b!vEa98nQc4mH&BN4_@b-+G<<$vq^#HG zSUt^jU3?uP;Pu$w4oef)IDBFG{(JlL*Mu~U5f?gw=rx?@KH`^etxcTgkbV*=3%FjS z!!apv6uuqc+8grXnk3(=DSP$wFLgRpO$xw?LMo`Zol^Xu%x2Opn>t{!+X)$cwKOOy zd3>RSz10<7IVtjaop&k14&CUrNN_pb@T-E-zM+tQ&CkVFn}dwz)=91Qm5E^o8U$Nk zUZy(^!k3tjnMWBeSQ^mrPOqDz$CtvqR!fRG@yUwsZ{qwMoGEDkp`dC76yw2AzVom5 z(UN_wuIsDj8KuvGqU4oS_S+~m=p`12;gS+?569ae+c1f|UyJ#Iv-)CHUbe|MD*>a% z2ci+*Vs$|(!hB3_kjgUK@JJzxK;h9%$hcG- z%B)bl-(#?Ps9FNvB-aCDWsK*D}pbKGrSn;BCG#+73EUdYv|aNH5%bTWEM$k_Y*#5 zt9iS<=b~RFg)VO9muPq@2^CcGuUV9c6cD6NNV5F}ANx}IuW`=E;cb-^+G1VA| z)V@EWb}nSZ)EnZP`qJCK1Uk>Q#D{nB*>Mj0i@P<;+=LP*c{_85zR_0lR&z+lH#vLy z;_6cRFE6luxFrzEP_k8oH9hSrov?^)>8KPe%9CG6`Xb=BcBpb!7zJVkLdZaBQ`BL^*N%-`tEJH~5 zZ0I6p;e%C#9jE^F@CZD<1YA$%B5iVC6AMHM{h}H9WwTPuD?(CatA?x%G}k?nQ;;%V zDIJYYK5TIz-!g;Y#C+h0ks6L-=N%P2_ZNpN0^L#h7Zvth5xzZ5_wt89_*kkPYAbJ+ zEVQVPiqGuF!MAW&7WXl5t0`J^AO4+}um&@aK}el;X&3>xwde9m4W0*6RhzyHk2_ z$PB%b8oaqru^otaYePR~CE~09cC@thh>WeT#__dEW+d@PG1wUz&KZI**Y8agBcr=h z(yD$rr^%F%PCDLz6d*5Zp0u?t3ule@ZW~$R;oxn&gwm6*#eh z*nWeVA4aZd$;kO4b#vtw6-%t4;nsZ2u=mEjM$SFX+cCn2!XnxxLpSOpSsHjSySdkp zam6S(>M~(A4W~~Q1DOW}qsgEMV~#iMuFqp;HWk%RhA%=;9)|{$%>CSceDrN_Ca8a$ zLJuBtqY^it4k#PTTSC*7z&M_$k=JmK=>KE5kuASDgjJ84r{oc+WWn#>m|1vqZ%~F^ z{o)GERpo`LOk)wN!IEtG^3c#uv^jxLP>|9F|D9f8yB1LV83J$Kl{oq86wfizgGZ+4 z7j^3G?#{J{u9iGa6Ngw(Nd;=hTt;S_i5AuV!X(lxGHKGVa4^erJe9#Umv!z^ts5430X_}t&&vxiyGu$8s zt0{u<;~F|yi@r!NyjE)PKqNwJVqMUm$JHSFG9$=LWmoev5{Urj@k9WsvI9m2-yEcC zv7L>rP#L!;ZcZBY5}tb*gN&Y!oe^P!ox+}30r1&th~Fi~VyLs+BxH`I54 zINw3xZi|06y+`>@A(4{;NgQJ0*Wt~CVfojqoa9hk2#X!c?+gO}^bb-IEUOkxCV@2ZRF5oepNHV#lr9L?bSP0_ zD7ucJU5klRQNuZnZS};wrDy*WT*L#qx;Ty$1SgKWs`8u&?ufp+Y`=^;{PBgKH~v>YtC-8?k~K`O%!iYoEiPg9-&pZ7^t_$TE1HYf$j-u}DTGnK8coIeq>72)Je z7-&RxexsI2i)HGCs@)`XIw{qi&%l|9K+_(Go1N}|kO$$KemZ5>Z=$$;d7@*UUiSas zcbUvhrNZK`G~GKCtv2pYeFLxA+CC%3UNad(b@}>O8IkGhC?|h%K>k&3tg(9;TWu%6 z(4mPKs$CP&y_|kH-K9rl!`|FH-+PT#P`m!aw&pRN@2_D>h{JDQiIaa`Y~-d+F($_# ze4p?tawcHySjRj;vBj`$5_)@luJ7AD!iNa^ENhJY4%m%^aQRwkJBc^2+k4y4L*?bxf~7uDU>Am*PWrybQ0h1 z(K6xl2KCxWWe735gHGNZFHQW)Z*~Xu37_eaMe6-@`k(#+GlpP z>7ub{wj|d!$pcX2`+0dPD1PCOeN+js3q>rOzEQLuu3ROSl zhU7|890Q^mj-47tXtiTIHL)zhDbjTg<$mMus~JMiA>@BUcT}J3C?A!7BSLf$Q|EQt z&F`aZ8HeaXPE-{VlGVk~AeYE#U>QkQsQ-3y^@9O|#L>{2Lk7M6&>VI5hj1m1^-SE{+8;xt_Jx4Tq?kqzU#NvZ$nSf9<8nF>r&=c8(+#rvT z^iDTj19IG7EBO^+H#d)b98Uj!B83YGor2d$>XL?euX`G!k~ap+|3p5TP4g zeJ|$7-F8F42qCX&DpFq5W0m%*OJUHsN3hukrAAzWh_YH*ed}%M7VK0gmI0~4%YJ1 zB7TVFp-~6%was}-C32pei0q$t8nu^|qar9V&Ph^Gvx!%ky%uPGpMP|RQqrQf3q!7s?cYBA&V2?fJC^}$QZJ&>VIF$F~ol?le||}AxH2T$uTJ&8C}Bc zBM_8#y2NIMX5+P7K?pH>dhwOeoX;qsM+PWN~cuvkmbd5TrNqYI0v>%)|c= Ds2Fb1 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idkbv47x0uzlhetbrymzyi.png b/vignettes/tinytable_assets/idkbv47x0uzlhetbrymzyi.png new file mode 100644 index 0000000000000000000000000000000000000000..8ec24e8df6a4ef7a451ef82070c67811f1038972 GIT binary patch literal 2191 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fnik*_;>ya#&cVga$-~RV z%g4>fFDxM`A}J-Mpd_WJEUly>qpYT+rK6&2psHu6ZfK%uVxetjrDtVpWMpLJ;p^bw z;1(Y19h)3eT%DMhm|EACR^OhUo}Sa*Uo&e-{k)YO9UYUmA6~Iy#mbc{*WP%xe*O9l z8#e6Ty?f7|JqHdPICkvVjT<-a-Me@H{{46F-hKG+;p4}TKY#xG|NsBWJ@?)-FtBg& zba4!+nDh2>cv(uQfJ?fQoE)-#4~{wifBta6zq|V^^G@fs|9igq zck{1`->-J)ZkPQfKmSiffRnn{i@7a+Q!ZF@&ed30E@Tzx^j@W8QOiBg7cQK8Ctv6k zs#0Gltop@oRN?Rqo|lK?`Cfg0YyRBR>HU{y>Fi&xeVhGRWnp>MM%xEb`rGc$Q6Irc zVVB02`1`xFRFZrj-_yfxnySGovZ-pq7Umw{SXN4OSw8<{K5fkCt9aNECI?(APzU1+s?zhUA2 zeZVZ4&mH^X^Jw^ylYIL7?QQo1GxNM${T%r2TuJzaQgp&Gye|)(P-?4p)qZ08?j3!!ZS8&cwfTF_)v{}|V1-{4BK*%Uo_EgrspE!qpJ#6P_h-s({xA-5 z;kESBUspU`xLi77`L+AiT-?{*B(&m&dIx9ix?A<<*z3{_>xx%@>jCns%;$c;|8M?= zb!HM_5GZK7<4xtbGO4{kV=5RquG#sE#Yzjy23%U+RScf4elF{r5}E+Z C(&yj+ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idma3jugg21dfboto6kpoj.png b/vignettes/tinytable_assets/idma3jugg21dfboto6kpoj.png new file mode 100644 index 0000000000000000000000000000000000000000..79d2ec079d343f0019c3277ffd9ec92fb9d02e0d GIT binary patch literal 5080 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idrrat8bom7ytjc0r2fits.png b/vignettes/tinytable_assets/idrrat8bom7ytjc0r2fits.png new file mode 100644 index 0000000000000000000000000000000000000000..2e22289818f8343b23b6a50b0fcdcc60b23498c2 GIT binary patch literal 11196 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idsps0kmdrru6ifc9sxbpp.png b/vignettes/tinytable_assets/idsps0kmdrru6ifc9sxbpp.png new file mode 100644 index 0000000000000000000000000000000000000000..cba1148dde2cbac22768179b25d24971c2b81b77 GIT binary patch literal 11912 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 MEvX;@{$?2Te^F4R`v3p{ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idwkc5icrbdns5bn3txyu8.png b/vignettes/tinytable_assets/idwkc5icrbdns5bn3txyu8.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e677bcb026c2131152fb680cfb41832dc2ae84 GIT binary patch literal 2250 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fstfQ5aRt%>0s?}9f+8X! zIyySW#>OTlCbqV=c6N3S4i1ivj!sTaE-o&Gg@xtiXU?2IfBuRUE7q=E zyMF!pUAuPe-@pIRp+jfRoH=*y+=UAlZrr$W>(;HickkZ2ckllF`_G;|d-3AMyLazC zeE9J5=g;52fB*ga_us#N|NsA2eJV16fq{eF)5S5QV$R#kFE8bW^0r-E+@VpX(JR|j z74qZVe>UB}vabSG&YU}Srs2ATbzh%VerJn$AN!rTp~|V9wS|wHLsm?{N=Kn2!r{e+ zh6{;|3lB4aB<6ja|Go9!-M^)GTwi4FuMK}O{cim6SfH@8u2J#z-7YpENmTXrt2|K>Zl zzU;h{$BWEjXZ@?T+={!GaN1rOr5Ell|9Skp-MY_#TqacV{{8?(M!1zrMQIsrG1vQKkt6GI)26Pc^qHg zf6DxxS`_l#R`At**B9k4_o+Mm1zMkGnYw?P-Jg5} zZ;IWY*N3Km7q&_lo!52YbIZBN*5yiHY!()WJzU9Q>;Ga-XoZ&3`C%;mXa0q3&bjUa zRk{m5b2zP6Es=A4v9;x#GRNL&7b;m6UKg_JSNIa;^jxqd&ijQ;6ZI7Dul>I7g8nY{ zw*P{^Zj0ZQcCcKyzxLi<#wo(PE<`%Ka7t%f$UT>}MXy9mfJy=ny6vz3tS&t+uTrA% zef6t8dyf|Z?=C}VKa?s9wJtm0Ul;p)vOTBlyYD+MJgmc8*`ex0ss-sUabV|#{crw> zJZP_})cLag`vK#>uiaJuJa%Gt6UI_YBf0Ovej9%lBlp#e&A>(pgQu&X%Q~loCIH|} B8%qEH literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idx14406ky49zk59ryojlh.png b/vignettes/tinytable_assets/idx14406ky49zk59ryojlh.png new file mode 100644 index 0000000000000000000000000000000000000000..3ce82825e755ef77a5aae22a83f323b43a1d7fb5 GIT binary patch literal 2077 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+f3J>rJaRt&sLPCm)igtE( zE-o&9etsb#A<@y%X=!OiMMcx6PoFt+=KT5dmn~biV#SJ;D_5>tw{HFV^&2*9c=qhs zt5>hyy?gim{re9eKK%Uo^Y`!HfB*jd_wV2T|No757V0uEus3?TIEGZrd3!5-QiM5= ztE1%!%k;=w|E=~i`b_Pb#~n~{S6hK`p8dX`3~Rop{bF#Kci|yp3m?BiNd?2g!^|AA zat<#(FgUfd3s~7SfTZSqIzNB=uk0$5FTz!)!t>XCef%XSL;cH??Uyb0ziEGY^Mce6L{I69$iia5h08hSc5~RezKC%dRZ3C_h_~0R zU%!0&wrRj1t$XnH%e8Alz!2sKg{7vGy#g?Fmvj7W07}kN`oav1fl*0n1;U4)=G%XL z`}?K&S3M|jWAFLeulVl{4E6i2FQ&BY>%O4LSu4IUSm>9Y({hzBu`Pa{FLraxophmG z&`NdTd!-VuQHAsho?lDq_y715Hs5!@Pu$cC>U(F$+50Pg@pM|=c|o0XuA0+)m6BN; zwUaJnDvb&b&j7h!Tfh3g{W6h-hnK&7-mmHU;zOn|wDtm5Yz^1B|NaG5V#!q}4Bmcq z`k(qs>wtHh{+Id7)-&yKL9Ooi_&-!F{BKn&`apI6-l!My%l;o_(Ess!vCzLG`wuY5 hJEN<{s5gJ`=Py*$3fz{=3#{iEJYD@<);T3K0RTp-m~;RD literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_tutorial.pdf b/vignettes/tinytable_tutorial.pdf index c18b7f4265f663638f59cb8a782974d125f3dc42..16ea9b6a1248238447ca5b93167cbf31375e60b8 100644 GIT binary patch delta 39258 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

Combine two tiny tables.