From 765aeaea9a19b47fb1ff68fa61602d3775f970d0 Mon Sep 17 00:00:00 2001 From: vincentarelbundock Date: Thu, 4 Jul 2024 18:16:18 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20vincenta?= =?UTF-8?q?relbundock/tinytable@45844153cab23859ce10d8d226ac94055c29db25?= =?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 | 130 +-- man/group_tt.html | 158 ++-- man/rbind2-tinytable-tinytable-method.html | 72 +- man/theme_tt.html | 30 +- man/tt.html | 66 +- search.json | 12 +- vignettes/custom.html | 102 +-- vignettes/format.html | 342 ++++---- vignettes/group.html | 328 +++---- vignettes/plot.html | 198 ++--- vignettes/style.html | 818 +++++++++--------- vignettes/theme.html | 102 +-- vignettes/tinytable.html | 390 ++++----- .../id1j5jmeul7ohpyk73k2u5.png | Bin 0 -> 1829 bytes .../id3kkscd46xotkibkqw5b7.png | Bin 0 -> 8399 bytes .../id3wxemfm3nb6bgu19njls.png | Bin 0 -> 11898 bytes .../id45numpqjdi1csiodu7uh.png | Bin 0 -> 548 bytes .../id4h9ojhyrv8byf87gd6di.png | Bin 0 -> 11912 bytes .../id55ykjpqglgk1bc78zyez.png | Bin 0 -> 11427 bytes .../id62rjwbbsqiu5by1jp5d8.png | Bin 0 -> 512 bytes .../idao5z1m1tgfkz1pkv3a4d.png | Bin 0 -> 12175 bytes .../idcmxxq5hbymqgytgtxxsy.png | Bin 0 -> 2191 bytes .../idd6d3ltp1l2b8rd4gl8mw.png | Bin 0 -> 12244 bytes .../idda4qf709bzzjrjjxnweo.png | Bin 0 -> 2214 bytes .../idfczczmgfvey118g6154d.png | Bin 0 -> 1127 bytes .../idj1iygi8rr8voizmv7w4v.png | Bin 0 -> 2072 bytes .../idklkks7bow9sf3oftyw9n.png | Bin 0 -> 11310 bytes .../ido1m1xu1s78wgso3ybvqa.png | Bin 0 -> 2250 bytes .../idohxaklx1i7qxum3p5fve.png | Bin 0 -> 1728 bytes .../idpa8pfikvovamhzsgmzqh.png | Bin 0 -> 2564 bytes .../idpndoxu88o4ndllwwmo07.png | Bin 0 -> 529 bytes .../idpq7v321t8h6v1m3vqajd.png | Bin 0 -> 2444 bytes .../idqxf3p8s3quj12olkusyc.png | Bin 0 -> 11877 bytes .../idr8bwzmg3jm5g4u8zkbla.png | Bin 0 -> 5080 bytes .../idsc55bvp5s3umbk4bb648.png | Bin 0 -> 15240 bytes .../iducws9agi44iseuusi0us.png | Bin 0 -> 2077 bytes .../iduyzg527kard0vkn1dak2.png | Bin 0 -> 2558 bytes .../idvt0104a249roja3wbuan.png | Bin 0 -> 1846 bytes .../idyfc6lagfn6u0q3y78nkf.png | Bin 0 -> 5073 bytes .../idytbxug4f0fa87fa0te7d.png | Bin 0 -> 5057 bytes vignettes/tinytable_tutorial.pdf | Bin 1788910 -> 1789329 bytes 42 files changed, 1375 insertions(+), 1374 deletions(-) create mode 100644 vignettes/tinytable_assets/id1j5jmeul7ohpyk73k2u5.png create mode 100644 vignettes/tinytable_assets/id3kkscd46xotkibkqw5b7.png create mode 100644 vignettes/tinytable_assets/id3wxemfm3nb6bgu19njls.png create mode 100644 vignettes/tinytable_assets/id45numpqjdi1csiodu7uh.png create mode 100644 vignettes/tinytable_assets/id4h9ojhyrv8byf87gd6di.png create mode 100644 vignettes/tinytable_assets/id55ykjpqglgk1bc78zyez.png create mode 100644 vignettes/tinytable_assets/id62rjwbbsqiu5by1jp5d8.png create mode 100644 vignettes/tinytable_assets/idao5z1m1tgfkz1pkv3a4d.png create mode 100644 vignettes/tinytable_assets/idcmxxq5hbymqgytgtxxsy.png create mode 100644 vignettes/tinytable_assets/idd6d3ltp1l2b8rd4gl8mw.png create mode 100644 vignettes/tinytable_assets/idda4qf709bzzjrjjxnweo.png create mode 100644 vignettes/tinytable_assets/idfczczmgfvey118g6154d.png create mode 100644 vignettes/tinytable_assets/idj1iygi8rr8voizmv7w4v.png create mode 100644 vignettes/tinytable_assets/idklkks7bow9sf3oftyw9n.png create mode 100644 vignettes/tinytable_assets/ido1m1xu1s78wgso3ybvqa.png create mode 100644 vignettes/tinytable_assets/idohxaklx1i7qxum3p5fve.png create mode 100644 vignettes/tinytable_assets/idpa8pfikvovamhzsgmzqh.png create mode 100644 vignettes/tinytable_assets/idpndoxu88o4ndllwwmo07.png create mode 100644 vignettes/tinytable_assets/idpq7v321t8h6v1m3vqajd.png create mode 100644 vignettes/tinytable_assets/idqxf3p8s3quj12olkusyc.png create mode 100644 vignettes/tinytable_assets/idr8bwzmg3jm5g4u8zkbla.png create mode 100644 vignettes/tinytable_assets/idsc55bvp5s3umbk4bb648.png create mode 100644 vignettes/tinytable_assets/iducws9agi44iseuusi0us.png create mode 100644 vignettes/tinytable_assets/iduyzg527kard0vkn1dak2.png create mode 100644 vignettes/tinytable_assets/idvt0104a249roja3wbuan.png create mode 100644 vignettes/tinytable_assets/idyfc6lagfn6u0q3y78nkf.png create mode 100644 vignettes/tinytable_assets/idytbxug4f0fa87fa0te7d.png diff --git a/NEWS.html b/NEWS.html index 3dafeabd..33b2f37a 100644 --- a/NEWS.html +++ b/NEWS.html @@ -404,6 +404,7 @@

HTML

diff --git a/man/format_tt.html b/man/format_tt.html index d63bdda8..a8778e60 100644 --- a/man/format_tt.html +++ b/man/format_tt.html @@ -687,15 +687,15 @@

Examples

- +
@@ -761,10 +761,10 @@

Examples

- + - + @@ -778,15 +778,15 @@

Examples

-
10 00010 001 9 999
10 001 9 999 10 000
+
@@ -868,15 +868,15 @@

Examples

-
+
@@ -968,15 +968,15 @@

Examples

-
+
@@ -1052,15 +1052,15 @@

Examples

-
+
@@ -1136,15 +1136,15 @@

Examples

-
+
@@ -1230,15 +1230,15 @@

Examples

-
+
diff --git a/man/group_tt.html b/man/group_tt.html index 36663ee0..b138619d 100644 --- a/man/group_tt.html +++ b/man/group_tt.html @@ -478,15 +478,15 @@

Examples

-
+
@@ -681,15 +681,15 @@

Examples

-
+
@@ -883,15 +883,15 @@

Examples

-
+
@@ -1087,15 +1087,15 @@

Examples

-
Hamburgers
+
diff --git a/man/rbind2-tinytable-tinytable-method.html b/man/rbind2-tinytable-tinytable-method.html index b5a5212b..31766b63 100644 --- a/man/rbind2-tinytable-tinytable-method.html +++ b/man/rbind2-tinytable-tinytable-method.html @@ -483,15 +483,15 @@

Examples

-
Foo
+
@@ -606,15 +606,15 @@

Examples

-
Combine two tiny tables.
+
@@ -730,15 +730,15 @@

Examples

-
Combine two tiny tables.
+
@@ -847,15 +847,15 @@

Examples

-
Combine two tiny tables.
+
diff --git a/man/theme_tt.html b/man/theme_tt.html index 2e680906..fcde08aa 100644 --- a/man/theme_tt.html +++ b/man/theme_tt.html @@ -517,15 +517,15 @@

Examples

-
Combine two tiny tables.
+
diff --git a/man/tt.html b/man/tt.html index 09ff3d71..d67ca2f1 100644 --- a/man/tt.html +++ b/man/tt.html @@ -608,15 +608,15 @@

Examples

-
+
@@ -720,15 +720,15 @@

Examples

-
+
@@ -952,15 +952,15 @@

Examples

-
+
diff --git a/search.json b/search.json index 4e143e1b..ee20c7d3 100644 --- a/search.json +++ b/search.json @@ -219,7 +219,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 1971-01-08\n True \n \n \n 201399\n 201.4 \n 1971-06-05\n True \n \n \n 100188\n 0.13\n 1972-07-10\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 January 08 1971\n True\n \n \n 201 399,18\n 201.4\n June 05 1971\n True\n \n \n 100 188,39\n 0.1\n July 10 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)", + "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-07-18\n True \n \n \n 201399\n 201.4 \n 1972-02-07\n True \n \n \n 100188\n 0.13\n 1971-09-28\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 July 18 1970\n True\n \n \n 201 399,18\n 201.4\n February 07 1972\n True\n \n \n 100 188,39\n 0.1\n September 28 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)", "crumbs": [ "Tutorial (PDF)", "Tutorial", @@ -231,7 +231,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 1971-01-08\n True \n \n \n 201399\n 201.4 \n 1971-06-05\n True \n \n \n 100188\n 0.13\n 1972-07-10\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 January 08 1971\n True\n \n \n 201 399,18\n 201.4\n June 05 1971\n True\n \n \n 100 188,39\n 0.1\n July 10 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", + "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-07-18\n True \n \n \n 201399\n 201.4 \n 1972-02-07\n True \n \n \n 100188\n 0.13\n 1971-09-28\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 July 18 1970\n True\n \n \n 201 399,18\n 201.4\n February 07 1972\n True\n \n \n 100 188,39\n 0.1\n September 28 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", "crumbs": [ "Tutorial (PDF)", "Tutorial", @@ -467,7 +467,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 = getOption(\"tinytable_format_digits\", default = NULL),\n num_fmt = getOption(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = getOption(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = getOption(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = getOption(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = getOption(\"tinytable_format_num_mark_dec\", default = getOption(\"OutDec\",\n default = \".\")),\n date = getOption(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = getOption(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = getOption(\"tinytable_format_other\", default = as.character),\n replace = getOption(\"tinytable_format_replace\", default = TRUE),\n escape = getOption(\"tinytable_format_escape\", default = FALSE),\n markdown = getOption(\"tinytable_format_markdown\", default = FALSE),\n quarto = getOption(\"tinytable_format_quarto\", default = FALSE),\n fn = getOption(\"tinytable_format_fn\", default = NULL),\n sprintf = getOption(\"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\nWhen the x data frame includes row names, tinytable can bind them to the first column (without an empty string string as column name). This global option triggers this behavior:\n\noptions(tinytable_tt_rownames = TRUE)\n\nx <- mtcars[1:3, 1:3]\ntt(x)\n\noptions(tinytable_tt_rownames = FALSE)\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\nEXPERIMENTAL options(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_save_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_save_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 9 999\n \n \n 10 000\n 10 001\n \n \n 10 001\n 10 000\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 = getOption(\"tinytable_format_digits\", default = NULL),\n num_fmt = getOption(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = getOption(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = getOption(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = getOption(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = getOption(\"tinytable_format_num_mark_dec\", default = getOption(\"OutDec\",\n default = \".\")),\n date = getOption(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = getOption(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = getOption(\"tinytable_format_other\", default = as.character),\n replace = getOption(\"tinytable_format_replace\", default = TRUE),\n escape = getOption(\"tinytable_format_escape\", default = FALSE),\n markdown = getOption(\"tinytable_format_markdown\", default = FALSE),\n quarto = getOption(\"tinytable_format_quarto\", default = FALSE),\n fn = getOption(\"tinytable_format_fn\", default = NULL),\n sprintf = getOption(\"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\nWhen the x data frame includes row names, tinytable can bind them to the first column (without an empty string string as column name). This global option triggers this behavior:\n\noptions(tinytable_tt_rownames = TRUE)\n\nx <- mtcars[1:3, 1:3]\ntt(x)\n\noptions(tinytable_tt_rownames = FALSE)\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\nEXPERIMENTAL options(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_save_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_save_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 9 999\n \n \n 10 000\n 9 999\n \n \n 9 999\n 10 000\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", @@ -479,7 +479,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 = getOption(\"tinytable_format_digits\", default = NULL),\n num_fmt = getOption(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = getOption(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = getOption(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = getOption(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = getOption(\"tinytable_format_num_mark_dec\", default = getOption(\"OutDec\",\n default = \".\")),\n date = getOption(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = getOption(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = getOption(\"tinytable_format_other\", default = as.character),\n replace = getOption(\"tinytable_format_replace\", default = TRUE),\n escape = getOption(\"tinytable_format_escape\", default = FALSE),\n markdown = getOption(\"tinytable_format_markdown\", default = FALSE),\n quarto = getOption(\"tinytable_format_quarto\", default = FALSE),\n fn = getOption(\"tinytable_format_fn\", default = NULL),\n sprintf = getOption(\"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\nWhen the x data frame includes row names, tinytable can bind them to the first column (without an empty string string as column name). This global option triggers this behavior:\n\noptions(tinytable_tt_rownames = TRUE)\n\nx <- mtcars[1:3, 1:3]\ntt(x)\n\noptions(tinytable_tt_rownames = FALSE)\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\nEXPERIMENTAL options(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_save_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_save_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 9 999\n \n \n 10 000\n 10 001\n \n \n 10 001\n 10 000\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 = getOption(\"tinytable_format_digits\", default = NULL),\n num_fmt = getOption(\"tinytable_format_num_fmt\", default = \"significant\"),\n num_zero = getOption(\"tinytable_format_num_zero\", default = FALSE),\n num_suffix = getOption(\"tinytable_format_num_suffix\", default = FALSE),\n num_mark_big = getOption(\"tinytable_format_num_mark_big\", default = \"\"),\n num_mark_dec = getOption(\"tinytable_format_num_mark_dec\", default = getOption(\"OutDec\",\n default = \".\")),\n date = getOption(\"tinytable_format_date\", default = \"%Y-%m-%d\"),\n bool = getOption(\"tinytable_format_bool\", default = function(column)\n tools::toTitleCase(tolower(column))),\n other = getOption(\"tinytable_format_other\", default = as.character),\n replace = getOption(\"tinytable_format_replace\", default = TRUE),\n escape = getOption(\"tinytable_format_escape\", default = FALSE),\n markdown = getOption(\"tinytable_format_markdown\", default = FALSE),\n quarto = getOption(\"tinytable_format_quarto\", default = FALSE),\n fn = getOption(\"tinytable_format_fn\", default = NULL),\n sprintf = getOption(\"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\nWhen the x data frame includes row names, tinytable can bind them to the first column (without an empty string string as column name). This global option triggers this behavior:\n\noptions(tinytable_tt_rownames = TRUE)\n\nx <- mtcars[1:3, 1:3]\ntt(x)\n\noptions(tinytable_tt_rownames = FALSE)\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\nEXPERIMENTAL options(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_save_pdf_clean = TRUE) deletes temporary and log files.\n\n\noptions(tinytable_save_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 9 999\n \n \n 10 000\n 9 999\n \n \n 9 999\n 10 000\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", @@ -563,7 +563,7 @@ "href": "NEWS.html", "title": "News", "section": "", - "text": "HTML tables no longer insert MathJax scripts by default. This behavior could enter in conflict with other MathJax scripts loaded explicitly by the user or automatically by Quarto. Users can revert to the previous behavior by setting a global option:\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\n\n\n\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.\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.\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)\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\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.\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": "HTML tables no longer insert MathJax scripts by default. This behavior could enter in conflict with other MathJax scripts loaded explicitly by the user or automatically by Quarto. Users can revert to the previous behavior by setting a global option:\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\n\n\n\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.\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)\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\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.\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" @@ -574,7 +574,7 @@ "href": "NEWS.html#development", "title": "News", "section": "", - "text": "HTML tables no longer insert MathJax scripts by default. This behavior could enter in conflict with other MathJax scripts loaded explicitly by the user or automatically by Quarto. Users can revert to the previous behavior by setting a global option:\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\n\n\n\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.\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.\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)\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\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.", + "text": "HTML tables no longer insert MathJax scripts by default. This behavior could enter in conflict with other MathJax scripts loaded explicitly by the user or automatically by Quarto. Users can revert to the previous behavior by setting a global option:\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\n\n\n\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.\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)\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\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.", "crumbs": [ "Tutorial (PDF)", "News" diff --git a/vignettes/custom.html b/vignettes/custom.html index 37d2ba3b..85691bdc 100644 --- a/vignettes/custom.html +++ b/vignettes/custom.html @@ -423,15 +423,15 @@

Bootstrap classes

-
+
@@ -536,15 +536,15 @@

Bootstrap classes

-
+
@@ -652,15 +652,15 @@

CSS declarations

-
+
@@ -814,15 +814,15 @@

CSS rules

-
+
@@ -979,15 +979,15 @@

CSS rules

-
+
diff --git a/vignettes/format.html b/vignettes/format.html index 7dec20e8..16f95735 100644 --- a/vignettes/format.html +++ b/vignettes/format.html @@ -441,15 +441,15 @@

Numbers, dates,
-

+
@@ -514,19 +514,19 @@

Numbers, dates,

- + - + - + @@ -552,15 +552,15 @@

Numbers, dates,
-

143002 1.431971-01-081970-07-18 True
201399 201.4 1971-06-051972-02-07 True
100188 0.131972-07-101971-09-28 False
+
@@ -625,19 +625,19 @@

Numbers, dates,

- + - + - + @@ -660,15 +660,15 @@

Numbers, dates,
-

143 002,21 1.4January 08 1971July 18 1970 True
201 399,18 201.4June 05 1971February 07 1972 True
100 188,39 0.1July 10 1972September 28 1971 False
+
@@ -781,15 +781,15 @@

Significan
-

+
@@ -867,15 +867,15 @@

Significan
-

+
@@ -955,15 +955,15 @@

Significan
-

+
@@ -1046,15 +1046,15 @@

Replacement

-
+
@@ -1136,15 +1136,15 @@

Replacement

-
+
@@ -1226,15 +1226,15 @@

Replacement

-
+
@@ -1321,15 +1321,15 @@

Replacement

-
+
@@ -1430,15 +1430,15 @@

Escape special c
-

+
@@ -1540,15 +1540,15 @@

Markdown

-
+
@@ -1666,15 +1666,15 @@

Markdown

-
+

Vincent sometimes contributes to these R packages.

@@ -1796,15 +1796,15 @@

Custom functions

-

Vincent sometimes contributes to these R packages.

+
@@ -1923,15 +1923,15 @@

Custom functions

-
+
@@ -2041,15 +2041,15 @@

Quarto data process
-

+
@@ -2129,15 +2129,15 @@

Quarto data process
-

Thing
+
@@ -2220,15 +2220,15 @@

Quarto data process
-

Thing
+
diff --git a/vignettes/group.html b/vignettes/group.html index 7b014550..ff9558e9 100644 --- a/vignettes/group.html +++ b/vignettes/group.html @@ -416,15 +416,15 @@

Rows

-
mpg
+
@@ -617,15 +617,15 @@

Rows

-
+
@@ -765,15 +765,15 @@

Rows

-
+
@@ -912,15 +912,15 @@

Rows

-
+
@@ -1070,15 +1070,15 @@

Rows

-
+
@@ -1288,15 +1288,15 @@

Columns

-
+
@@ -1506,15 +1506,15 @@

Columns

-
Hamburgers
+
@@ -1755,15 +1755,15 @@

Columns

-
Hamburgers
+
diff --git a/vignettes/plot.html b/vignettes/plot.html index e22a024b..df440217 100644 --- a/vignettes/plot.html +++ b/vignettes/plot.html @@ -427,15 +427,15 @@

Inserting image
-

Hello
+
@@ -520,15 +520,15 @@

Inserting image
-

+
@@ -643,15 +643,15 @@

Built-in plots

-
+
@@ -726,24 +726,24 @@

Built-in plots

- - - - + + + + - - - - + + + + - - - - + + + +
mpg
hp
qsec
@@ -772,15 +772,15 @@

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

Custom plots: Base

- + - + - +
mpg
hp
qsec
@@ -883,15 +883,15 @@

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

Custom plots: g

- + - + - +
mpg
hp
qsec
@@ -1010,15 +1010,15 @@

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

Custom plots: g

- - - + + + - - - + + + - - - + + +
Adelie
Chinstrap
Gentoo
@@ -1128,15 +1128,15 @@

Fontawesome

- +
diff --git a/vignettes/style.html b/vignettes/style.html index 11e7fd50..4678ccde 100644 --- a/vignettes/style.html +++ b/vignettes/style.html @@ -445,15 +445,15 @@

Cells, rows, columns
-

+
@@ -572,15 +572,15 @@

Cells, rows, columns
-

+
@@ -694,15 +694,15 @@

Cells, rows, columns
-

+
@@ -816,15 +816,15 @@

Cells, rows, columns
-

+
@@ -938,15 +938,15 @@

Cells, rows, columns
-

+
@@ -1060,15 +1060,15 @@

Cells, rows, columns
-

+
@@ -1179,15 +1179,15 @@

Cells, rows, columns
-

+
@@ -1301,15 +1301,15 @@

Cells, rows, columns
-

+
@@ -1425,15 +1425,15 @@

Cells, rows, columns
-

+
@@ -1573,15 +1573,15 @@

Colors

-
+
@@ -1704,15 +1704,15 @@

Alignment

-
+
@@ -1808,15 +1808,15 @@

Alignment

-
+
@@ -1938,15 +1938,15 @@

Alignment

-
+
@@ -2043,15 +2043,15 @@

Font size

-
+
@@ -2176,15 +2176,15 @@

Spanning cell
-

+
@@ -2299,15 +2299,15 @@

Spanning cell
-

+
@@ -2424,15 +2424,15 @@

Spanning cell
-

+
@@ -2554,15 +2554,15 @@

Headers

-
+
@@ -2659,15 +2659,15 @@

Headers

-
+
@@ -2781,15 +2781,15 @@

Headers

-
+
@@ -2912,15 +2912,15 @@

Conditional styling
-

+
@@ -3060,15 +3060,15 @@

Vectorized sty
-

+
@@ -3216,15 +3216,15 @@

Vectorized sty
-

+
@@ -3367,15 +3367,15 @@

Vectorized sty
-

+
@@ -3694,15 +3694,15 @@

Lines (borders)

-
+
@@ -3809,15 +3809,15 @@

Lines (borders)

-
+
@@ -3946,15 +3946,15 @@

Lines (borders)

-
+
@@ -4041,15 +4041,15 @@

Cell padding
-

+
diff --git a/vignettes/theme.html b/vignettes/theme.html index 3bb74bf4..64876d67 100644 --- a/vignettes/theme.html +++ b/vignettes/theme.html @@ -415,15 +415,15 @@

Visual themes

-
+
@@ -625,15 +625,15 @@

Visual themes

-
+
@@ -938,15 +938,15 @@

Custom themes

-
Always use the same caption.
+
diff --git a/vignettes/tinytable.html b/vignettes/tinytable.html index b4af7cbf..a7b1766a 100644 --- a/vignettes/tinytable.html +++ b/vignettes/tinytable.html @@ -419,15 +419,15 @@

Tiny Tables

-
Always use the same caption.
+
@@ -533,15 +533,15 @@

Width

-
+
@@ -644,15 +644,15 @@

Width

-
+
@@ -756,15 +756,15 @@

Width

-
+
@@ -918,15 +918,15 @@

Width

-
+
@@ -1085,15 +1085,15 @@

Width

-
+
@@ -1175,15 +1175,15 @@

Footnotes

-
+

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

@@ -1260,15 +1260,15 @@

Footnotes

-

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

+
@@ -1377,15 +1377,15 @@

Footnotes

-
+
@@ -1510,15 +1510,15 @@

Captions and
-

+
@@ -1655,15 +1655,15 @@

Math

-
+
@@ -1758,15 +1758,15 @@

Line breaks
-

+
@@ -1922,15 +1922,15 @@

Combination an
-

+
@@ -2028,15 +2028,15 @@

Combination an
-

+
@@ -2120,15 +2120,15 @@

Combination an
-

+
@@ -2243,15 +2243,15 @@

Combination an
-

Combine two tiny tables.
+
@@ -2370,15 +2370,15 @@

Combination an
-

Combine two tiny tables.
+
@@ -2489,15 +2489,15 @@

Combination an
-

Combine two tiny tables.
+
diff --git a/vignettes/tinytable_assets/id1j5jmeul7ohpyk73k2u5.png b/vignettes/tinytable_assets/id1j5jmeul7ohpyk73k2u5.png new file mode 100644 index 0000000000000000000000000000000000000000..8eaafeb9f170fad97d9a846acb7cba6bebb3dc7e GIT binary patch literal 1829 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fG6?Vqan+J$aMWUO(P8lR z_6`gTtgf!^?Ck97>Y6cQ#>|;B=chBgd-v|kJceJte*Is{@c;k+H5-4$F)*-g@N{tu zshIQj^66aBKn9nChBuxi^ZZQrX39VKDB|+7FxLw~uVd;P{@*M8&hX$dr!1dBiABSO zhYU{b%p7Q(g1r|j_y6{*c(ZF?KxNfF5bM{^*{9a8FTc;(&uObt5;jVVhQVk$7|jNw zMZpLv31hE|Yx$oC)d8{jCHLO%6PDZkPL83*X5nGR7Cv?XD;b9u1q|q%b=T$RA3Xhi sxA>p#_xk1fKh)RTy|0;ce*a(AU-N@4Wt=(#f%P7Pr>mdKI;Vst0K#MNOaK4? literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id3kkscd46xotkibkqw5b7.png b/vignettes/tinytable_assets/id3kkscd46xotkibkqw5b7.png new file mode 100644 index 0000000000000000000000000000000000000000..d7222e0ff7be019556caf27e3f140f3db2b94f13 GIT binary patch literal 8399 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id45numpqjdi1csiodu7uh.png b/vignettes/tinytable_assets/id45numpqjdi1csiodu7uh.png new file mode 100644 index 0000000000000000000000000000000000000000..04b900e8601a1a502d7058bd6be142b47df7e9ee GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Q#hD`B=`NlpMaElfKP}kkp92_%KyFR{vSH? z|G>%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/id4h9ojhyrv8byf87gd6di.png b/vignettes/tinytable_assets/id4h9ojhyrv8byf87gd6di.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/id55ykjpqglgk1bc78zyez.png b/vignettes/tinytable_assets/id55ykjpqglgk1bc78zyez.png new file mode 100644 index 0000000000000000000000000000000000000000..795d20b2458455461224184bf3ee5f9180c6dbfd GIT binary patch literal 11427 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 Tm`6g7j|tRNw3N}0te^iMOi@OE literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/id62rjwbbsqiu5by1jp5d8.png b/vignettes/tinytable_assets/id62rjwbbsqiu5by1jp5d8.png new file mode 100644 index 0000000000000000000000000000000000000000..5e33c88b48ac9fae9fd4c33a022920566f8e8e3a GIT binary patch literal 512 zcmeAS@N?(olHy`uVBq!ia0y~yVAKJ!Q#hD`B=`NlpMaD~fKP}kkp92--2X#o{vSB` z|G=sL2TuRre;P!B(3$@Sf#RoqIh8H|)$x=B`2{n`8(F6I%~^i-$*ceAS7nw0#W@Q+ zB8wRq^pruEv0|xx8PK*YPZ!6KiaBpD-Sj&Yz~CCF=J@6R|8Nt-s--;AQb{Fm)i2#C zx;0f#taw}9-Wyeq?wrideA{JR7rMcTTv#ug{eSJ%z4d0w*G~TkS^f9l3s3oe)7N); zBL4D4Y)IJ4uFXOg{L;U1n*aRV`TV)ZdApad?ESpk{@&wx jZM{cVI?A$Ze_`t@uzfh`w8l@#ky2=roywZEQrXF#J;}a}?1X7S5ej3n%f9c+*vFnFVr*d; zga$MAeS5FF@9`eT`{(cY)gN=zec#u0p6BOtuGjVPsk#C^Eh{YqLG((BkF+3&>JJ1_ zsGX(+|8pf`paX)gLQ0Pw=y)ZN@Sa{nTlkYTeahDRw_xIv$l4U5ah3}=J>-*Zf|LkK5yqGDTg~JJHIe`M9!JP zL&=UfQmTZz%WQU>3sm85?wiN-{xB#6m zTJM>7_mUUnOt^HF=d?<6a?}$gO?r<&6~`_Sm~kr@-Hw{2tk8;2CnR}WsVzS z6=+Gt2U{oC__dOvi@s)m_4fQxdoq7eU+>NTFGN@e3MV`^)tnrx*7jT;{q|2z;&1m~ zaxXHX(;yY>sFH=5?@Yyq&!=g0D52-4TiB4^9<@iq!OlnHsf|1jLR>Z@Ou5*i8EjU6 zHieoRGmYOG?l%JlY{w#Ko{z>k+FMOX&OXAP;Z#&(UG7dmg)91sIJ6csnjT%fD^l9j za1Joy?Sd@DSCOSJ1{Q^vU9V5Sk7RvSp|T$NBIBbnpQ`;(!B7v4^>9+5H&% zh35H_jEd5g-3A(dn!&7o=hN2dGPL~kuh%=dR`%Lt!VW4ZAk3q)p3te6b1&%=Z0q!#A(e+-5_Z_a%|-amAe!z^4*Odf)?7_*zV67 ztWLf)*s!vV7B28mQcHh{YDK4qYaF!|`8N^SAVLBLLuGR_;BYl!gPfeD85u#0-Y8Lt z4UuN6o{the<8mg`9)fny2$CVzmKo;I1-!V%jYKbCjF?E>iEk2jMA!QD*+osLAgl($ zh2|$=*uhBHs_SA{bX>f8wPIFAW1fOe#E)(<8k&FN3jqgbfaKpuV~tBS#1Y%G;X=2c?=3H=Pv03TPaE2HKqp`6dp6Vo51Ah$UqpQ#N&>>&UT2~$I# zvDLgF`-H(kw-AdVC8MDt-$peK$93EJ9%qL$5JDcT!=UG0%FBDLYhe7kryoaKJ#F6U z@%^D;%pVCH4+Jqbr`?6F@VhJLa(4OY*QPu1F6qQ1#2p@^SK`$vAg_OcKP&ibq7=%) zU*<#+!-FpH80C`MrJNFub{*gaG@9TAZV5}3?R=hO1DWN(1Mq~moocbf4!7jkeDV3?}QO%M^O+i3j2$u4UTN+)us#b zlAgsS#MQk%dIj&}*$$R~Y>Boivc{>VnNq5@oJ*+TPH}br-L_!0EC`yo5YYu;j6G^) zQjJgNced>-8R73cIIj~Qkbj`? z(k302fNoav5`=#7tH$z@LH>3qPCl@Jc2;Yqk~C%|NevO2f$wCC*W%gxMQ0urou?H^ zoO#Hbp|+393y70JWld5*=(nL#NT1prqOV5z^NJDeVi7}Ef6;})lj^@T<^+-BsT}7V z=NFS3qNX!#F=(uyqvi?uNIamYTbBabY5^X6WGr=H=x$wM#_McbT*=}TK|HUmW%{D# z6hu%4k#f;|ywK68(n(VR$5vRFMcYg_qcyYZrVC-)VClF1#R=Ui(oMRq>WK+{WgB{- zzT(fklK5XHK)|a7hmBOGy7;Usq||}=s(R`z$t&}5Fi-wI4Z%AxhBD^;(Y_{!<8hk* zRBq66KyP+XRWUhv1%R;7=6ntk>^f>}Y-~;*nuOvMV9~Z0cVo_}uJMs#rAMfL~Xb#))6R;zuIG!ETIh-^!iG88lpZ0?A;Z66j zfN&xugm?ntf${wZE)Qzod>D-n`tV#G@7=x4(OSBk4B$f*`<=<+G3cV$6A?!6vuh zh3qIXoAuq!ZqtQL256ThND7%8g^EH+h-jWy_4JA>)2gWnbno8fZ5inpfdd84?Fov* z1XBxN()MIQWu}xg&Ob2uw8n{~OpSXvOayP~Qd&Y?baib)i)oAb!Glml_`{m&v#HrNxy z57vIcEWQO8fN;{}(cIJAqZP%!;TX+m;;Ul_3XHWKXaYLhs+?{(-x9ZSXrNTtRo7&<+xzIIKp2?Wa&O|Zvm z^5pR*X*TN_sh9T&vkdR4FxGN6k`{1yK_bjmZtz z2kzgPo?#$xO&;$47?9Mf#o1pA>(>^NaVH5Ci2~hiZUXHNA3fUnFp!i%dmH~I)J1Rq ziHyQ^2!Lq;?HvIN6UC@-ogi{rqet@CD_+Gs`a z6v5wh9Lh#b%vNYOX9F}L1P9Q^W_mrats>t;JTiUaLUoB!$*=0aU@-u9L>h8c%CZL} zFq*s)=cFBFF81o5$qP1dgn0~sZ#Al34n@um<$HKCT?28`-pY7m*FFMvHwgeF7FV%^ zFHDhtV;D!iPjyegaWMLfwyZblJgjXu(00|Pdqha6xOfb2C~W&a#?g4#-l1p=R{{GH zIy_X0(Es9~gWcBm(X~vepQlTi4KBs5xjz~IUI~*4jy8m9kbzy(zYdY_)MR7)T&n!> zV&n-MARdAT*eoe;Bc+$7g@Jd%jfPblRjw%{b24xky8+v7F&KRQ4UqhvSM(6sn=+%n zX64I)Q^2MNEZsiffmb$rn$PQngG9qvGV(tU+xUHVVwEK^CQ~gg4j9*%Nsx@>8mkBx z@jQ4&V(&3xO=s)ye8j21jJgo}_j!;M;iFRk!DCB=jbhd(JKJ3o-C!biWDy0Jh7ANs zJt8U!9aSPMPg3>7UMkntRUZ26B5!&^aEC>pBV6*t&YrFD|2f=M5ON1kv9MNO{yHT^>wFJ+WmRO?2HI1Xlbe5tYbS=fJf*K@afM0DfZON%3F2X z7{~W&uj^zMIW->8ypuKC-y=-E17IPuKndve{vfHL??R`Y!qMaINQX;z{lB|9%UJ`g zrP%=2j)oF*=!h3zu)RP<5ScL9hPG*itgb@~&i+pDD=hFUGV233hGX(Qj8Adcrt75_ zeIRid=^0poxFgL3Kd1IQTY0wpgGNj1T(|bmrj$O}eFw#^e*qc<7a*h)IY&IHbhl(| z`f7jaO`{<7EBl+t$zlKsc9=}_4`=1OwY!Fz-DoB{ZEd5TWP}@5AedLy8KAHrXADxx z2o$I5xAHwCV73pFjV`0k={_}n4sTBlwoiQQ7QwB?jcOz^VDca&G+q}rx$g0<+ zZ6m=W52)_T143i6BJ=}{Z7eF%G)2Cg;!C@mX42;Y`V`=9SVs_*CbV^wb^KKufV(0U zcu>cMBWB)yc2s4q^GL&GxykQR zk14U1fTm6vOT~r1D1OaUzmP!r(eg2l*S&H@j|#%#2d;gRBFKVLCdTjc5W@ma*D|qt zpMg}1*n0@03)eQ}w1W?1U!!GRJ{%kNUSgz}-TY>3fG^n@{+<(ft9Xfw{Q>d}mB_Fg z&8qP7fOrUF*ooDg_#6K>um#&dS{3j2d$d#kV<)$Q$Uu0@kYnlJJ=CqgL!9gY&Vo6Y z1Z>!}olo+0eMUn3$EN$`X}_n}l$`&r0xX0wECe!ZeA=f0EoQU7g_{bP_Jbd=UL+&C z$1Cl}QTisGI1)m}gLv6J^iNE~-TFXhI^f2HW%!MyyXD=-$fJbu>0Acxa&EWoT!Ff7 zDdE;o_KkO!>XbMcG zt#}Uru_bswoTD=;bNunRLuExU^VLHD^PB&MX}?G2nV_t{$Cr_3 z^sMSr(cS-LM5HTBz1+DaGzX7)MN7Sxl3&Hn=H%DkU*FD9!onNF0_6I=ICK3VF(1%dklQc(qHW5d$0jYX_jFj1a%iH=TSBFG$X|ob2~!GT8L>_y7Cw4yf%# z1j|d!GIrm4d3}(yedmcip99c*>qPeLoSakDLqHTc;)qeZ>!WTxN3}o zB~J&D>$+gGWGgQRj_3aDc;TBhswzReT@4k~1G74^mc6!{wbL#*Yq7{NxRNtWqja1E za|)E4$Zk;A&_ytg{FC#M$b?NXS-dbx8n2l0@pbj3BpB=#(qKMa+Ub3&uO}sKDnyd0 zt{Pu;a<^Vo&4TWyf#wnuv^=p~NL6e1_P3=ZHR9A1FF6FWG8`~cuA~i^^HUMr!}~ zhEcZ}&vP{Ico+z1k?=HAYb-rIAPIOU#CipQ@~gi1Phj(k0SW7U)7E;jcUqi598Uq! z!-;#)PGcmfBT(POAY&frYF(*25{4nqQgg(UA>=7IT-cSd$LcaS+0h8TOo{QYaO*wq zs_F^drvh3@6xF5HeKo!FdgdHLb9rE7AK%jG>#%JB7D{;lyli2}_u)zpE;d9APk{-+ z4X_?^P;9{MMm$z0mB?x=u=}+a#D@Swnmu9U& zm_>Gj+7)rVO4?1u`)VE=BH`A+ZM^6~;qnCBG9#*C(XaDy@wp&UZ>`eUVf&StV$R1j zN=?CaKP_Y|3Cacj)PpA+j_x{Nz?N0f1<^4)#N;d(6O|52Mg(m{{r+fwRK7<_lUsjp zLgGepk~2VC5YDf4hck!S@43UyJ5!tyNf934^*cUZ(5J8Of|sTZl6r1BVs27a^j*&v z$A%m)<9+UnJ>EPjXfXoSAkqgkXV~JbNiW`75Pn5MAcNXxG^$rX!2t=vsV|*_Bl6M> z6VM;6ULnTGzSutys)Kiii?rthKRe}7z?!W3rLw!L?>O^f03DJ0pkHp6UY(!{76={! z5t(3HmvOCTwoppBO9gfhnbqvG&)W-+Y9mi^+17zk1}!0WeQ-}_A>qe8pgiFPNN8t^ z$4M52Y-tqv9@qpMHf}jY-$`u;z{;2(D1?pn)>e)~bA#fMFuiZvWKRdGMNo(R9a|yW zD?#aNTcv?})(N^>xy*lctjXFOixSsUgnSO-KQ(D;g^;yx6y z1USN4BNZ%>Peh;3K=#15393Fe_;&YDeSW}bhy{%9So;Qjv*!JhJA%_G)vZ6z<7JBK za)BVw;guk%pNba*&35}sBcdH@sIUPWQ5Empe{aH&5*BVxylMZO81L67vtx6*aUQZB z(u_S2HZwgeB{G1D(KLZp1QRzFxBZdSJ=4Vm436#FH9fw3=z8~+VQ>{3(HF2=j5Y`= zE=GPjiwY|B7201lqfgXl-&_K*ewslf--x}2Q&?Qv1TYwLv470hZKW*08vp<$P(^e> z^fpbtbY$;c_OO}0@5m(r_^cQHELwDY_*1O(6N_{{fKE1A+Fc4qs&$`=1yCjv&Yl+e zkWiPflxddr4PZh2*nXwIUZ{Q}5(o{CQ01uKhDSW%gGGTt$Ok0Wj3%lm=Vf1~+iK8^@*P zrK+*QZ9rwkvz}PZCwLLNjmaO27By5z3wNA;Uc(s1H4Q970Hpu#$&|DYskegFrUn#Y z-1@D@A7*6QfLLCVf@JI*t2>Sx;NSaDXQ2EgJc}Sh1R`)`wB^sOca>Jox&c5yR-MGn z3CqaY|D8ZRza6N(k^kX0f35f3-L?ciN%#n2 z80J|--QjoPKG`($$YfBtoq#L4X8G)Wm*_pGKs-TO0~HcR92uu7SDooZ-*;F*hv>2a^jL$BZ)4IC;NB|JSx>?h zu!mNW(hr%~JlVr~CgcXU?tujXj5izwqkfq}Ev~Yh- zU!D$y2rB@tQD;OaBI%xw{k|T3WE|+V35Rw}#rFta+iMpZ1i&tcfQ0jJI0THU^3`_4 zj3S(e0L;ixAgIyOU~Lu*^M3&5+`^nBw~lmo+a(c2+S?{n*op*{9NY$XeCBmg#&xa{fV zfXn+K9N^t9_GyR#`{3~9nTm<^p8|kY7-8_nRgn6$$#JFL-Bw%ZhoEjp2zwCe*m@*J zOHAMrcH%sXr`JEVc-a%;9!Qb#Dq{B1d2IKoR%0SXEQgr@z!Mi**vKn*p~nP;2~)PYGLSWO@95{6{9=od45bazg+RZ{dNoCZ zuudQmlXJ4mxwnD_8`AdKX=T!k`a82jk}0P#;r6)azFpklY->qI)|IY<^)YMXt7Ng zOp97w$?vc!+3oT5`ME{TwLLEA(}9+ez7yN1eG1r!{BD{7y<;$D?Ya_gqmVKp(XnIVuBWHf?mvwQjCpYBjI5cjcu2$x`$ zE`gpzS?B$5HmPX-io2jYUT{->F#c9~8@($sOCbv}VB6RPGY1U4huHMp|KQDo9fNNb zk5NdJ%$GiT=5)OE1I7wOOvEKnCeBOWS!nT;Eq^@D)R8PnfuXD|*P`)cUmgt?uc1U# zUnC>wHBR=3*2&(Ly!py9>6xI9AW~Qp>xYF(^ z%BN(E0u#60HI`iAfWHecHD+h=lqh1GB4b>7!-8oUc^=ckf}?v!6#=J1sDS!k|e$*pZwsfI9N ze*ud}UA}My%%PEaAl7r066&eVUCikkO|#bk?&OSE2R28*%ol(?bf6c`DxMu@6Yr^+ z&YsKGO1}WqN_q1-CyY;wfh+^cJ_y~42sTFzcP-7ERypA%w@}Ssba($9uXg+mN7}n| zFl0&qvMBZd(pomV=F@lJfFQzPnu9AJ&tx8A<}p}@hZ$j+ zPblK4Xm>8`SFMTzM{7g4C|Kkb=CHeVf4z1-n8}@c00IDE zk+l_6Rku_VpL$h3?bJFCw{Qu|1L&@a&%gK@&>-Xsf+6h{XE2(GI>p8Oge6x9EYaI% zw3yZ@t^pHW^!CKGVsJQH2$5x@i>An?j>#Mr#4J5r=ZZHm5e=K40+>J8dt0bac5^&9 z`g#RC@DltTODz%0?8oeA&0d(=SW@ZbEVl>x!6!$8;I;?um; z{Of>>31DDkoI24wvE50Mo7nvZrz%2eAaVECETilR?DoB()8Q&>!vj_4_PMUu`>A#w zCZC3`+%$0J_e#r-P6K0VQ1lK);GL4)M$%Dv`gX;G6Cl!IVx>97lqR-@1mRu&>(CmM zcQSXXoh0d56%N_}YKS0hNWGIsy$dUFN(H9{vo8cpOS~q977Tn1hd}iLVM?NC$NqDB zJ>>!)gz-QLbU@bVOO0_ZxPD1ycb`pD1^QM*$kP;QTpCVG9}zAc_eM$Ecd9<^`E-x4 z@{7W=`=m}mznsJ+&s&~qpw5JkA=Z-N-1SN6-n_eNJ-kgYpYGC)0yIcez|3rC#CxQJ1%+BA>}Vqwa?ds4cz(l7~J(!xup{X8g5 zORB<6YTXO8GT;adu@LjimAhGl8hu8GU^TFa9SIPuCewTuhUasufTH*P449+Y-9(mb zQp{4ozr(^5ETvWS)b)ZV*g%Psn`l$dhY$^&7>E=L3gE zU~(JjKG0h)m3+K`1I82)V@ItqX*8_;J~>=DvC01J43E%b?J{)7>SH6csio;!@HbTJ zEM~gg`9$BNQz?MYKW`m`X%K zknCjBRmYQDc&H z%nVuf)%vSb;g`Hpht9ae9g)pT>vY|Hn`woSi0VmDE`x&_yxQxSZG$dC^m(`>TUAs` z|5if^AKzx51Tpl!Jka)?f|>Vb+@+CcG=|3_--tl7ns%#dF9i@v3`R{A%7y7n)j)8 z*>ZUh*z9CVqJz!XH?6&piO&VyD5D+`c<&v4x-rWX`*Z$8Me9Fc^ zEBmclM0G^1(FvT|0xTq;7QE=h$-x1av0T&GRPHv6kKoPw!wthFBcFbZqTzmY4pe{E z)_Ii~rs$fbRYCgbxUXP0OzJD@m;X2zSKP^=TX}Q}b6b$C?x->!liiwaGE^H4;yYxV z`>#P%fqXl|G?@V-5>&gfzs2F7C@ENxsvr2j%K$a-3oY#ov)-Oq_qFU#!nx&ond(aT zs73{yJ@dMteaXRU8;a;1l?olpqFmTK&K&_bOHa;;9Y6uq)I~Ic#EE67EdCX&$ zI+)Eg^G)m2q(D_Nq+}Z>>Ae^%!m|=7(m+>LajFza`)DqtSU(d~K`8ox~ZQuDmV*vF^qb zse%^64Qnprvq7~=V4QQ(#aEPFGzbrEuokHAa=4Sdh2&%z_evrYT3^ew)N!P;r#|*x z@GDwcx^NcuDxGI`8bivt;L6lZ=T4RNy{ePmOTsbc_ zTdn)zuuzGa@(vT|DNgpb2<8{bR_Os~|E(~6mS3UKJ>S@%=Z0bBO0!SG4-Wg1#T}cS zRap4Agsk^!=Ej99tyj7Q1-S)_c=fe;p3;6cRP@(!%?TXLKbCU~b5qWZQCAl0b&>mst$y+4jo#kZbg5`pjlwC*T{tuWQ^ENPrUa+qVq9X4acMY z4eUQqp(3}p9+fz?oX?$8>|?|%7^w11&TpbEx=ahD!;4a$qdjw)828h?=fj;UGhg4O z)#1!pg4fxdC#5^9lRQ;wzmglxj&90N&={ zOnqWbE_&*m69)PdNbpH@xk*bf{mE~Qx-N5HUDc$eo;-*5tshT@OD5?N_R zeZ5waCr@y3qV}{AOk=Md?f5FbNH5?G@(1n^zrKzChig*_V>u=uTol)7bf%g%sCE`U zN|^3o7cAt{i{z7Lq=B&1iIE4TGsb}l$Aw_yuMqN`D9Z+M6 zj+{FIlz*%fzl5tOWN5iBP7oKB^rt*G{2XtL$MrV%nPa2|#*-V4#<~1`4+mX1mEc1m z2$9c9l%h^JeNoQxP$i=7_wN-WE!zU)^4I-Yd~*1W2${K|IXlh@RI}HsEo1%xP2$&P z%9c~~Y@6Nj0ryg;PUF-hXo6}j4$Y@Il6;S=2ZS>g+g{Q@m2r?F@77f*gA6^(=6 zc^Z`t4VPT=9$pYV#^y7DtG$zgQjCvzFD_xTne7^eg zp0U3U$|A1Fz9=X*R5xI{8K`(oD|;~inm?;Vgd`CYErjB^b<1k=PydGh9U=IRNeqoS z#w@>lv;4$wEkL-^YSeIyNr*a@ffB;T4kb$ZxfZ~tI_@4#f*_wjRr zhUs~$vR`)g_8Nv7dPaF9kJ`ED$CFxgoo4H3%8chZ)j7#$k3)64(6mf{m@g*(8}Q@3 zJ-KeWx0rAnXW$e*?N1T=D^{a^TW4&soYpr`Qi&u{0(|X~UB*g=B(X>1#Lqb=_V+ZbK2*M61_-0O2Sk}US$j&7MNrsaKTR{z}wb-YOlw_C?gclCpARxR-*%85veT)&>`H@;08E4QDj@pGsh#eBtVe<7(UNPX>`HZ{>UF*bE5 zG33`%F}M9jN-s#wO-;{FFU=izQKDnWD{w&tmC>bVd9YS?F;`$cGES)huuy;fU_n7x zWPvn90YTCOJjB5WZBx+!o}4H9rn#te!hBO?oN0e~pc!2w)R>ZT^#nRWBB21elj6_C zDcGxx^Zo_RMtfDO&X-2-ibxC=1)41t4>!p6dL3=$78W{{3vIWx3t9CgIu?~BS0oqY zgzbYeZgOE@6PV=@o^PX@MqF=@?=Nj`Sa(B-Jh*~2rl_u8d))0NlE@kRYKsG zn)uhYjxX4jUm3W}%RTG!q>pd9wYi3rD+Y)hG)IA=s5r&Q*S{BL7lsD&Vl~RjB>9~8 zc8_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${Te0z5o`j}Hh403jhD zA_Bz3fP@5)l7eT?02vt|CkGT1fRYkWQ2}ad@ccP=@dD7$09sl=M+fNX!ONF`fdMcw z0wyNF%nVpq04pnCV*~8$fP({Yasn1}Z8*RTZeI0d;kt zp#fgM2AY~cOAEYt1GKe)jtzyLZ6Q5EvN&V`E@q0!&STnHexQ z2No8<(h^u%0c&euV*_k$ft?+&w+9Xmz|j#nIRR&9;Nk*YU4fe$aCZkD9>CKRczFRB z40wA3A0OcB3;g_mzdr~F0Po*}48Ny(I6%U#KwZSI1nEXK79fS2_P{MBqf35WRQ{qK7R(Oso={Okd_A0(?LcC$jk&; zS>Wqekev;_eFHf;AU79${|@rJW&SHPhoDo+NCgS&Pd9C#%)UqXYP+@SlacBfp0LZnvR~TmQ?Y zRPJrq8_Z5~!uO|=^_{KJ+f&kECOqDZ%G-tyC@s;tJD3S?O6J70c9w>|2bBI>hP2e9 zv@}(ZkkY4JH7F#G=$D_^^hjELwqNUE$nae<6C3;sCQ~xc_jae*Z>|yo{76Ds>Q-(n zV<}7|)M<_rv5X*jY1nW76T0<#)kAuFX)zT`54t2uj)vxMY$^2@3Tyn7Iy)23jr_>3krsA}d?O*=oBwzB38mdrhL6?E z1<{D@K^8?P`aZ_l+<&s9cU)_RpLvj9qfdI*DP~QvxaTctPKg_k<`iIsAOu^8IE5J5 z5eaE7>-idlaJ^;8+=8`o!rq6SMNV_zSS~_{ME^vF6Uq`;9N1V|A=BEYD9d%z}LaK!6?r+uSIaDVRI`_M+Uf-YWIU0e?G~MJtX(DK+pVM8&lZt7f7bo$yyF z+gP^3q&fB?`U=~IACo4MZ@Hg&tQ5ql?p2QHV4@E(eUjbAn#kiq)*IDV+0OKOS+n~< z9ymvJ(N$C@SX%RD)A)QIc zdb1yiJF+05VQev#$QuUXvt1GC0}1-~G7hbbKhk^{&T%divy7or9NNfDE3pjhN;r-( zQa|cm#t5;r`5h*89!6OdQW~4~mm40*RyW3xL6(HvOf>)d=E!C1==ZsN8KdS7uo7{B%8fTfv40)aD=c@l%*yv+@Uza)!cLbF4^cv@P^o`0!Y03fLvp zM9S}D1NdujqPW-zc84Cc8|4&w=#GE6ZoDuR#l0bJKDVmxi=8m!h%87~#M+Rtb+R30 z=}c5?etL8I>IuE&6_2er2^|v~Kj*FftnjOY5pB#T5VwIN%t~`4U)Jgh-kA{SdVR{? zRl`f+CsSfY_ z$ptTNzh3TuPpCTd=vG8g!$S?l?8$Pt7ihQs2z_q!o0{6esz_aa?OQ`CP(3gzVWr1< z&hN!7+HIu{?~*^M@~hGbshkLyG-iQNcS~mZhlMh3UDeyKQOSDhbG@RBpW-Bj{NZhO zIWr$IP5k5XUJIO?{MU%riF0*K36Qba6W;7(u&SK+Ph@gZlMPq8V`#ZOu5puv?0lB- z{3xb|ue*sdg|0+kVNO(i(A@S?8FIiXjU8s1;_@A5q8eY!j@aX+1iX#>WR<@sYCB14 zYu@QeBvJ>@@dqccJ)MG@Y`U;JEIuO}-&KO>SCILNv>(tbkJ(>N>+f}UiK*DJKAXe<7QPdqWk1~#JN0c-1w9{NXB~9?u#Nrig$r?c0DMQ=H=eq zj2QzVUe@Jwu4h>VffAOfw3Wm@YpwIeDvro9{7W%F;E2YyHx=_x(;$Y`N31k$eAH9r zJ)O%q46>d>NpQ+h(=fQP<5bM2@O${6ecy#MXAQkO)rps_Ij4LDd?b@6=cQz!`LAw7 z=X2k>flA637V>pkO0@Smo|y_}!M2(4s>@Rc=&EG!L05FOXq0}`HJ0;Vc$#SKUkIG~ zUb+x1g_mal3SP60l#V&tcvSs$DclzewHiP8{Oi z9nes@@ENepTDtjGs$b%MSQrWk&px!}3Qx0F=i))&`~2;(r?*+5pVi)J!`|oyhJVUi z`nH2b;*IL35TS)5gPSgny!M*5y%u=a=rB<>wx&60htu)e$=89^nV$>k# z;H>tF=$?1jD5EobvT0sEC~3RfuH<_#jpAjBNCx4(Li6{pEX=(-pgPk}HlTJ93cFC| zqG1S@(%v6g{TOGs90K>ANzD)Ha#DwX;8HH^Qr*e%()co|jE+)zO0`PagcB1>BPTe! zPkAPF8_NCZKx^yg__GoyVw%#QAH`~>O)AHHrsR<&z02SA_H{(x3w7y`oP66LCv6|q zjCo0LmFvISBD8**8$3)sJ3Le9w0(rpypLVs<&XTWq1okoPuwdyk*oH_bY-!U4;vf~nEpLSz(c zX!XM>4nA-DohLFMo%)ZXH=ie%+mHa7$l{Zn!wSBrLJPHgxF5%d8{?_N8 zAu?79Me3g+hGIG9>g+jhH1u&2V13DYvG9?lH^z4wsuwqK54;?a$6m~EyV5SZ0^X{2 zuE*%vI;hdidDj@Ut>85y&0!aOD9w0RlH-xGbq*niJ!QDYU z(apC}DIdm6LCo)U(wR-qeyw2oO*%O?QEn#^tI+z&kf3`Vd`;#fXBk)F)0JIO-}xv@ zd|9nU>vD^C9b4crQl8;T)jOwDlI#*up4m^f>6 zl*p+9@*dhyut1T}9^F5BMx^@PL z7{_$s**t6MGkm07BP}P;SCa1$$lcH2c=3hU=XwJd(U*b#`qSn>)(_?G@hI35s#HoZ zi=CxvYGu$Is+(V4V;r~oH3MV%M^1JYlW0EeUmV{}wRQ-{vl{Otya;hG@6@MP5>DFR z_B)IVucX0m93MLDm$vizV!l-#oPM#bnx3ENH9#+)NVgmsRbCn3l4Ha+R@{j=l6&V? z(6yH=#!5A&hRUJyLUa+3)+=rmkWX?CHZIE9=kh6}twy4dV94!736W6HzYlvZe*b~H zzbRYb16ua5uggyj)`>0o)Vn~BGXZ9ow66bFvKd}R4GzRs73U-n*UDpRG!cGjE#^JM zyBdBVm&&|3rnBvI(lT1)32iYyXMH&{PmPneO)Cmdu>TOt5+mq1H8wJeSLv< zBFv^jgLiiS0{x}P*oVslj28a2LaGa{ep(IU8{10nJU;$Ld*Ol4TjoQ>Ofs~3#wzN_ zgQA`ISv{#q{sc#%i#7g+2vnt2o{eZY$?<~K31Oc`rv1)WX7OSrJ9+Bqsbj10oY5Bd zK#B!&@0;zEl^vjkh4OflplYQrFGZIYxMWkT34px=CM9@=8E*0~Lzp~l&g zueN*PMvJX(VCrrzLlpidcE7AXLwP{wn6pYK-OLot6}ySluP|`buY!VwChn=vHF2y_ zQ@LrQn3=m4P6&p?w-vRP?4(B&0duSqUCWyD`5nGReTL=y)x`n`6y@<5{Pbz57N0&y zW@&O2q!cPDJmVoZZ>it(iIBg$@0(uVlJVyfm2=1zp@VKwahkW`9Jee{OVQ*7S|w{h zb}o(KzXXsk9n1Le^8~$P8gts)B1A=c-w6ACuF*^k6&5N#EABst?0x>F$#x*5dX$qa zSP<=d1r+&FiG4Qb5rqo|gPt_Dl&)HlyjZ(8W5i1eD9IVCJbFXAM zh10dFbdavjN<(*v>7leX=#ya*6w-qBkX5O+zgmkE+{$D!n2_v%wq^#CIWLzc`jxOl z^PV5Ij3+=!Ii#1b8F`HwioDe4ijzOh&Ik_-o8(`qjrgW;37tz++wehv7YcgYPS!>4DHz{+DO*1A9%o+jD#UJ(97?jl56?_=*Sx92T^3__^ zavqgTAu0;gQJDSp!8HxJJ?V=V7g4S^rBJTt7`}M+WfbK!U;f~@hcYEhYWxg6-TsOF zmXjhzj!px&dVG>|d?KxPw)&IrVcxGLsRPn znZ7~aX12e?8=^AZrC5AqTK#-9bc6Pv9aIqSLK)C6gsqyzB2YHJNiH$>P6mxxPN+)Z z1*@zOE&Lwuj>-4D;aYgg!3UXd%Z6sX0X-S_3iV#KkCa2cy0h$kDo2uy(ZZOgJwH-XPxSGDBC6J9)#y=Ls zn1qTZGI60O*&XUL%{RomXw@Hjld)N}G+|bufPAVei1C*%3e~UQ6~Y6$bJjiGZ@kfN zf!TCoyd3VQ)xwhM0UQE|y#INKrAxmnv?;q^k3moYeE^!-&!k_=d&R;lD6)Ac? z@kFe2$NNBeD*or!JNJWPk+wYlw*zqzyR5L8YztV$jDDk3Lmx{*m)wrCf+yYE^JiLk z>*c+AcqcA8`ag1hd)=fot_XibwtZfWskOlq_y@T@v8(+HjUYp3Vr1-yc*5r=jBm+Z z?$5-(aLm!;^`VoI=wf0S-&fMJU3pLah8iI03Zt|LM+aYo+TV!Hf#gsY_X}z1>qt$e zZ!QbC5&kAXA~<#UpRdPf)>y?@9@j|>14@t}v1U|q#?o7xRQpOrSkf-t!y2g~5VBpP z68IsLx)4^^R%(sb;8whXlR3QvQ}An;DBt6cgw4EHNM2v_Zwa2knm%jyjLD5?U?w^L z!N1YfCW!7;(VX-pjCnO-RAVEJRo>>mPUBlOu8iM=#)O~kr_W-> zNxE&I`hou>Bx2o;;)bx*$hJqecOY?Q{XQY|M2AE~6qfho*4>+|wuMfCa!B9!mdDmn z2n*5~`u)3^H%6Xf2TM35j-q;7LJO0~TSfheUFhAeH%KScXC<-F-gI($4y6g(b?uYNtwhFKdvJon%*e6j#6=oMM#hx!)%S zH9-@abiF)y;cdUsPXFrX<+ruFyalw$Ss|w@y@aApiL=?;WNcn3R^qfqF~2A)4sdW& z>wl2iu96l>)%UX`&{CJ*(l!}L@DAco-Tk)LBoO&`Dc=1+T0DJZeL4PFmmuZ+O?B&SO_ z7JfQZv8fhE+JGu1RZQ|}1Bz2mbc8-JwxmJ!^yj&<8bnd?rI^? zA6YlH+)Yf%ddp7$u}_9+5k3GhmMiA7Y1R@^2TvDuUwG?=+?A-YV*u-M?CTq|(cpAn z6H?|TsP$nVJ8BOsNDW0#bxMa?M#&JvH#HaWhc@en?tAZ!Mknw*R9|fP=dsO`DY)^s zznzUjqaWbzcy^c3En$j+Wyvpbpe5gdmSQ3__f;-ivfQ!^k@J#o$1 z?G7svJsL*tA$yrdNZ708oFrD)$wwva_ZVG_Wl6q8E9?wvdlE<7h+(naXU}$ev;2{c z7MVDP+BP}be`#0r9pR_luo^5#G~P^V{jj2e1X3{)9H$q%UwV5N&-9*cFkY7JKQY+p zUT1+ysSrMIjePCzoLghkM;M}U`K$9|XPJ{^dxQ}p<25Vnw`S1>Pv0f4Xy~pNI+Wf# zQ;l(HHt0oy5*3jTb%fZl|L#FS4bDlr`Ssc09jQ3-RR09;=;L8SituKjscx3`>-)Db z&B$fb2?`<~4z3fIPw)3_L})4xb^4#C1}~aLy(940>fF6LC7-Im+`zbsXZtQ6`HvE$ z2)}wP!ko-vZ^^=f&C*HM<>2@C`fkKBq)m_2MN~(r!oSQ*=82^24{#~y?mRC!L|9H+ z(kKcpNEE+p61JOLOS?aM24^T52wK)hp8z~6TpF%i)Og2?=9@GX4;3Sw41wEoXPG)= zYp;?{x4k?0_#d7+x*&L4sy4Cxw`!Hjc_%~slFyR$$c8U zZFBgsk7dn;72v{{E@f|vcjt8es9p`$p*&2CAxe;XRo}{RUY>gv6t6%39-V(K>nc7* z=Nuk1HA1k`J>+SPr}X6?m*f#ad03m(1_Z)+H#Mm>fX$FTEPV+iH1bW_UlZ-X} z(&e*YbmBPqD~o>+(?$4^Bg79RDv795OMyo#_7oZ=l1fn!}v4*Q&;k z4ee}J-Db?t@8p+*_u?~WP%fS>7r07pW)`ewcENYC~6Pk;BvhRknQLerrWIE7pKFo>1ylQ^nlz8z{#IVuzB^icIU*7Ns zdgCT~Nk%UVzfceS2QT*l|AuDYg&C*ExA^-yPP=F(_T_2TifYLThy6R9jxSh&Z3;8Z z(^9w3q58gJ1Xo)=QG17Ml9=2vNin}7fs%Vg&WHH&^{0Z_;~=+n1ip@oOU#3Cj=!XY z!|+=4a=1Q$Z(0vc^Fbr3CtTBNsZC5zuNpEaPfAuVy=DR{q(I_d7ZsBJ-nH-9Tk)r! z&Ub}ka?D?&-g~+8BkE8JTsxb;ewJqoc^1K`JZ$qMFxVn7QbeXxviCDnC8d{}Ge0Eu z%ZMl-Mts=s5k01F+`kszK8A9av60gzCJ#O5vAD;HcT^wnqO(+9ub08tYks$~j0uUT z;S(e}#C)G`a}3y-;6PKH|H_7xWkd^Qw~CQh=2Po2SUXasci!x@cVw~Yy+eAbrX2P< z6EEnW!{`dtf*Yy-0cuc&Tg{&to*le`K%E$#lNu5_zf7S!Am$IeKgT+XMk#*#O*Q@L z2%lCdwgTci@9u;_TtNpPR8rR8FUk55M%K|)#oP5{*`Y6RVo_nom z`DjUF^vjwa{b^UchfIIY1;#Hc%2a-vD+X44j4l*=a!bJoSG-N3lYh{w zxH&w`)LWW{BQ81*7s9xqFsyzg_EW8M`1oz-tXOH`KX^1s8LRnXvMUko!n6c^C96ctv=6p7+oCP3em!6ISB>(l)jryOO%m zqI-01LNNxT^91~09$n1gm1|OmzJGr}nkPS@057eb-FK!K)p}q^%OV|S@@*Y0#_Kw% z5S4ZpVT8_=Z1wXWJmUjSi&t}x{%{&&vUm!gBjV4ZlIn`%Tip7s<8 zE-|V9hlNzCx-=%+aM!>COWpQWHcUjgX`7O#9sZ7pt;LX@vJ@xw*J@MDko+!vmdJQn zC;GFLs*w!IJmcP6Q_M^!_m`5HA&6WY|2hvl|Er=#@+8sK+v$ClsdZWFMDdiZx3CYw zQHF%#$D#f3l6lh*@vjdA-zk`4Uj5ZQTc0`F>XPA`KOa=D-E5LO;4oI5XU$BhO_;v> z=Iw0=+^eard^LKQP}R=ju7}*=RWS`KvxGp)!ci&>ZVFtTWq;aT*^+fX z|3~fSwDvLU?}HHVBRL4qWBpjp=Of`3TLcd1F2{W~s5X>xJU}&^)IBjq=yp;UDC?w9q_Q)C*_2Qlh?^ zAzkQ6Rd)xS;SFE7^=W3A1M@0fNM5V-W!}$agH`$AD+Y5 z?SY!oHc1`RCdD>=BnK>qijvR-bs`yp4;o0zYr+%1uK2w1FAi3({;^?;`QarwT?K^9 ztJCbQAj$)CCNFb+m4bcXrM4GSXX`PGWwJttq|Q3Az$CwXxKq@ub|Zz5^{Av-@Kg|0 zGS;skN~>d%hhBW=iMU{bdKPyX%Al9z-`4GeYZp;)e3RNW>MHgg{jo+szzqI73-DC+ zeLR2P-OiN4xy0i9ADQzMw#bQ!5yHYYH3tOuRHrdMKi}f`Yv{`zUM5t19|T#MfRz-n z`G3~Ql=aLYcHi=f@a7e4qkjO~;0-UvP}&=g@$(tg0xc##im*TbM3nl_W7&9X+L`At z^N6C+xokCiIIx-07-p`M$S~-Fsv7gBVkGH$cEV?&MJalo50ml^uNqM;eE1Q;P{bi? zvexfBp8miY=rN{ZWU_sdKv50jWoIAdZho618L)Ql!B-q7|8MfFL*FF3*vwKC8!GFt zD078JHYyTMzF=V}$LuGbW+c%IA)x%D8aazZH@5RvmXap&a@3P$GV%-S8K>(Xe@-5; zRfeoUPa|!T(~pKW$bMGVij9PI(qnS)@AMvj9sHdUUo+fu@Fq_PLGI5ty&WNzz_SME z<&;Pd?~|O6-$rLUBX-)#_5n?0h8{f{#ygBb(z^V!qM}|C<{@t04YK37QhTek+I}H{ zp8}uiC{hO`r%mz6pYHbRy|##_V_YWW?bO;(d@SDNo0W>&*EWnLGcq_C=ttB@DYWn6 zx;gy)n%MrQpe3>&Hf2Sp5I4=I%4g!PR58`$kd{?eBt=Q(p$L`tjoDV=VOq9l9~)j~ znEirnp@?fewI2G?S~0?_Hzw&4!(RO`cHuOW%&m;ck4Ncf^-&2wM%RL#rD`U%oyGm# zF(R#vfz@&qdOb`cGfRQ@jZ|0F^|x50qBjOV#Gs3KejqKke9HDZS3d|N@tFI zHrRYjIk)JiMLLV@)^SrS4*%Z6WwkeOn619uC(&CCjwFR|y7 zFqMzfgIBUcNv_q0!5{xsyvS`?mXE!J%8Ps`Yxks^1CMVwM5{|6R2UBtq+0rmgzL_5<9!M{M-P*~|+5Z9)%aKVQqMr`@f$dyORRch+%?a1mP z92W8U4AxkbxASNARA0El;t~cSEI3apmQw}(6*+?+CY49n-?OQyT}^4S#qpHm3Q0et z(7&UR^D*On68_IlNq@!75a2`q)Q%IuoFdYMK-n=O*ie6rm43#D|38rDAAZfU(#Pp~ za`+uZzad-kg=rM6=;vgPx-t1V?5}bCwPpTpJq^wIx55Kj(OxTQM;tYeR+8kaNv+n~ zv^L$5*#2cX&ASCAKg&9|yE5&5ljFt97R5`W&ZBZHm6XuzZKSKYymg*`sCt;Q!Qnw( z0_laA-z~+rG0}i>9IgXW(X95N{Id`{DZQO7)Q`_*N6jzX^?W)nmxWI=V#9@<_B^Hf zuweAJS_@EvuDi1(kEDZnD19>~MAY&K=hIOW&ce0PfUoSZz|6hYf)(5{n~WCM{fC*; z+KrT48$@)~yH*shMbieX>7VUJDYh=;e*-z$reN#uuihydFGcT>TAtv<8PF=OoCtW$ zoJ2pn%PLF8SWN4ax0nDAH9oQ(?QeCPrsrr&5&Y&WqzKN+lN>P$q(SQObef;Z~i?xEcB z`DXHquyqH<1|M~#STy=0A9{vk)f(i;ev=p^GJu+4-JOQ^?c;YdQfpY|uBt8TbgJH?@q(Q6SD^%e{^_is6kEa&Ma$WZ5j#S~MEUXEMl ztW6Jx5fC@V<4vAcjJSn!ucYBBioT~=$S{@s$YQ!4vs3dG`sNEAp@?+qS*^sk5U@*s zPxs*Rg`qYRIpLH3lpKD3ockR_9{zq-&s{q9RIelKpweztq*@t|$Ok*n%4I>2tHlD> zK$+*rjkrbQ48fCA{%_DYH&_$VN+0!TXA6W24Tf56B-YB5JyH2v17s@QA&8F&J7ON$ zuo)=wWLc-q@_M}>&iOnbLgb?wsDnX#<$?yf8`Gy-HCEZ%M2H%JJ~-hX!8!~L6G>JZEKZ~ztf#Hn)iI%&`UBlm zyU$Z!(09tMMiMnbdiy%@RbMc8L;%uTV0khQ#$hh|LZ7i$W_)#-=2eZgNcg`aPAWq- zC#uhIqG5}rJDn7WIoYd^Lx_pBl_PG^{l-bid2S-)hijH8nWNmazu%tIh<5Z!4)Y$z z)$-Zh`@%4$y!#0q{d4kO(EhA{>Ck9L2JorkX!{15H(S4Ay!WVFuFMsVBsRi5d@uVvq zkS0Jb?WH%3oqQPk=FNTX1JUQt?UKVLVI6b#W|Oq_mQw5FMYD0D5Wde?!qWYo+@Wr< zA%GxE9o~J_COK?D88qpOaMw@NU(jsoXPmvwg=a%+?3m*jc>)P#T*TC1+rjTtf$JPX z@TE#MFZ6-BMk$J&<$M8o_|Jc%&nviSq|h-$>ll~2OGd&qg}bggC5K%yIf~9yUHTjc zCIUk<*X0S!5g4*P!_gr6_eCt!w-;R-ETx(tT?i2_4xru3*jjz2*4+`rG34cpycg(p zvxkmE2wOSn&i@WVJvPba&cWPmBCerP=77c$UD>%Msgw>-@iC!!LZ7MshHhWO+e6wU zt%~qOl~M1xZTUYx)!k8kGl_xh9>7$CuS^16x`}UztsOdR{pJ~j792XHbrxAWGMwWX zh!zSh5(LyWx3OCOe~BtgZo z?8y;t2Q&}*yo!<3!KUKp=VXP^R^Om$O8uSElC$LgLWlpYNOD-t;e{$zFCaz~uyrQ9 z=XocRx#OW*v{?-3{vubLN6Ub6SWz(z_2LV;_lLr}fE0OmQ_JJiYOlkmcfnZYc-Y zlN6p=wyKl${e;f^NJtpZO>OZ>8FhD}aLyuMxG#C~)eGaXeVUVy#U>J3 z@9m+?7CP#`rmw<;R{c1vQtnGGj5Xd-v;e24No3}?`b;=9t&gA}qbgk{X&m%_&{#|3 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idda4qf709bzzjrjjxnweo.png b/vignettes/tinytable_assets/idda4qf709bzzjrjjxnweo.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#%$YOir!%~J_wN1s_y3nN{Qv*|+%+Q;paK6pT^vIy=DfXpoA;1|0LwvE z=4TV@_boZVe&W$Ct)_`?w)zQ`#a|d6d~e}nbZTc<=-hBY(cy)FLJ5a}6$^(f6HvIA zJ?#4oOUCZmH|HOCRJQQ&FWgFTm@q1g8LFdUG8!f**$hX5_m;?5b_h`Y&g2R`A> zd7JP4JNUEeOOt=hd3XIEC!T$N|8w$r{e1iB+n=a+%-;hnIT$=${an^LB{Ts5AWTbI literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idj1iygi8rr8voizmv7w4v.png b/vignettes/tinytable_assets/idj1iygi8rr8voizmv7w4v.png new file mode 100644 index 0000000000000000000000000000000000000000..80279d32d61766aace7757c19c30139e2ae503e5 GIT binary patch literal 2072 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fstE82aRt%}3JQjXhDJt4 zwzjtR_Vx}A4lXV(-rnARetsb#A>rZSIXOAGxw%C}MWv;s<>lpFU0pprJu_#{T(M%s z%9ShEuV24m!-g$ewwyV0=F+80w{G2f@ZiCV7cbttdGq$|+jsBYy?_7y!-o&wzJ2@o z^XIQ$zkdJz{r~@eosU5=3=Hhio-U3d6?5KRW}hVBF5nWFB6y-&-=XjK{Q&V5y%DTW ze1iVoV_mje{r}|a2dezv*)dE|FR^I2@Q}f&otZhD<=F1M*K z>fQbRr1e3+pn05g<;o^0m2}PtF#s0;Wu*FCq(rU0#4(bRoFKPjKOKU>bGu z7qoJ1nFmb09Ja16L`J&8CkHP4udVF#f0y@p?XM5B+H5NW;pVOj=}zgQ3(vQl({h^6IXAS$PS|QS9TiT^cKZKzb@rcMGY$h?7$f}4 zU;OT~-^XR#Ud(YH4DLe-n%@r>2_IIyS6$W0uea-Lf4=UQ>-sgTe~DWM4f`Ztzz literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idklkks7bow9sf3oftyw9n.png b/vignettes/tinytable_assets/idklkks7bow9sf3oftyw9n.png new file mode 100644 index 0000000000000000000000000000000000000000..549bb94f1e302bc8a75cb39968afeaa027990e12 GIT binary patch literal 11310 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/ido1m1xu1s78wgso3ybvqa.png b/vignettes/tinytable_assets/ido1m1xu1s78wgso3ybvqa.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/idohxaklx1i7qxum3p5fve.png b/vignettes/tinytable_assets/idohxaklx1i7qxum3p5fve.png new file mode 100644 index 0000000000000000000000000000000000000000..fa8a2afc91a3e2ce3e185da6c19afe23505011ed GIT binary patch literal 1728 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+f(hBeian+J$aM59?uCDIv z?Ck35nlWR>%$YOir!&l-KY!V>W$)g-d;k9Z|D_E7|Nj@Lyb;F0z!vD~;uumf=k4X2 zxl9fMtOpr;48#Auv|_b8v#ucA)!@>edFmhDpMA&N@Lkx7g+rF9g^$sxonfJK!v#f$ z7Xk_;90FD>XL@J-es^)>y)%t7cD{>~J$?46ya#&dSct$<4#f z%g4>f&nF}-AS@~%A}TB)B_XFEDX%E4q#~!PA+N5f00bIZikjNWItFU`#+oJ;+GbXI zR1_q8Zo-U3d6?5KRZr`SwD%fz* zaDkHB97FA{q;rvhXBd6<{J;Ez=}S~_Z~XmT&)@uIy85-e*8d(`-o44~{}>jim+WA6 zYPVLvNv;3$`>gk$*9*Tt2^6S$x^?;absru%zdyNH;mfJj>-QJ7F6ZB?-rsaV+bLae zVR*|qC8zZqb6s2F1g*L`_9~T#30Aqj&{6u*bs^H_h3LY~9is|IgNNcop~v;td40^I zcK*L}_EzKfCMjh5g^Vy)XTE095>C zlIHsTzb+gv+zib2zvf&p1{MLeelH|}#etprmmXk_pD$eH2F(5EIc=4JCBgHSd7wxs zb~+C%A--5HOdmAb(t=;)|9vTRUj*n2`JKKC|G)Vhzxxn3(EY!Zw`+cx|L4b~>|ZN@ z9{6{HbC5Zm)bKr1-1={OeB2|`h3D^vyx9Nqi|O=l&#hM1&eQ&KzwYDi@E;u)p66+O ziLd=L$@%xO@2}THD^lC;2X9`oW3ST;@I@GuzL_B*01O89mbxZj z+Ng7Qp$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/idpq7v321t8h6v1m3vqajd.png b/vignettes/tinytable_assets/idpq7v321t8h6v1m3vqajd.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2927f987468f0422573b4de9faa09fdf1ea03a GIT binary patch literal 2444 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fIuPI!;>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/idqxf3p8s3quj12olkusyc.png b/vignettes/tinytable_assets/idqxf3p8s3quj12olkusyc.png new file mode 100644 index 0000000000000000000000000000000000000000..213bef867cbb32b8585b1686f6174bed4a0a6161 GIT binary patch literal 11877 zcmbWdcT`hL7dLzmkqc7v(iDx@Kmlpei{J$T=}H#}AW9bq7)a<*q$z^Zdr^vXq=p_v zK%`0NJ%E6rgeJXxb9~-!t@rPDE!R4dnc1^v*WcbVp%1iG8RE|2>;x1%=@xE^34Dy9CItADKtZzLV@dUY7M{?gg$NO)vP-RqR&MT=>k^J5 z9cVD0M`VmD{-KdYmGgd0aiveiVbby>n;)k9w_R3YX;D#^j^CC;t(k7r@!ocyhA#F2 zKJDN{BJHaxh6t??Ep<(G9gUTNYEyG=J}(^ zc9kuz^Fy~v&K|!5G_M88;#w-)4u2>d?M65rRnFNBKdgwh$~wnuw(gi*Y{Wmzoun^_ zFlr~oF5ezOdbMRq9!!@_GVWI2SG^)$kNc!`eu zPX7}=1mCV|arApRf~SQ$(fI^K$^p7Gd$*9dU~#x*v{JXLZH>*6QOn2<=;~J^r=uS@ zMU75KY*t!W96S2^Gasi?L!^&jk1joTtUs5c9R`W zF43%RAN+ys@Mi$?p#!lPp5?>YgdjZf#BMbSb$ERl{*qgntv9yvs$5INPo(>ZGOQM- za~nwwtv&<>s_^ks=BMMKquolMS(9VBzSC3hByzR%ld8=9@-4I#dc`3qt;w_-I*2x6 zZy@HX<{Xsx%Myb#PB;2@{=Pj7Eu7%sk!zlYS!!4{apA)Mq)9s|yw({tmyj{Nbx!@9+$2jesN zazn`p?2MyMgN+OgL`nhrx}KX|$zzM{qLhv=ILkEGm=SrnB{j?s*A^t`oM7?RF&bGz z-zg^|Drk6Ash<=HB#_WcL4BpLSPn z*Okxbuhct$V_ABd#ZdV?bbaJ%v(hnxFkW_kC{RdrYOGt{jyRY=(?f)>=P0=D&jusJ z+MKwY82%pg>lKt*zW8;Q?>QUt;wdMf622f=l4+h}o}PCmdn;>xA(@q{{2|h+_SvIK z?sPgX6b&S0%YY#Sp&yb{8yVnr)X2-JI6Dggk<1f)li}l>nKZk_y3~evx7hKVZwO6)WSaZc@rJ{RhYp+!n4iE5TyoH&a zpPteuIBM0{5>s^zYuUcFO|+%!v z1#XEzP}rMAKOl2E|EVKq-&*N?>He>1`mQ!A?zH<|$9xLuYB+d{*2mzm*+mV4YahN5 zqjj5;w7+-`6?Tw1ko=egkgTv50g(xt9mXb&fJe)*F}dT`wL&TATr$)D)|y*)$v!tc za>}Ynq!0ps7j-urEw#|Ph>e55bqiQbo$Ar{?xXs$HQ`|LeQozBwh!W$xO>2Fvl%i~QTTIQ*RC;KeoD3h(ze zMD9c}Ph#rJJO3MH!4NL^l)H zSjb;vbh8gl&#Cl6S0{U}xLp!(DIC@-O;|r=A&LJWoc0&h#r?~O1p1}NR+?Wl5J}=ts{~VrC{@oio355^4wmM>Dvy-%?iF@T6it zQrN&o-&}6TDz4ocHf87r1;-r|9arA&Jb#g-|GbwMRaVI9(NmJ;Z{kn`5{Yv%o;nsi z+#e?`TQcISTNztuBC%1CkPVOnr3FP>FrTH+SYBqCGm=Qb@p{%AXY5P*mkqrj$AlAijEizrhs_2$+T~N7BW`1AD+T zHz7(QmD@QAC(F&3H8BJhG;t5Hn1-FD>jk()aw?C(^1S<|yKBnyGiiyyMC}*BpJHMi zd*_pC+!x^R`13bR`^iDdjMMu9kApYax;l*KMKiN2TfoNYJs=D_4wXD_+V}Uh00$x2 ze=wLR_4&T3qzM$li2$1i@fSDh-q{g&BT6n18t`3Py3m~n7!wmT1ZWB9ru?`5dn+vr z;mKzI#|SyE)$jiS#&9a%nsRYDWdfoecK2F>W{57$0uf0VsY&3Jmq9wld|ysK>!b5FNRMBj_eCcy z(PX1U6f(Zh1cs43UQaVAL=T%7a=R#WvaMl`S-I9@%uL(sc*WVKf0@@U!aWFfj_ znp9s#5eFWMzYNSg^{Rwu<*hQ!DPR*ZcwuU2pfyyMbk^p;PbEPiAMrLjw@*unhd~6) zm+}WGpe}DAZ{GG!@v~mUs&nWMh1laEu1lius17{Zwyo`PU8-*kO{^zoy^nV(9w>cpIwAm>&1oNUK&Ixm*7aMvXYJvfY&^ z*$&)^l!^B-zQP!^jI;&3V6*R z>&+bHt~u@`Sgc)C3aPYV2_TXyUdTuAWID7{1d9DvYk*V<(m<-hJT*#aPwi?&uu#%~ z_aJ|D1>?*0@3*vCKjg8#u81?Ln0*`o>%-7#uKa`BP4Ik7L44u*+)NjphmD!W+ z>p;`{jNKOS^ll6BljC9pWk;y2CE?dTkLsKf?TWlfq?5hTimB zPq*6o{%Pw*)2|-K@HSj-z^Z=i42E-Tx3PB$115)o{2vVr)X#nRx{JPMMyLv9F<)@;)oWj(xTe zmJ18{IB1GVtZ0$a&^6qW3-uxh(rrY?;)cp?k~z$>|8%(Q&k%sxMr|tk?>DFh(XjD% zrg~U*Qo*BKB|JD4^d`b6|8!%wr54=}q4qR!mspr%W|*P&O5f2^p|*j409{Ynte^cE zlgm4Tw{HC+4|a@zoE^xqG@l$ zemSUut8ni-uyPy=Cf&81JTdoxctsgt13|N_t5qtoK6?NDd{uRg3a19t$LMl2y&D`} zHZmpf_37yY@*s=C>3wJn&PnP$N4cxyR&AzpXEWLjUMQ#?oE&^9^{@mci)6s0Ul~8_7;jYy z&krOsrHh~kPnVhBtcZbw9T#xt^e?ajR7SWnpgtv#S<~NN)URS6mk^kE3M|>@>FSw?-i_06BV9cBH@5U-~b*i7WQQ8i3q|AOFMmSWgo=D(yGiydJSqc zP}TG|gxxuomBdfs1s*%NGs91oXDH`vVY*C!F7@|g`Nr|)Wij1#(UcSTFZTAi4F|v4 z>z3pI?jb3Gb5Z}6&YllqxzN{wrX@+tzTTIh{OO5%2E%8*0z}D?H-ih`SKQ{E04r_WiMog(pUZ{ri6Ggm(!t}uqWaU8_QU&`(pWFM z_m<=b!%z;cmju5HtsG>zX{tim*B3@3U2Gd9dVy+pP6o-Mj?DKL9aXh2K8z+a5z@`> z?CwNWswcsF`i;5Lc3GfjjBRoizyQiToCQOY>)bgEgT3djLk{Dp z#4Y1e0w9Z(27289-3g9y`I--yK$CcFD!CVWk1Yb(Rs@*n8EylNWc~&$_Ziz7a$I5bMcbsm11I6d%}WUg^hRQ0!+uM`=ni`WFy1BD zxVz5n9rp=DAVRPHr`dtnEN>0!#8oW;NK6i(wE653JgRM)TOII=O-CUjq~ysIHCWQJ zK+VZXsZYF|r9S`X1Pm;-ja#7CD9x|G%uxqcl+!s1K^g!OrS6P7;vij++J3P4|Nqf! zRRSQ~t}mIUH*%B6{}7s#$#zj6B@er`VA7+)V=u}!k8D@`P5%^5!=!~w{k@iTOt+ok ztY#jVf15C@{yPy>-t%LHkMtFsQ@ zu=4lWK!$HZ?40l7n+Kd|AOTN?tohe+B2bS{L7XSyAr?w9>AuG&0PhJOYV0Xv)pcM< z@FHgHMcVpuhD)z^reo$WTN#>?qT9_J-#DE3*SF`({{gKQe?}U=ANbsv=w=66LCvu6 zQx{X#39Nu!OD6^lNwv_d(QUtISsf%M?2Bjhn**l#RRt2@pzJLM=SiyEHa9NWd*AB; za$B)9`W60t8rj^LC;=P?iv1QUi?Vsn(RoJ~kml5W^-RFYXu>NC*kuVHFfY-aDV8|5 zWqN?Ou~EImoV~>)e}t@E0q}*AOYk^;^Rwyl*#eLBj9oR)M7Q4PA1pB-B@?`WkdAsq z_CH4#@pk>EO#^JRj_9`;^854DM@CqIR(~fLR3T?Itt+VC@*pi%4)%5>(_o`#Zwi%N zb&>Ed+nxT8!%=F*nU=GcH_+#7snd8RXj{SbZv)F|w2vDUY_x8e2G(r85)!E%$>byh zhn`yjK>G^y^?#NRJ{EWo1Wd@N@u{|L9ato>UjS|DxOTQ)k(SsedY{Ow1XX;dwMnJj z@K1Rqfc|haASoS?x^gJxG-V@HlIwBnVvmU@Cz$9UTVOYLBcH`oRw74aPRU>s7)Z{O zeEc^Z7m0=NnRigU@)Gi=6jR zn**)pn`nV93CjbJ*Fd2v8whQOD;D|9`0dau2=w9X&#-( zL4BT*5vqtDQ_-}9YOi(&cyTCLyfWgAa>+4I5qs%kNu^_D^er|dV3bMal?u=q)cq9| zyt44KvFYgNp}O!m6-nV&{tP*MvS1IyRS3(j%{ldPPAIjpF{Gafn<=(@r*gZ-yBLOo zsevq*oevo}XKHB8{m;)2n0lM(%ao;w#jj*YpzSLpCnNIG_ zS&=DeheblKJvQ|m?gA{Ow29{8XrlSujGj(aetnmI2DqW+r6z=Y4${2#AjHSHih5wR z@OI+UrK4w6z;uNpuBqaPMGyidxXX+Vgj)31RNM^>Wy|aWa1Zs9r36VsB&L-;Y#H3!)Lu z)YahBL&fjeG}LlPX}n*T+0qaWdciaVZF@Q_op^T z=l~5jcTg-rvULNX)i>ZqR2!@T7b^9WDYKsSY$<-4%0AdNbE50x{a@ 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 literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idr8bwzmg3jm5g4u8zkbla.png b/vignettes/tinytable_assets/idr8bwzmg3jm5g4u8zkbla.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/iduyzg527kard0vkn1dak2.png b/vignettes/tinytable_assets/iduyzg527kard0vkn1dak2.png new file mode 100644 index 0000000000000000000000000000000000000000..e0b2cddca6c1d229b1f01e786315bce11877ca98 GIT binary patch literal 2558 zcmeAS@N?(olHy`uVBq!ia0y~yV1B{C!05}t3=~;nymb+fN)GS|aRt&^T3S|CR<^db z_V)G;4i2HAp?P_E#l^+t<>eI>6&)QNot>Ti{rwXrOqe-y=B!z>R;*aDa^=eP>(_7H zx^?^Z?Pt!Mxq9{LqeqY4zJ2@d-MbGTK79N3?Z=NFfB*jd_wV2T|NrM^d`f3v;0*J0 zaSW-L^Y-%ftw+toTn@^;UwbV2sr*wHg#h{Ie)1neSsBcBZ1}AEp(>M~!A}1zJ5=l{m;{Tt=+5c>>)oxp2+n~7rEc>5j zF!n!}7yGmBcPVD_Cv;q}^r&WVZaL?8i&;Xcgzu8v0fB|Z6TUIDam;Pr!fxR5LI$MW z>AAvNMjk;c_E9aPAvVYo%OlM4XaRVQe|<1*IX7qjwt0n7^84B@%vAoewdI`5!u6^p&p2vz7aF_2$mX1D=@jq%;*8+0 zD5vzk3)h9Lid*(g8z`mc-d*^A=b!C?@}Hk0UessAv;NSl7qHqh|H4CV0jnBDr*?gZ z7av$TWcM*FJS?tI@`I^`FTMdovSH_i{h1)W_j_9Zy|w=_>)$=O1B>hH*0=1Be{tX{ g&Q=cArqFMBi-6_IXFQEo0~>M-p00i_>zopr0PGWpYXATM literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idvt0104a249roja3wbuan.png b/vignettes/tinytable_assets/idvt0104a249roja3wbuan.png new file mode 100644 index 0000000000000000000000000000000000000000..b6cc9f629224963722c35431d023f15477b01514 GIT binary patch literal 1846 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 K$0o%2^#1{gI{m-^ literal 0 HcmV?d00001 diff --git a/vignettes/tinytable_assets/idytbxug4f0fa87fa0te7d.png b/vignettes/tinytable_assets/idytbxug4f0fa87fa0te7d.png new file mode 100644 index 0000000000000000000000000000000000000000..0981e71f874c51f262122c8085ceea6b8a4a0e7b GIT binary patch literal 5057 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 >eW}07HYb764GY~JZ>aKhnUVIRe>#UmZ;s5 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
Combine two tiny tables.