From 2dac120e8b70da4722525835592a49ae732be8ac Mon Sep 17 00:00:00 2001 From: vincentarelbundock Date: Sat, 13 Jan 2024 21:34:01 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20@=20vincenta?= =?UTF-8?q?relbundock/tinytable@90718ab6eaa1b94d07e634ab9bdc48e4f7dae326?= =?UTF-8?q?=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- man/tt.html | 118 +-- search.json | 40 +- vignettes/tutorial.html | 1503 ++++++++++++++++++++------------------- vignettes/tutorial.pdf | Bin 103155 -> 103168 bytes 4 files changed, 848 insertions(+), 813 deletions(-) diff --git a/man/tt.html b/man/tt.html index 7b05248c..04588ca1 100644 --- a/man/tt.html +++ b/man/tt.html @@ -394,7 +394,7 @@

Examples

- tinytable_ysyjmeppxw40va790mxh + tinytable_uwdl6lwclrv8h7iqe6ga - - + + + @@ -493,7 +494,7 @@

Examples

- tinytable_pf63ufq8wwy6vatz5c8a + tinytable_k7dte80bi0mc2xvtgcvu - - + + + diff --git a/search.json b/search.json index addf2d21..55589639 100644 --- a/search.json +++ b/search.json @@ -144,14 +144,14 @@ "href": "man/tt.html", "title": "tinytable", "section": "", - "text": "The tt function renders a table in different formats (HTML, Markdown, or LaTeX) with various styling options.\n\n\n\ntt(\n x,\n output = NULL,\n align = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tt_tabularray_placement\", default = NULL)\n)\n\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\noutput\n\n\nThe format of the output table. Can be \"html\", \"latex\", or \"markdown\". If NULL, the format is automatically detected in Quarto or Rmarkdown documents.\n\n\n\n\nalign\n\n\nA string specifying the alignment of columns. Each character in the string corresponds to a column; ‘l’ for left, ‘c’ for center, and ‘r’ for right alignment. The length of the string must match the number of columns in x.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nA single string or a (named) list of strings to append at the bottom of the table.\n\n\n\n\ntheme\n\n\nThe theme to apply to the table.\n\n\nLaTeX: \"default\", \"striped\", \"void\", or \"grid\".\n\n\nHTML: \"default\", \"striped\", \"void\", \"grid\", or a (composite) Bootstrap class such as “table table-dark” or “table table-dark table-hover”. See\n\n\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\",\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\",\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\n\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n\n \n\n\n \n \n \n tinytable_ysyjmeppxw40va790mxh\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n align = \"ccrrl\",\n caption = \"Data about cars.\")\n\n\n \n\n\n \n \n \n tinytable_pf63ufq8wwy6vatz5c8a\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "The tt function renders a table in different formats (HTML, Markdown, or LaTeX) with various styling options.\n\n\n\ntt(\n x,\n output = NULL,\n align = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tt_tabularray_placement\", default = NULL)\n)\n\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\noutput\n\n\nThe format of the output table. Can be \"html\", \"latex\", or \"markdown\". If NULL, the format is automatically detected in Quarto or Rmarkdown documents.\n\n\n\n\nalign\n\n\nA string specifying the alignment of columns. Each character in the string corresponds to a column; ‘l’ for left, ‘c’ for center, and ‘r’ for right alignment. The length of the string must match the number of columns in x.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nA single string or a (named) list of strings to append at the bottom of the table.\n\n\n\n\ntheme\n\n\nThe theme to apply to the table.\n\n\nLaTeX: \"default\", \"striped\", \"void\", or \"grid\".\n\n\nHTML: \"default\", \"striped\", \"void\", \"grid\", or a (composite) Bootstrap class such as “table table-dark” or “table table-dark table-hover”. See\n\n\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\",\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\",\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\n\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n\n \n\n\n \n \n \n tinytable_uwdl6lwclrv8h7iqe6ga\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n align = \"ccrrl\",\n caption = \"Data about cars.\")\n\n\n \n\n\n \n \n \n tinytable_k7dte80bi0mc2xvtgcvu\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "man/tt.html#draw-a-tiny-table", "href": "man/tt.html#draw-a-tiny-table", "title": "tinytable", "section": "", - "text": "The tt function renders a table in different formats (HTML, Markdown, or LaTeX) with various styling options.\n\n\n\ntt(\n x,\n output = NULL,\n align = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tt_tabularray_placement\", default = NULL)\n)\n\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\noutput\n\n\nThe format of the output table. Can be \"html\", \"latex\", or \"markdown\". If NULL, the format is automatically detected in Quarto or Rmarkdown documents.\n\n\n\n\nalign\n\n\nA string specifying the alignment of columns. Each character in the string corresponds to a column; ‘l’ for left, ‘c’ for center, and ‘r’ for right alignment. The length of the string must match the number of columns in x.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nA single string or a (named) list of strings to append at the bottom of the table.\n\n\n\n\ntheme\n\n\nThe theme to apply to the table.\n\n\nLaTeX: \"default\", \"striped\", \"void\", or \"grid\".\n\n\nHTML: \"default\", \"striped\", \"void\", \"grid\", or a (composite) Bootstrap class such as “table table-dark” or “table table-dark table-hover”. See\n\n\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\",\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\",\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\n\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n\n \n\n\n \n \n \n tinytable_ysyjmeppxw40va790mxh\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n align = \"ccrrl\",\n caption = \"Data about cars.\")\n\n\n \n\n\n \n \n \n tinytable_pf63ufq8wwy6vatz5c8a\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "The tt function renders a table in different formats (HTML, Markdown, or LaTeX) with various styling options.\n\n\n\ntt(\n x,\n output = NULL,\n align = NULL,\n caption = NULL,\n width = NULL,\n notes = NULL,\n theme = \"default\",\n placement = getOption(\"tt_tabularray_placement\", default = NULL)\n)\n\n\n\n\n\n\n\n\nx\n\n\nA data frame or data table to be rendered as a table.\n\n\n\n\noutput\n\n\nThe format of the output table. Can be \"html\", \"latex\", or \"markdown\". If NULL, the format is automatically detected in Quarto or Rmarkdown documents.\n\n\n\n\nalign\n\n\nA string specifying the alignment of columns. Each character in the string corresponds to a column; ‘l’ for left, ‘c’ for center, and ‘r’ for right alignment. The length of the string must match the number of columns in x.\n\n\n\n\ncaption\n\n\nA string that will be used as the caption of the table.\n\n\n\n\nwidth\n\n\nA numeric value between 0 and 1 indicating the proportion of the line width that the table should cover.\n\n\n\n\nnotes\n\n\nA single string or a (named) list of strings to append at the bottom of the table.\n\n\n\n\ntheme\n\n\nThe theme to apply to the table.\n\n\nLaTeX: \"default\", \"striped\", \"void\", or \"grid\".\n\n\nHTML: \"default\", \"striped\", \"void\", \"grid\", or a (composite) Bootstrap class such as “table table-dark” or “table table-dark table-hover”. See\n\n\n\n\n\n\nplacement\n\n\nA string to control the position of tables in LaTeX. Will be inserted in square brackets like: \\begin{table}[H]\n\n\n\n\n\n\n\nAn object of class tt representing the table.\n\n\n\nWhen rendering Quarto and Rmarkdown documents, tinytable will populate the LaTeX preamble automatically with all the required packages. For standalone LaTeX packages, these commands should be inserted in the preamble:\n\n\n\\usepackage{tabularray}\n\\usepackage{float}\n\\usepackage{codehigh}\n\\usepackage[normalem]{ulem}\n\\UseTblrLibrary{booktabs}\n\\newcommand{\\tinytableTabularrayUnderline}[1]{\\underline{#1}}\",\n\\newcommand{\\tinytableTabularrayStrikeout}[1]{\\sout{#1}}\",\n\\NewTableCommand{\\tinytableDefineColor}[3]{\\definecolor{#1}{#2}{#3}}\n\n\n\n\n\n\nlibrary(tinytable)\n\n\n\nlibrary(tinytable)\nx <- mtcars[1:4, 1:5]\n\ntt(x)\n\n\n \n\n\n \n \n \n tinytable_uwdl6lwclrv8h7iqe6ga\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\ntt(x,\n theme = \"striped\",\n width = 0.5,\n align = \"ccrrl\",\n caption = \"Data about cars.\")\n\n\n \n\n\n \n \n \n tinytable_k7dte80bi0mc2xvtgcvu\n \n \n \n \n \n\n \n \n \n \n Data about cars.\n \n mpg\n cyl\n disp\n hp\n drat\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "CITATION.html", @@ -179,126 +179,126 @@ "href": "vignettes/tutorial.html#themes", "title": "tinytable", "section": "Themes", - "text": "Themes\ntinytable offers a few basic themes out of the box: “default”, “striped”, “grid”, “void.” Those themes can be applied with the theme argument of the tt() function. As we will see below, it is easy to go much beyond those basic settings to customize your own tables. Here we only illustrate a few of the simplest settings:\n\ntt(x, theme = \"striped\")\n\n\n \n\n\n \n \n \n tinytable_bv2qa5xwgm0tzm3zfaza\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\n\n\ntt(x, theme = \"grid\")\n\n\n \n\n\n \n \n \n tinytable_s1uhltgnyddnaut9ijz8\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Themes\ntinytable offers a few basic themes out of the box: “default”, “striped”, “grid”, “void.” Those themes can be applied with the theme argument of the tt() function. As we will see below, it is easy to go much beyond those basic settings to customize your own tables. Here we only illustrate a few of the simplest settings:\n\ntt(x, theme = \"striped\")\n\n\n \n\n\n \n \n \n tinytable_ivla07lzwebqy0cywx9w\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\n\ntt(x, theme = \"grid\")\n\n\n \n\n\n \n \n \n tinytable_kcu0ob2aolvwf13qf08i\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#alignment", "href": "vignettes/tutorial.html#alignment", "title": "tinytable", "section": "Alignment", - "text": "Alignment\nTo align columns, we use a single string, where each letter represents a column:\n\ntt(x, align = \"ccrrl\")\n\n\n \n\n\n \n \n \n tinytable_ua7hn16jmo53qyqmtqyq\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Alignment\nTo align columns, we use a single string, where each letter represents a column:\n\ntt(x, align = \"ccrrl\")\n\n\n \n\n\n \n \n \n tinytable_342nbtnikra6p6iccd43\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#width", "href": "vignettes/tutorial.html#width", "title": "tinytable", "section": "Width", - "text": "Width\nThe width arguments accepts a number between 0 and 1, indicating what proportion of the linewidth the table should cover:\n\ntt(x, width = 0.5)\n\n\n \n\n\n \n \n \n tinytable_u1tifltqslnz87l215mb\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\n\n\ntt(x, width = 1)\n\n\n \n\n\n \n \n \n tinytable_gm3eck5robd6klldagv8\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Width\nThe width arguments accepts a number between 0 and 1, indicating what proportion of the linewidth the table should cover:\n\ntt(x, width = 0.5)\n\n\n \n\n\n \n \n \n tinytable_bjlf9b09lypgy1lv12ve\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\n\ntt(x, width = 1)\n\n\n \n\n\n \n \n \n tinytable_ejd1t8n0cd50g43lpwh6\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#line-breaks-and-text-wrapping", "href": "vignettes/tutorial.html#line-breaks-and-text-wrapping", "title": "tinytable", "section": "Line breaks and text wrapping", - "text": "Line breaks and text wrapping\nWhen the width argument is specified and a cell includes long text, the text is automatically wrapped to match the table.\n\nlorem <- data.frame(\n Lorem = \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\",\n Ipsum = \" Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\"\n)\ntt(lorem, width = 3/4)\n\n\n \n\n\n \n \n \n tinytable_g0ydkd1o6w8h9zy3xt6s\n \n \n \n \n \n\n \n \n A full width table with wrapped text.\n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n \n\n \n\n\n\n\n\nManual line breaks work sligthly different in LaTeX (PDF) or HTML. This table shows the two strategies. For HTML, we insert a <br> tag. For LaTeX, we wrap the string in curly braces {}, and then insert two (escaped) backslashes: \\\\\\\\\n\nd <- data.frame(\n \"{Sed ut \\\\\\\\ perspiciatis unde}\",\n \"dicta sunt<br> explicabo. Nemo\"\n) |> setNames(c(\"LaTeX line break\", \"HTML line break\"))\ntt(d, width = 1)\n\n\n \n\n\n \n \n \n tinytable_dmk6eynd8238u8yzvzpq\n \n \n \n \n \n\n \n \n \n \n \n \n LaTeX line break\n HTML line break\n \n \n \n \n \n {Sed ut \\\\ perspiciatis unde}\n dicta sunt explicabo. Nemo" + "text": "Line breaks and text wrapping\nWhen the width argument is specified and a cell includes long text, the text is automatically wrapped to match the table.\n\nlorem <- data.frame(\n Lorem = \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\",\n Ipsum = \" Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\"\n)\ntt(lorem, width = 3/4)\n\n\n \n\n\n \n \n \n tinytable_1dfnitwb4y0e87zs0ukf\n \n \n \n \n \n\n \n \n A full width table with wrapped text.\n \n \n \n Lorem\n Ipsum\n \n \n \n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\nManual line breaks work sligthly different in LaTeX (PDF) or HTML. This table shows the two strategies. For HTML, we insert a <br> tag. For LaTeX, we wrap the string in curly braces {}, and then insert two (escaped) backslashes: \\\\\\\\\n\nd <- data.frame(\n \"{Sed ut \\\\\\\\ perspiciatis unde}\",\n \"dicta sunt<br> explicabo. Nemo\"\n) |> setNames(c(\"LaTeX line break\", \"HTML line break\"))\ntt(d, width = 1)\n\n\n \n\n\n \n \n \n tinytable_rvq653jgikqeebs75co4\n \n \n \n \n \n\n \n \n \n \n \n \n LaTeX line break\n HTML line break\n \n \n \n \n \n {Sed ut \\\\ perspiciatis unde}\n dicta sunt explicabo. Nemo" }, { "objectID": "vignettes/tutorial.html#captions-and-cross-references", "href": "vignettes/tutorial.html#captions-and-cross-references", "title": "tinytable", "section": "Captions and cross-references", - "text": "Captions and cross-references\nIn Quarto, one can specify captions and use cross-references using code like this:\n@tbl-blah shows that...\n\n```{r}\n#| label: tbl-blah\n#| tbl-cap: \"Blah blah blah\"\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4])\n```\nAnd here is the rendered version of the code chunk above:\nTable 1 shows that…\n\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4], placement = NULL)\n\n\n\n \n\n\n \n \n \n tinytable_38v1ao2u92zkdvumh2xo\n \n \n \n \n \n\n \n \n Table 1: Blah blah blah \n \n \n \n mpg\n cyl\n disp\n hp\n \n \n \n \n \n 21\n 6\n 160\n 110\n \n \n 21\n 6\n 160\n 110\n \n \n 22.8\n 4\n 108\n 93\n \n \n 21.4\n 6\n 258\n 110\n \n \n \n \n\n \n \n\n \n\n\n\n\n\n\nFor standalone LaTeX tables, you can use the caption argument like so:\n\ntt(x, caption = \"Blah blah.\\\\label{tbl-blah}\")\n\nBe aware that this more approach may not work well in Quarto or Rmarkdown documents." + "text": "Captions and cross-references\nIn Quarto, one can specify captions and use cross-references using code like this:\n@tbl-blah shows that...\n\n```{r}\n#| label: tbl-blah\n#| tbl-cap: \"Blah blah blah\"\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4])\n```\nAnd here is the rendered version of the code chunk above:\nTable 1 shows that…\n\nlibrary(tinytable)\ntt(mtcars[1:4, 1:4], placement = NULL)\n\n\n\n \n\n\n \n \n \n tinytable_ss6l4mlgbdnuzz73nszx\n \n \n \n \n \n\n \n \n Table 1: Blah blah blah \n \n \n \n mpg\n cyl\n disp\n hp\n \n \n \n \n \n 21\n 6\n 160\n 110\n \n \n 21\n 6\n 160\n 110\n \n \n 22.8\n 4\n 108\n 93\n \n \n 21.4\n 6\n 258\n 110\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\n\nFor standalone LaTeX tables, you can use the caption argument like so:\n\ntt(x, caption = \"Blah blah.\\\\label{tbl-blah}\")\n\nBe aware that this more approach may not work well in Quarto or Rmarkdown documents." }, { "objectID": "vignettes/tutorial.html#footnotes", "href": "vignettes/tutorial.html#footnotes", "title": "tinytable", "section": "Footnotes", - "text": "Footnotes\nThe note argument accepts single strings or named lists of strings:\n\nn <- \"Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\"\n\ntt(lorem, notes = n, width = 1)\n\n\n \n\n\n \n \n \n tinytable_oopg8sdr7swpnk5r01g8\n \n \n \n \n \n\n \n \n A full-width table with wrapped text in cells and a footnote.\n \n \n \n Lorem\n Ipsum\n \n \n Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n \n\n \n\n\n\n\n\nWhen note is a named list, the names are used as identifiers and displayed as superscripts:\n\ntt(x, notes = list(a = \"Blah.\", b = \"Blah blah.\"))\n\n\n \n\n\n \n \n \n tinytable_luluzvkdjxn9jj3jij34\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n a Blah.\nb Blah blah.\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Footnotes\nThe note argument accepts single strings or named lists of strings:\n\nn <- \"Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\"\n\ntt(lorem, notes = n, width = 1)\n\n\n \n\n\n \n \n \n tinytable_sqztcznq4x2ddgk4994v\n \n \n \n \n \n\n \n \n A full-width table with wrapped text in cells and a footnote.\n \n \n \n Lorem\n Ipsum\n \n \n Fusce id ipsum consequat ante pellentesque iaculis eu a ipsum. Mauris id ex in nulla consectetur aliquam. In nec tempus diam. Aliquam arcu nibh, dapibus id ex vestibulum, feugiat consequat erat. Morbi feugiat dapibus malesuada. Quisque vel ullamcorper felis. Aenean a sem at nisi tempor pretium sit amet quis lacus.\n \n \n Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.\n Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos.\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\nWhen note is a named list, the names are used as identifiers and displayed as superscripts:\n\ntt(x, notes = list(a = \"Blah.\", b = \"Blah blah.\"))\n\n\n \n\n\n \n \n \n tinytable_oym9gvqn2off6wq28chx\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n \n \n a Blah.\nb Blah blah.\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#math", "href": "vignettes/tutorial.html#math", "title": "tinytable", "section": "Math", - "text": "Math\nYou can render equations inside tables using the common $...$ syntax:\n\ndat <- data.frame(Math = c(\"$x^2 + y^2 = z^2$\", \"$\\\\frac{1}{2}$\"))\ntt(dat)\n\n\n \n\n\n \n \n \n tinytable_2iuilgee6zndlxosvq9n\n \n \n \n \n \n\n \n \n \n \n \n \n Math\n \n \n \n \n \n $x^2 + y^2 = z^2$\n \n \n $\\frac{1}{2}$\n \n \n \n \n\n \n \n\n \n\n\n\n\n\nIn LaTeX (PDF), you can also use the mode inner setting from tabularray to render math in tables without $ delimiters (see Section 5 for details on tabularray):\n\ndat <- data.frame(Math = c(\"x^2 + y^2 = z^2\", \"\\\\frac{1}{2}\"))\ntt(dat) |> style_tt(tabularray_inner = \"column{1}={mode=math},\")" + "text": "Math\nYou can render equations inside tables using the common $...$ syntax:\n\ndat <- data.frame(Math = c(\"$x^2 + y^2 = z^2$\", \"$\\\\frac{1}{2}$\"))\ntt(dat)\n\n\n \n\n\n \n \n \n tinytable_k7r0ctzfvo0v1yp8r08w\n \n \n \n \n \n\n \n \n \n \n \n \n Math\n \n \n \n \n \n $x^2 + y^2 = z^2$\n \n \n $\\frac{1}{2}$\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\nIn LaTeX (PDF), you can also use the mode inner setting from tabularray to render math in tables without $ delimiters (see Section 5 for details on tabularray):\n\ndat <- data.frame(Math = c(\"x^2 + y^2 = z^2\", \"\\\\frac{1}{2}\"))\ntt(dat) |> style_tt(tabularray_inner = \"column{1}={mode=math},\")" }, { "objectID": "vignettes/tutorial.html#cells-rows-columns", "href": "vignettes/tutorial.html#cells-rows-columns", "title": "tinytable", "section": "Cells, rows, columns", - "text": "Cells, rows, columns\nTo style individual cells, we use the style_cell() function. The first two arguments—i and j—identify the cells of interest, by row and column numbers respectively. To style a cell in the 2nd row and 3rd column, we can do:\n\ntt(x) |>\n style_tt(\n i = 2,\n j = 3,\n background = \"black\",\n color = \"white\")\n\n\n \n\n\n \n \n \n tinytable_hi3n7don90he9qhv7hmi\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nThe i and j accept vectors of integers to modify several cells at once:\n\ntt(x) |>\n style_tt(\n i = 2:3,\n j = c(1, 3, 4),\n italic = TRUE,\n color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_0naif1s01cn91uk06acv\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nWe can style all cells in a table by omitting both the i and j arguments:\n\ntt(x) |> style_tt(color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_s9qedgjbgw61c8ihdbc4\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nWe can style entire rows by omitting the j argument:\n\ntt(x) |> style_tt(i = 1:2, color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_d00cz4im5qxt9x3vjiur\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nWe can style entire columns by omitting the i argument:\n\ntt(x) |> style_tt(j = c(2, 4), bold = TRUE)\n\n\n \n\n\n \n \n \n tinytable_fppevn8dzzlxx0yzk03f\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nThe j argument accepts integer vectors, but also a string with a Perl-style regular expression, which makes it easier to select columns by name:\n\ntt(x) |> style_tt(j = \"mpg|drat\", color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_9equ6ca3xqmbbbhh98qo\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nOf course, we can also call the style_tt() function several times to apply different styles to different parts of the table:\n\ntt(x) |> \n style_tt(i = 1, j = 1:2, color = \"orange\") |>\n style_tt(i = 1, j = 3:4, color = \"green\")\n\n\n \n\n\n \n \n \n tinytable_mz8hg2v4ukgnr2y4l86d\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Cells, rows, columns\nTo style individual cells, we use the style_cell() function. The first two arguments—i and j—identify the cells of interest, by row and column numbers respectively. To style a cell in the 2nd row and 3rd column, we can do:\n\ntt(x) |>\n style_tt(\n i = 2,\n j = 3,\n background = \"black\",\n color = \"white\")\n\n\n \n\n\n \n \n \n tinytable_3v6q9qozcydzabvef3sb\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nThe i and j accept vectors of integers to modify several cells at once:\n\ntt(x) |>\n style_tt(\n i = 2:3,\n j = c(1, 3, 4),\n italic = TRUE,\n color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_sm526xrlh4x42yle75zs\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nWe can style all cells in a table by omitting both the i and j arguments:\n\ntt(x) |> style_tt(color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_yk9q0fzetjxo6megtdy3\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nWe can style entire rows by omitting the j argument:\n\ntt(x) |> style_tt(i = 1:2, color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_c1h6sqd4p81aw8kz40ga\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nWe can style entire columns by omitting the i argument:\n\ntt(x) |> style_tt(j = c(2, 4), bold = TRUE)\n\n\n \n\n\n \n \n \n tinytable_kiy7792iqfz416lnzy3i\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nThe j argument accepts integer vectors, but also a string with a Perl-style regular expression, which makes it easier to select columns by name:\n\ntt(x) |> style_tt(j = \"mpg|drat\", color = \"orange\")\n\n\n \n\n\n \n \n \n tinytable_pl8erj8wp7k2yjskokzu\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nOf course, we can also call the style_tt() function several times to apply different styles to different parts of the table:\n\ntt(x) |> \n style_tt(i = 1, j = 1:2, color = \"orange\") |>\n style_tt(i = 1, j = 3:4, color = \"green\")\n\n\n \n\n\n \n \n \n tinytable_gr34yyasmerc9crngqp7\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#colors", "href": "vignettes/tutorial.html#colors", "title": "tinytable", "section": "Colors", - "text": "Colors\nThe color and background arguments in the style_tt() function are used for specifying the text color and the background color for cells of a table created by the tt() function. This argument plays a crucial role in enhancing the visual appeal and readability of the table, whether it’s rendered in LaTeX or HTML format. The way we specify colors differs slightly between the two formats:\nFor HTML Output:\n\nHex Codes: You can specify colors using hexadecimal codes, which consist of a # followed by 6 characters (e.g., #CC79A7). This allows for a wide range of colors.\nKeywords: There’s also the option to use color keywords for convenience. The supported keywords are basic color names like black, red, blue, etc.\n\nFor LaTeX Output:\n\nHexadecimal Codes: Similar to HTML, you can use hexadecimal codes. However, in LaTeX, you need to include these codes as strings (e.g., \"#CC79A7\").\nKeywords: LaTeX supports a different set of color keywords, which include standard colors like black, red, blue, as well as additional ones like cyan, darkgray, lightgray, etc.\nColor Blending: An advanced feature in LaTeX is color blending, which can be achieved using the xcolor package. You can blend colors by specifying ratios (e.g., white!80!blue or green!20!red).\nLuminance Levels: The ninecolors package in LaTeX offers colors with predefined luminance levels, allowing for more nuanced color choices (e.g., “azure4”, “magenta8”).\n\nNote that the keywords used in LaTeX and HTML are slightly different.\n\ntt(x) |> style_tt(i = 1:4, j = 1, color = \"#FF5733\")\n\n\n \n\n\n \n \n \n tinytable_rrrz3mdr5m83im12jx1w\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nNote that when using Hex codes in a LaTeX table, we need extra declarations in the LaTeX preamble. See ?tt for details." + "text": "Colors\nThe color and background arguments in the style_tt() function are used for specifying the text color and the background color for cells of a table created by the tt() function. This argument plays a crucial role in enhancing the visual appeal and readability of the table, whether it’s rendered in LaTeX or HTML format. The way we specify colors differs slightly between the two formats:\nFor HTML Output:\n\nHex Codes: You can specify colors using hexadecimal codes, which consist of a # followed by 6 characters (e.g., #CC79A7). This allows for a wide range of colors.\nKeywords: There’s also the option to use color keywords for convenience. The supported keywords are basic color names like black, red, blue, etc.\n\nFor LaTeX Output:\n\nHexadecimal Codes: Similar to HTML, you can use hexadecimal codes. However, in LaTeX, you need to include these codes as strings (e.g., \"#CC79A7\").\nKeywords: LaTeX supports a different set of color keywords, which include standard colors like black, red, blue, as well as additional ones like cyan, darkgray, lightgray, etc.\nColor Blending: An advanced feature in LaTeX is color blending, which can be achieved using the xcolor package. You can blend colors by specifying ratios (e.g., white!80!blue or green!20!red).\nLuminance Levels: The ninecolors package in LaTeX offers colors with predefined luminance levels, allowing for more nuanced color choices (e.g., “azure4”, “magenta8”).\n\nNote that the keywords used in LaTeX and HTML are slightly different.\n\ntt(x) |> style_tt(i = 1:4, j = 1, color = \"#FF5733\")\n\n\n \n\n\n \n \n \n tinytable_je71p0c58311q1ei9nr1\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nNote that when using Hex codes in a LaTeX table, we need extra declarations in the LaTeX preamble. See ?tt for details." }, { "objectID": "vignettes/tutorial.html#fonts", "href": "vignettes/tutorial.html#fonts", "title": "tinytable", "section": "Fonts", - "text": "Fonts\nThe font size is specified in terms of pt units, where 1pt=1.333px:\n\ntt(x) |> style_tt(j = \"mpg|hp|qsec\", fontsize = 18)\n\n\n \n\n\n \n \n \n tinytable_43t25l80vm11x421l9bq\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Fonts\nThe font size is specified in terms of pt units, where 1pt=1.333px:\n\ntt(x) |> style_tt(j = \"mpg|hp|qsec\", fontsize = 18)\n\n\n \n\n\n \n \n \n tinytable_rgo3smu27qc4dpnezavi\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#spanning-cells", "href": "vignettes/tutorial.html#spanning-cells", "title": "tinytable", "section": "Spanning cells", - "text": "Spanning cells\nSometimes, it can be useful to make a cell stretch across multiple colums, for example when we want to insert a label. To achieve this, we can use the colspan argument. Here, we make the 2nd cell of the 2nd row stretch across three columns:\n\ntt(x)|> style_tt(\n i = 2, j = 2,\n colspan = 3,\n align = \"c\",\n color = \"white\",\n background = \"black\")\n\n\n \n\n\n \n \n \n tinytable_mw5kxotul7o38dj2nj3j\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\nHere is the original table for comparison:\n\ntt(x)\n\n\n \n\n\n \n \n \n tinytable_7ckd21d0yvsem2d08d3i\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Spanning cells\nSometimes, it can be useful to make a cell stretch across multiple colums, for example when we want to insert a label. To achieve this, we can use the colspan argument. Here, we make the 2nd cell of the 2nd row stretch across three columns:\n\ntt(x)|> style_tt(\n i = 2, j = 2,\n colspan = 3,\n align = \"c\",\n color = \"white\",\n background = \"black\")\n\n\n \n\n\n \n \n \n tinytable_7yubneoac7hpzpc8i433\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nHere is the original table for comparison:\n\ntt(x)\n\n\n \n\n\n \n \n \n tinytable_hiuubhwgp7amtd5g34u8\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#headers", "href": "vignettes/tutorial.html#headers", "title": "tinytable", "section": "Headers", - "text": "Headers\nThe header can be omitted from the table by deleting the column names in the x data frame:\n\nk <- x\ncolnames(k) <- NULL\ntt(k)\n\n\n \n\n\n \n \n \n tinytable_7ey2r8s7zp57s37wjfb7\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\n\nThe header is row 0, and can thus be styled as expected:\n\ntt(x) |> style_tt(i = 0, color = \"white\", background = \"black\")\n\n\n \n\n\n \n \n \n tinytable_yfmuia7l91x2h74rkm7i\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Headers\nThe header can be omitted from the table by deleting the column names in the x data frame:\n\nk <- x\ncolnames(k) <- NULL\ntt(k)\n\n\n \n\n\n \n \n \n tinytable_1yo697aoj6qjgm4ib31w\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\nThe header is row 0, and can thus be styled as expected:\n\ntt(x) |> style_tt(i = 0, color = \"white\", background = \"black\")\n\n\n \n\n\n \n \n \n tinytable_ur03mv3exlcun8w5s5b2\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#rows", "href": "vignettes/tutorial.html#rows", "title": "tinytable", "section": "Rows", - "text": "Rows\nThe i argument accepts a named list of integers. The numbers identify the positions where row group labels are to be inserted. The names includes the text that should be inserted:\n\ndat <- mtcars[1:9, 1:8]\n\ntt(dat) |> \n group_tt(i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_hqh2pc9gox79qa3m76ap\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n \n\n \n\n\n\n\nThe group_tt() function only includes a few arguments: x, i, j, and indent. But whenever we call group_tt(), the function will automatically apply a style_tt() call to all the new group labels, using any extra argument supplied to group_tt() (arguments are pushed via ...). This means that we can apply all the usual stying options to row labels:\n\ntt(dat) |> \n group_tt(\n align = \"c\",\n color = \"white\",\n background = \"gray\",\n bold = TRUE,\n i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_88d9vkdrodmkkt8m918v\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1" + "text": "Rows\nThe i argument accepts a named list of integers. The numbers identify the positions where row group labels are to be inserted. The names includes the text that should be inserted:\n\ndat <- mtcars[1:9, 1:8]\n\ntt(dat) |> \n group_tt(i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_gu8g14o6rjjix6jpctor\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nThe group_tt() function only includes a few arguments: x, i, j, and indent. But whenever we call group_tt(), the function will automatically apply a style_tt() call to all the new group labels, using any extra argument supplied to group_tt() (arguments are pushed via ...). This means that we can apply all the usual stying options to row labels:\n\ntt(dat) |> \n group_tt(\n align = \"c\",\n color = \"white\",\n background = \"gray\",\n bold = TRUE,\n i = list(\n \"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_vo7jzu4qcrg3comkzjsi\n \n \n \n \n \n\n \n \n \n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1" }, { "objectID": "vignettes/tutorial.html#columns", "href": "vignettes/tutorial.html#columns", "title": "tinytable", "section": "Columns", - "text": "Columns\nThe syntax for column groups is very similar, but we use the j argument instead. The named list specifies the labels to appear in column-spanning labels, and the values must be a vector of consecutive and non-overlapping integers that indicate which columns are associated to which labels:\n\ntt(dat) |> \n group_tt(\n j = list(\n \"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_nghxhwg2gutqthoxlau8\n \n \n \n \n \n\n \n \n \n \nHamburgers\nHalloumi\n \nTofu\n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n \n\n \n\n\n\n\nAs above, we can pass additional styling options to the style_tt() function automatically via .... This means that all the arguments like italic, bold, color and friends can be used to style spanning column headers:\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |> \n group_tt(color = \"teal\", italic = TRUE,\n j = list(\"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7)) |>\n group_tt(align = \"c\", color = \"white\", background = \"teal\", bold = TRUE,\n i = list(\"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_izv9qz9z5muup412f4eu\n \n \n \n \n \n\n \n \n \n \nHamburgers\nHalloumi\n \nTofu\n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1" + "text": "Columns\nThe syntax for column groups is very similar, but we use the j argument instead. The named list specifies the labels to appear in column-spanning labels, and the values must be a vector of consecutive and non-overlapping integers that indicate which columns are associated to which labels:\n\ntt(dat) |> \n group_tt(\n j = list(\n \"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_4wievneog9qqkbn3wn4m\n \n \n \n \n \n\n \n \n \n \nHamburgers\nHalloumi\n \nTofu\n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1\n \n \n \n \n\n \n\n \n\n \n\n\n\n\nAs above, we can pass additional styling options to the style_tt() function automatically via .... This means that all the arguments like italic, bold, color and friends can be used to style spanning column headers:\n\ndat <- mtcars[1:9, 1:8]\ntt(dat) |> \n group_tt(color = \"teal\", italic = TRUE,\n j = list(\"Hamburgers\" = 1:3,\n \"Halloumi\" = 4:5,\n \"Tofu\" = 7)) |>\n group_tt(align = \"c\", color = \"white\", background = \"teal\", bold = TRUE,\n i = list(\"I like (fake) hamburgers\" = 3,\n \"She prefers halloumi\" = 4,\n \"They love tofu\" = 7))\n\n\n \n\n\n \n \n \n tinytable_q6h620h8lsl4mqmkgt66\n \n \n \n \n \n\n \n \n \n \nHamburgers\nHalloumi\n \nTofu\n \n \n \n mpg\n cyl\n disp\n hp\n drat\n wt\n qsec\n vs\n \n \n \n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.62\n 16.46\n 0\n \n \n 21\n 6\n 160\n 110\n 3.9\n 2.875\n 17.02\n 0\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n 2.32\n 18.61\n 1\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n 3.215\n 19.44\n 1\n \n \n 18.7\n 8\n 360\n 175\n 3.15\n 3.44\n 17.02\n 0\n \n \n 18.1\n 6\n 225\n 105\n 2.76\n 3.46\n 20.22\n 1\n \n \n 14.3\n 8\n 360\n 245\n 3.21\n 3.57\n 15.84\n 0\n \n \n 24.4\n 4\n 146.7\n 62\n 3.69\n 3.19\n 20\n 1\n \n \n 22.8\n 4\n 140.8\n 95\n 3.92\n 3.15\n 22.9\n 1" }, { "objectID": "vignettes/tutorial.html#conditional-styling", "href": "vignettes/tutorial.html#conditional-styling", "title": "tinytable", "section": "Conditional styling", - "text": "Conditional styling\nWe can use the standard which function from Base R to create indices and apply conditional stying on rows. And we can use a regular expression in j to apply conditional styling on columns:\n\ndat <- mtcars[1:10, 1:5]\n\ntt(dat) |> \n style_tt(\n i = which(dat$gear > dat$carb),\n j = \"mpg|hp\",\n background = \"lightgreen\")" + "text": "Conditional styling\nWe can use the standard which function from Base R to create indices and apply conditional stying on rows. And we can use a regular expression in j to apply conditional styling on columns:\n\nk <- mtcars[1:10, 1:5]\n\ntt(k) |> \n style_tt(\n i = which(k$gear > k$carb),\n j = \"mpg|hp\",\n background = \"lightgreen\")" }, { "objectID": "vignettes/tutorial.html#themes-1", "href": "vignettes/tutorial.html#themes-1", "title": "tinytable", "section": "Themes", - "text": "Themes\nThe Bootstrap framework provides a number of built-in themes to style tables. To use them, we call bootstrapOptions() with the class argument, and we specify the Bootstrap class. A list of available Bootstrap classes can be found here: https://getbootstrap.com/docs/5.3/content/tables/\nFor example, to produce a “dark” table, we use the table-dark class:\n\ntt(x, theme = \"table table-dark\")\n\n\n \n\n\n \n \n \n tinytable_zoq7zljd19jnjqqen8kk\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n \n\n \n\n\n\n\n\nWe can also combine several Bootstrap classes. Here, we get a “striped” table with the “warning” color and hover feature:\n\ntt(x, theme = \"table table-striped table-warning table-hover\")\n\n\n \n\n\n \n \n \n tinytable_wcashfnqm8yz24q1wwwj\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "Themes\nThe Bootstrap framework provides a number of built-in themes to style tables. To use them, we call bootstrapOptions() with the class argument, and we specify the Bootstrap class. A list of available Bootstrap classes can be found here: https://getbootstrap.com/docs/5.3/content/tables/\nFor example, to produce a “dark” table, we use the table-dark class:\n\ntt(x, theme = \"table table-dark\")\n\n\n \n\n\n \n \n \n tinytable_v0zfzpgll1dl2xgf9727\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08\n \n \n \n \n\n \n\n \n\n \n\n\n\n\n\nWe can also combine several Bootstrap classes. Here, we get a “striped” table with the “warning” color and hover feature:\n\ntt(x, theme = \"table table-striped table-warning table-hover\")\n\n\n \n\n\n \n \n \n tinytable_g4awpqafe6p9yw5ujmq0\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#css-declarations", "href": "vignettes/tutorial.html#css-declarations", "title": "tinytable", "section": "CSS declarations", - "text": "CSS declarations\nThe style_tt() function allows us to declare CSS properties and values for individual cells, columns, or rows of a table. For example, if we want to make the first column bold, we could do:\n\ntt(x) |>\n style_tt(j = 1, bootstrap_css = \"font-weight: bold; color: red;\")\n\n\n \n\n\n \n \n \n tinytable_ebabf2djhfqi04wqwmma\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "CSS declarations\nThe style_tt() function allows us to declare CSS properties and values for individual cells, columns, or rows of a table. For example, if we want to make the first column bold, we could do:\n\ntt(x) |>\n style_tt(j = 1, bootstrap_css = \"font-weight: bold; color: red;\")\n\n\n \n\n\n \n \n \n tinytable_usef16rcnotgxok5ho0z\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#css-rules", "href": "vignettes/tutorial.html#css-rules", "title": "tinytable", "section": "CSS rules", - "text": "CSS rules\nFor more extensive customization, we can use complete CSS rules. In this example, we define several rules that apply to a new class called mytable. Then, we use the theme argument of the tt() function to ensure that our tiny table is of class mytable. Finally, we call style_bootstrap() to apply the rules with the bootstrap_css_rule argument.\n\ncss_rule <- \"\n.mytable {\n background: linear-gradient(45deg, #EA8D8D, #A890FE);\n width: 600px;\n border-collapse: collapse;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0,0,0,0.1);\n}\n\n.mytable th,\n.mytable td {\n padding: 5px;\n background-color: rgba(255,255,255,0.2);\n color: #fff;\n}\n\n.mytable tbody tr:hover {\n background-color: rgba(255,255,255,0.3);\n}\n\n.mytable tbody td:hover:before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: -9999px;\n bottom: -9999px;\n background-color: rgba(255,255,255,0.2);\n z-index: -1;\n}\n\"\n\ntt(x, align = \"ccccc\", theme = \"table mytable\") |> \n style_tt(bootstrap_css_rule = css_rule)\n\n\n \n\n\n \n \n \n tinytable_6c3arv0b5sg9bli5nqb6\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" + "text": "CSS rules\nFor more extensive customization, we can use complete CSS rules. In this example, we define several rules that apply to a new class called mytable. Then, we use the theme argument of the tt() function to ensure that our tiny table is of class mytable. Finally, we call style_bootstrap() to apply the rules with the bootstrap_css_rule argument.\n\ncss_rule <- \"\n.mytable {\n background: linear-gradient(45deg, #EA8D8D, #A890FE);\n width: 600px;\n border-collapse: collapse;\n overflow: hidden;\n box-shadow: 0 0 20px rgba(0,0,0,0.1);\n}\n\n.mytable th,\n.mytable td {\n padding: 5px;\n background-color: rgba(255,255,255,0.2);\n color: #fff;\n}\n\n.mytable tbody tr:hover {\n background-color: rgba(255,255,255,0.3);\n}\n\n.mytable tbody td:hover:before {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n top: -9999px;\n bottom: -9999px;\n background-color: rgba(255,255,255,0.2);\n z-index: -1;\n}\n\"\n\ntt(x, align = \"ccccc\", theme = \"table mytable\") |> \n style_tt(bootstrap_css_rule = css_rule)\n\n\n \n\n\n \n \n \n tinytable_bnqkk9j944mih03przih\n \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\n 6\n 160\n 110\n 3.9\n \n \n 21\n 6\n 160\n 110\n 3.9\n \n \n 22.8\n 4\n 108\n 93\n 3.85\n \n \n 21.4\n 6\n 258\n 110\n 3.08" }, { "objectID": "vignettes/tutorial.html#preamble", diff --git a/vignettes/tutorial.html b/vignettes/tutorial.html index bd01fc88..4daa4458 100644 --- a/vignettes/tutorial.html +++ b/vignettes/tutorial.html @@ -324,7 +324,7 @@

Tiny Tables

- tinytable_hjy71bi8q2y04n113z7r + tinytable_o3lgrdeab76nonuqxvww - - + + + @@ -434,7 +435,7 @@

Themes

- tinytable_bv2qa5xwgm0tzm3zfaza + tinytable_ivla07lzwebqy0cywx9w - - + + + @@ -531,7 +533,7 @@

Themes

- tinytable_s1uhltgnyddnaut9ijz8 + tinytable_kcu0ob2aolvwf13qf08i - - + + + @@ -632,7 +635,7 @@

Alignment

- tinytable_ua7hn16jmo53qyqmtqyq + tinytable_342nbtnikra6p6iccd43 - - + + + @@ -762,7 +766,7 @@

Width

- tinytable_u1tifltqslnz87l215mb + tinytable_bjlf9b09lypgy1lv12ve - - + + + @@ -859,7 +864,7 @@

Width

- tinytable_gm3eck5robd6klldagv8 + tinytable_ejd1t8n0cd50g43lpwh6 - - + + + @@ -964,7 +970,7 @@

Line breaks - tinytable_g0ydkd1o6w8h9zy3xt6s + tinytable_1dfnitwb4y0e87zs0ukf - - + + + @@ -1039,7 +1046,7 @@

Line breaks - tinytable_dmk6eynd8238u8yzvzpq + tinytable_rvq653jgikqeebs75co4 - - + + + @@ -1125,7 +1133,7 @@

Captions and - tinytable_38v1ao2u92zkdvumh2xo + tinytable_ss6l4mlgbdnuzz73nszx - - + + + @@ -1229,7 +1238,7 @@

Footnotes

- tinytable_oopg8sdr7swpnk5r01g8 + tinytable_sqztcznq4x2ddgk4994v - - + + + @@ -1300,7 +1310,7 @@

Footnotes

- tinytable_luluzvkdjxn9jj3jij34 + tinytable_oym9gvqn2off6wq28chx - - + + + @@ -1403,7 +1414,7 @@

Math

- tinytable_2iuilgee6zndlxosvq9n + tinytable_k7r0ctzfvo0v1yp8r08w - - + + + @@ -1513,7 +1525,7 @@

Cells, rows, columns - tinytable_hi3n7don90he9qhv7hmi + tinytable_3v6q9qozcydzabvef3sb - - + + + @@ -1617,7 +1630,7 @@

Cells, rows, columns - tinytable_0naif1s01cn91uk06acv + tinytable_sm526xrlh4x42yle75zs - - + + + @@ -1721,7 +1735,7 @@

Cells, rows, columns - tinytable_s9qedgjbgw61c8ihdbc4 + tinytable_yk9q0fzetjxo6megtdy3 - - + + + @@ -1839,7 +1854,7 @@

Cells, rows, columns - tinytable_d00cz4im5qxt9x3vjiur + tinytable_c1h6sqd4p81aw8kz40ga - - + + + @@ -1947,7 +1963,7 @@

Cells, rows, columns - tinytable_fppevn8dzzlxx0yzk03f + tinytable_kiy7792iqfz416lnzy3i - - + + + @@ -2053,7 +2070,7 @@

Cells, rows, columns - tinytable_9equ6ca3xqmbbbhh98qo + tinytable_pl8erj8wp7k2yjskokzu - - + + + @@ -2161,7 +2179,7 @@

Cells, rows, columns - tinytable_mz8hg2v4ukgnr2y4l86d + tinytable_gr34yyasmerc9crngqp7 - - + + + @@ -2280,7 +2299,7 @@

Colors

- tinytable_rrrz3mdr5m83im12jx1w + tinytable_je71p0c58311q1ei9nr1 - - + + + @@ -2386,7 +2406,7 @@

Fonts

- tinytable_43t25l80vm11x421l9bq + tinytable_rgo3smu27qc4dpnezavi - - + + + @@ -2500,7 +2521,7 @@

Spanning cells

- tinytable_mw5kxotul7o38dj2nj3j + tinytable_7yubneoac7hpzpc8i433 - - + + + @@ -2599,7 +2621,7 @@

Spanning cells

- tinytable_7ckd21d0yvsem2d08d3i + tinytable_hiuubhwgp7amtd5g34u8 - - + + + @@ -2702,7 +2725,7 @@

Headers

- tinytable_7ey2r8s7zp57s37wjfb7 + tinytable_1yo697aoj6qjgm4ib31w - - + + + @@ -2793,7 +2817,7 @@

Headers

- tinytable_yfmuia7l91x2h74rkm7i + tinytable_ur03mv3exlcun8w5s5b2 - - + + + @@ -2909,7 +2934,7 @@

Rows

- tinytable_hqh2pc9gox79qa3m76ap + tinytable_gu8g14o6rjjix6jpctor - - + + + @@ -3093,7 +3119,7 @@

Rows

- tinytable_88d9vkdrodmkkt8m918v + tinytable_vo7jzu4qcrg3comkzjsi - - + + + @@ -3301,7 +3328,7 @@

Columns

- tinytable_nghxhwg2gutqthoxlau8 + tinytable_4wievneog9qqkbn3wn4m - - + + + @@ -3477,7 +3505,7 @@

Columns

- tinytable_izv9qz9z5muup412f4eu + tinytable_q6h620h8lsl4mqmkgt66 - - + + + @@ -3676,11 +3705,11 @@

Columns

Conditional styling

We can use the standard which function from Base R to create indices and apply conditional stying on rows. And we can use a regular expression in j to apply conditional styling on columns:

-
dat <- mtcars[1:10, 1:5]
+
k <- mtcars[1:10, 1:5]
 
-tt(dat) |> 
+tt(k) |> 
   style_tt(
-    i = which(dat$gear > dat$carb),
+    i = which(k$gear > k$carb),
     j = "mpg|hp",
     background = "lightgreen")
@@ -3702,7 +3731,7 @@

Themes

- tinytable_zoq7zljd19jnjqqen8kk + tinytable_v0zfzpgll1dl2xgf9727 - - + + +
@@ -3800,7 +3830,7 @@

Themes

- tinytable_wcashfnqm8yz24q1wwwj + tinytable_g4awpqafe6p9yw5ujmq0 - - + + + @@ -3902,7 +3933,7 @@

CSS declarations

- tinytable_ebabf2djhfqi04wqwmma + tinytable_usef16rcnotgxok5ho0z - - + + + @@ -4045,7 +4077,7 @@

CSS rules

- tinytable_6c3arv0b5sg9bli5nqb6 + tinytable_bnqkk9j944mih03przih - + // tinytable css before this + - diff --git a/vignettes/tutorial.pdf b/vignettes/tutorial.pdf index 5ae382667ade6fbcb863654e16cd972faf8053a3..1b907feae2d7f812eda4a32a202eb75d38b3c2c0 100644 GIT binary patch delta 11120 zcmajEV{|1-6E2)&V%x^Vww;M>+qQRX+qNdQZD*2+_QX4OGVyorIe)%)-5+guYl`*P@@3h2hvYycOlkPy6^yQ_tX1HAXHKcixI@)%&nycQ(Rhb&ALA_kQ`Ad360ulIn0P6xK+=PlUp{yA=Ox7n4ew z>~EfOWhlI{R52NmStq@#KBZ0z;_)HO44yKNDKAfb9cwy<4JdflT>v*nH^h=#6C$HtybVUAB2MYnlp?J!?ck>r)EKmhtEOBf@a>p?yKl*4FyxT z+Jp$7FP7f(g)LhsUzxvT>&t!F@ktLQS`MN_eh69&Z$6P<-l zMP(ut;O;5iO*YV~;jQ<+db&*)xR@<_vi+u8_j$wj-G|p=J@zNU;e<%nQ=3TtOn&uD z`wQbt9{{9N)p6$+td3(6e$x8ey8E^JJ+V7uu)sMwmqyE_zZQ6Yj&e$k%dB2UQjXSs zR7Jw9RH^U*@3EppiPKh@_0nI3i6-;qfL1aXe&oX%WIgkE`+QUwRhjMylGsE|ld(+n z1_c<_wbNC0iVHrGx3R->Z~3i?GpoXEzkmc40OPw>+oN{jI_8nS7m~I(>f>sI$d8L} zy%8X;$HmxHv}gLM`PKP-A0);q)?T0I_^We&HG+o8iK}^Gzi$i^2XGT#{~q8@ASyx8g3Q|YPe<})V!>!`oPryFvs}- zG&jIM0@^>q*}r&^|BnXd>fim%zj)^}nik9;A+Y%TnVQijuo{nwa*3P`$47D%-$f4U z?c}%o4toC=1-iJ8V~XyNuClU=?vMY)6CO(@%3IHoHO3gmEhI@?-VMmAo>hU(=~#ZG zKRICm02%^H9 zP!%$b4M=ovGjw+xxyor~bOw4#%eD?0P4W)n0LkrOOIU?0;3|z-MWmD(SHHrjji7f1 zzJ?R~ZNa6L!+BF0t)|@*qkCR?Eb1V^-S_kOs1hB*x&`=!Y4^s_G^)4#7`9wU3;JPX zFja8Mm5fT$U#0P?o(Jrwx2Sj;$E{~Zpi;(Gb0{$3z52V08%^C=ik-2ZD_lTLf>H=O zp!moPJ}&Z8`6n@cc=xQ+%nKK9+@G~KFuh&wwDO-j%(h1S2)apqobR#sf3?hh zO<}=URhqi|Bs|L5SWV}yX}dh=cF9QTHfO)-q#oATzs2L{op4SWQp=r*)|9Yi`f6K# z?Ai^e7mOTk{bZ@+Ebgbd8%y?mv3Pmp2E6kc5kYHJV7tXfwtCA?hoA68evBN($_CVb zoxOjOR5G%66yOHFJa^0(k&qxNer*AM&G!Oj_!H9zbr4QXpChLs%w|wl)kL8iab0D) zqGV9kPk%{kegzCkb}N)lWbUCi$V`IxoF6td)NxTa@vUC*E~i>PyvT0GOaT z!qZ^L?AP>nM{tTmJGA_1f1EDdjn^~o%=MnXG9rjoFYdc_r&NlW`mrgVeN>c%@k{S! zprpKeNaCQaeVFu%&v1DSSd?-m_ZtE2)t&crfwvwrFv%r58NV-I4$f3vkQO8WX#w$L zw31$O-w6CH3^IirbOcZ(g-{ZF0fs&Dza{*ucJXTPA~JBq2^WJe*Kj0dCp%*9f;szG zLkFEE9rvYf=$7`pP)$$UwqLlQZChBpXCq9gdmJ;oN&dRikA$lW2t_@7`U;8Q&?ZKz z7AOK6r#6FK!IRo3Xgaj=JMo_0pXP@g>LO;#)MPRUk1&&V0MN#~jykia zxfZk0x7GYhrv&AEGGwV$_mwAL4Gh5;d5-43-)v@jxElo>b$w_F@t$+P`6^wHJi$Lj zH+~bDTlPKkBfCJH1KSXilm*_nE+VPEcYQHce4mgL6ew_lIS>WK&uMy1rFYOfl6x(w z?kn0sRjk=Db#OA~BTVzL1FH5H&P}o@o>k9T3>?PSLLZRqiOhbZDahJiOiTc`@+Lkt zoDAO}6yY;L0{rlL}M>*>p8L9Euz@=h8(ITWI?h6P$Huyvu-P$HAN06W=1`Q69!@_EOb`i-T!p zPgT^{E|IHwbv!aEX`LtE+4D{_+Tjrnm{cd1%^bYXfyu+ky$Mowa2s3x>s=f*x=~u6hV2B0VKhXAdenM{H zt|sumvjS?CT&_Y{o|M2-ugzuAKUEPn(kzJcD$c<%y0El~=+z=f;Sp#d|Mt}P36uTo zIf+}&(R}~)EArkH(Td@yORJfbN;Ed?0lhV^^?P3m{BpztT3T}vmIezRMo0!_jK0d8 zhOBO+Wo3i^R^Vo$No;Q0!9pZ8oY^A=2vf*#&ibHb_!-8TF=jBc7zrFB)q0->!1+JK zr774Qh#*E>-_yHaG-Cqd1XsjZC>2}696RK87F*2db;Q}Z%ubR3Mt+7%Blzgvgz*pB z&FJZGm%APql7Il9y1-JkTm4DXz-z?mZprre6-R&0p;B&B0hU{CVq)OVR&#kD5|#I(f|Q@#w*!lY58b z8^xFQRo`nyz{$M37fr2mWjFE&wb6zGW^D=VDS8!Wz|4U%_l2F8Wn0WiZPA)zKm1t3 z$Mv)R!N%?Cd+i5$f&K9f&wL8GGTvm6Dw3?IorEpwJOHoQp{Ny7kc{oyB`Vx9Ee%X@ zNFW$q9y@8QbTN#?bk~ohLriuAbapbAWcYoEX;W<{Q8;oE(S2G-_7?CVhLIIZ7Iv|H za^5jXSOYdC(kvVG$-R_I5ocC0=cO#!gn~I32#er4RDD(T$=g=mV=Lt$_+qhy7d-Vw zvB~PCAwwVausxc%P!{!YDRfHA9IR&8Vhml^5)9p%QVi^s*8LD)P5rP#8&+0&C3;Al zSY+MK4NmFZB%Zq9-s>4L2EF&b(YduZpZejN$Z!MCTDSKPCzgj1S33WGFqh@8)Z2E9 zRNq5d0LTBjdB<^61U3BHC#FwcL-NmnK@uu@7HKh;1AYpO^F_EWe7nUTawj9dfl`SY zs-*s%{Cv0ZgY4tC%l_)0manTFM?*$)O^!9YMw@y@zW2vU9_-PkYHLRtn4dFlO9~Y) zW=kJ*^Skm!1$ULg!u?z^ar^|eoP0D|?v=k)9IWAiJ+dvR^v?e43c!T>kUmML4ThS(&n z_VfXF$#>_?vUyv$B> zP?}N#A>|Kp0ZNo40h%5Gk!pb=s`N-GN)&Q+y&8@UL~3qS;yPFqS}gfnW63+x6c~$4 z7&IrUG4U7*`eBujW&k3}De`bA)*e~0INRZgZZPbZ`{b-|XsE-56_% zWrnJrw)sn;*!hZK^KrzjAa`;PSf`Z|hGOcvwB(@@hEi&VH4k$4@7);r(amZ~Kdf|4 zDMM2glif?kWGbZ}%PbWiF^l<1Ly*@L!)$*r^FBge57j?H`D+D2IjZ+>#kGj_f!d9% zTJLV!#GH=IaK;amacN?Xlft=zOOz|EGe!P2Tr8HQfFp8Tlv8nI0bFnQH4xX!1Tj*S zZ@#ztwlKBZu7{QG{S#cqTZR0;JOX?2f8`MsyL}N%Dc}dz{e}hYclPXTYzgbOkc;k~ z)r`@F)3lkrz*uq z?yVyK@Ykw>2YUR#TJZ(-%2>q(AU)E&0$@}Cu;&5-9Jyo-wvK*Zx@{H$XZD^REz)7s zDv7uU{2!*YZ+*KycnX$HcCPr?a~0yU4Kp|=R&GojiO;SW1A0E6{i;?LTm9VbyEhWP z>=y#Q3R2%rhyVsc_cFHU%^cuw5@`={79DUy@5`L=u(5G8T!>-7krk+hERkVM|GeCuu9=)KN-Hf;8(w z^WG)y?ok6p!wP#sZ`>%|{_4D*-q3?8N0_5-+%_?UD*Oc+SFj|4DtlBhQF__zCO zD6rdY(`a796)bvZT5tiIY{%Jv>mKA>h*y03*9l7R)i= z2d2+9?il5K!#6ap`qD;Ev-ZYy4nv2canu9xfseb1_Qs$H;FRFr;cn+f8UZb0%)sNI z9ZMBf^AZbk>TyuQA{-uC4F1rZ{O5vSMM>udTbr3+(cc3vuPRTa!dciZBK$?ynOU3L zZ#(XmzAhVD=F#}pp;iDDKoDp)x4AzK`ZeAjCd~p(tf?(}354M5Z5Kfyz;`LPr5Ap& zI8t2Ir>Z2IUkqb|nsB#m^g~SAks>a}Wl`P})ncQ8&?4Qy2eSFas~^6>Y(`1`?QB@n zOdja=!~Bw#mWXPM4fR&NJh-Y9Q%&xOPG)8w&oBH>Pc!m#tOm^xZ?Ls1zY%(&gQ93d zc7u|1HT&k}(Z!lP0F#S&Wv^tjQQ91GtX77EJL?l$hnE8 z?nMj8fZxJNSKpy%q!=Okf=w4UmBB1n${9ovl%aF{d1+wkMWt`|5DZqiNX=hCd=eEf zMskO^F)k6X(;G11H^t|${VZVh%DHKv*+SJtow(enCAp}TaXA_yx4o6Q1TEo&SvS*B zgY!M`IsNPLrVQ;kD`}xBsZUyQBed|4-47qVj)&HT<8P?sI`VR>f%} z8un{m#kxa958AKAck4gifl6*-B-qM-Q~VbCxOoHHb)3{!*uQ4nHADsZxof!oA-;m# zvqY}6m(<)t?J?nEz*g?^<#)p>iG|!O@bmC`;(Gnk5!hA^|JQvDU~qnVn*wGk6AC&Hu@;<~uK%+Sc87nD~)0j?W-T!eVYv0lWzDsG6VkQ`csXHw#A zDdVbaPb+c-6;9p>w!oqcQsI^|}zmwh&J zfEhVlQ}BKu9}VlFPE(f;H2Vj#k)K1>&t$X={X_n5OorY9u&`6`9y`nEF!S!@{nLX^ zVa6kiLC!h?#%l(!#fh>mFQ#yIz5)?z$%MSta$d~n?x3CH8~0+Cb>{nQ9-GhM<(+Gf zLp?;h(>Uf}R9uc<7a)SrZ55npk;PPY7nZ!J!!+o!6O;*kFr}T7NPRCd1Ndy>MC|$J z67-;Q92)qW^J7c1r_b`=6jz zRRyrbdS)LY{84M^S|v(7eUU;m=63y6W$elD<-K>(p|pydSf56!O9$ ztbnQ9x%8bC0*IJ?Q5soAHX5CG+ny|yHYhleE#QeX|MLXdM9hh9B6onlkwuryg5~P{ zmMY87^DB}%AhVD}+p<`=3`^(XV@m48OFBA5hdP{~f{&2;d^6H8U=HMk@_cG*TzL?T zy}&~0{_||1B`-1a;GG7duPZ|AzdEi%sL28ZT)S?X^c*cDe%^*SraUpI0OqYLmZQqv_C3lME&hpW6sU;16 z#_~c{2w{BAIDl^Dr5^5tgq4i|UtUC#(8%FSts6gpmZ&dM$)GI7|IrG9#z9F#sx!eV zSX9Cja9KT5rl7ZpA4970+y6F)RY|SLjcTX~kd<{mXi$a!Rt&8UPKE4eEnUB;;)W4d z&fy*rG;OUhlr?RN>t9m$O%7C&S5jboyC@3p{`gDFIr)yIb;w%kZjd%dPFuSOk`WHY z2Ar1x1eJQAW26?wBurS2L~QJ@Kzx9zt0!kB%_GBEbS$s~ z$ddIFgRir~-7GI6P;y5a4O1kPVu5Iuk>Ng61({8LBjjRb1B=j-It7EI3HJ;sAlpu2 zjaLCNfGZ(*xzscrB3IKLU_zFDUznV%x?R*k{RPH?3(1v&>qr$WSt_+BBgPWTwe3BK zCMM_Zm9q%u$A@&k2xc|;tf@7x8y9j4$d8PtnuUuT1g8OWt#&_x(vKG#3S=n>mZL;P z@XDS}LBp~MCvc2rEH)Z`1jDn!Z_HSX)2W8DHCKYb%8s(P21Qt=gq`qeWu*>Mon*`= z;0+P+E~0*eo+3j-jMj-4Ms6Zyc|^w_?{Gg5Sy6FP;$Sof4=ffYB*hX@R8zGDgcMMX z=qVSS(gl!)N{zuKIHPEhvxw4L=2VY|A!+szecYb>2)aU*9hr?JZRzal&Uv>&oWHbm z*ddco%Yjo7AAz$Dy=1vH?g6#i&7nwg_0t!cJfTL>w~wSpX4Ol+E^mz>`S`{5s6?_@ z+Xp^ayX*h_MIV-KJUWqBefHrG2+$Dju3}~iBGboK8Ku*=_e-RijT@4@^k!k#7kErf z{PCmc-tocyC6Jddu(A84wPs=c{%Ajmm1v+tg@nw?!xiycu_S?sl(~25H=fEs3CPz z|70Eiq%KDGOkOtwpb1WU+4{ZzRGNsPBP z5LYZHOCuCrREeFtK=A(8t0<;T@Sk%GvF&Lh&)>uJpD65WR23sJwLA#qX9!U^c>Aee5c{dnNc$c*w>E1{UGw4LA|0fLztr0Q z0T`w65vY<{hf6MCWQZdv*@dam)QB2ey%9(G@*9jpIl#psrJpv; zaXPSH$aEwU8K$)A@%Fti7$hJCTMdt9Ewa1le~_{9)Q{2WIYU^ZYlrT)KwjAts=yno z@M`O#jRBD|p6X7@LF0TjhYUu*nf7IeMdyrry7DF=z1rnN0Q`#^gdz@2?&>3Xj}nH% z!3tz6(#CtzY{`#fYle9@DER7gM+iz(f7zh>k)joc#kO$#O_Upsl_Bw-Ni|CGWVQ4d zxM3xzvU#v<25fLVMo%2lmY_BB2;Q31tK=xD0hb^jtY|I$F|mo^(c$soF>+*725bRr za_r=oD0PW40694pT6L7Pqy!zCYI1T+oVs}#IRzG8^`x|9gp0|*XS*SzQ^Uf!MtMp0 zF5pddgf8>(*NVcRQQd7Xe(j(m8=o#i#>TnauC`sBIf;Qmi5F4N&@-Z3$50ion#~ebP#WmG~?i zTn-ZSvL$MCNxg+3e(X>L;MApBkM=?V&F_2_Rvi~`Oj=Xwt@er?#H7D3t86D#m`8TQtu64 zLZ$V`(1WjH8CH2CaCSSu;0ECKnZ@?*Sgwx;{w*zwz$CG$0Mf5dcm8ZCQsd*;GJw-) z(En#;;kgD+uEK|yGl-M<9Vl}d;9gjzPyX2HC#g!v{Iqw?pSeF+w}F)_0GA6ETf z#2m!&3GlsCPBK|*_9oo8E$71!;)NPe@>y6-6-3<(a>%g_ESo(YFp-b9qCfXTF| zE_4X|VEZ!#$VNq|08BNVe3Y0Wy9ca|mCPp^MzbYMb$BjKF6))7@Q6~$5OPgkq~a+K z_f_x%sDRlC3nW&y)fTqJ_)XBRE>2vSAb56Cjab`CaMhlfTxn?3cX{sDFyt7FgOa5Y zI5;glzF;u}#{8hh^wJRw8(bA~K&s06XplK9CQ(4wvpFC6nHsaG6^}$Cr9O2sdHB4c zq}+G%AyRXhS1}Z^Ek12@&%qp`ISPK=V>y`dlvp zcHT}9B_;HmBs^q|AQKeyoq-y6Gn2$H^CWf# zX2D9@;`rPNW$0uEkXif6Zow6|ix%?g(#JPY01$OWLl#?7_4Svkg#Tf+2h#8>-6dw_ z)6K_VJg3YLfP01s*;?Y4egr_WGfWx<)}CYnCWL-`=@-mdoe$7%L#Zm!Z1EPgn87?; z?UE;#j9IbyCV2P<2DWzg*3i56hziCG~x+?y|~ImceiZ=d#d|FD9_lhWd+;!&3OK!^8Q$KW`|#l#T(%hCMu5#-4_v zJOq$gnBf>?VAi)HF7{w{G}6M&ER-jj;k7b$Mx4CQFTLbXUB+YCF1=?+RpxBNR;66Y zs9rZ+9HI^ILQNpsbk0(&0k3QPXOV0AGG>uUwqUEaZhWH+Xnh`w?uo}}5mwwS6cYT% zXL<8{@#zkt8T@D7@$gFAhz|UFti2>0f^`t9tRfT{gQ#rczRQ|7*!rQ&DwzfXPs6;- zq>yY&HhmJ2jsEPnj@J9drGN41%#?|o0J%QPEnYc$;;)}~DY;?OlyH+Oy%-wb6;^=h`rA2F;MVyF|;#l~Qe+F9W(`qw|%f1`8O2%w{qy1QYo>#wc zC<6Tb2)?^WTqjX9{JL}PE?@@jEIjV7xqmzdKvd-J;=fS@snkK@n%(6=`JsruFdny> zKCGa|U;ZXeinf9>M`QEaV2xDdpW=L@>>AO3ibxuOA{*=fCN?nee*fHJpB|^#hjQVL zVfZEv_mkFUk%Ko`Seb1N# zDZ=6R&1IsljzMw~L3+MjlqWlmAvIOZNXy7YQkY+Vk#u?|2mQRkpTV!@IS+5 z&NUrpMK9cm+mmQt8|e^Oh44-MGD=Lzm5t1*q;LszQzgobQFL?(vFHG}`WVNj^7Ktx zpsn4GM+NtIzKz2OO9cJF_xYF4!slc5ftUQRUblIl1%bpU>41PJ>o{|h@196#aOpoM z*~Z4exR5z#kr_Sd03uzKbQs6 z4~f-CvAeV-oXgZskkeSUyEwDrh^Fg$t~*s^kJ=9Hg~+TvgaNP@ST@Q|nc1ORM^vTl zG*(d0v7~FL{CX(CYiKTB&RMXLs#-PIS;_sbW3fPJ_qyn>a8>L2r|Z#ZF;S)3&q_f! zr%5{+iw*}Mc4-U9aiQZzsCRKDtzl)q1hY7YG|D^4s!ag?aw7pdF>wrZ+k-(Y4ad@s1s$)-+Fag5_JunpJ7M6Gf*oX}HVa)Uum5ZCoic-1Hk(a>kOqnp8 z4YFL<&x;)E1jE_$lpn|64t{eMCjO%cu>rfoK@cyzuhfY#Fm~;X6PQ@J7_eYotNZo*5&*>E?Pop@Ffw=! z*qPbAM@;9I%%HC6jc>}kK60J;U1QS0fKwCE(UDh*Z)D}uU@Mk(q`#K7mJ!?cK6ppD zwtAm|Q&Yj&E}+B7|I4*HvzGCs8rxi(>Hbb;MonEV^uv`I=B>I0D?3BWmv=+yzP}bx g;=0;n3oiMYs(aWwb22+nLz*#O4lmY}>XyaVE)xJGLga?aX}VJy-v^`q%2N)m^Js zUp!UybX9d=Im~?-Ok+wGh>J^D7{Sfm)zZ`f!F&BsPa%P@6S?nLdy&Li7xfGp34h@0 z8uZhVg=376qVmj3b4z5N#Ge3Jc@4R{ego*wypZ2}^M`xC-`iTpuyvXTH~913%wA&zRCZ`m>l)B0^4GJX z&3ArX&=#4du5N)p_jX>Up$c^)x9oe*#qIOEaRz7;MB)_lOcqMCb?O~?8}HcqR1PQh zb-+V04~0GuFDu+VcDMe z8Z4@r+xbwB^7%Ra;o%}&WpA$E#YXS@cVuFFSMel}{*V}@=5vhKo@W%-*-V_B=-Eo4 zF_30Z46;ZR6nrt$&O>2A!c3}=8f*nqQV;h5M;QwZJ#HKnWvwv_sGRi~;J)S>E+v90 z#9zRsb%&8cSdkz##8DDx0pB@Vc^zw_c)~$q@XmhKf`x~z;^imPR!Ji5Cq}^+ufDWv zY0MJ;3Lz_w?M8AT5>X4mHfzBY%tg06yJX=oV4d0qg6EuA552ucG9<6qPE1klty(Bv z5mVAKqN(6TkrnMvOvw>qh^w^us>%bVtNxQHVyQB)&hSA;W$7FY`TM2O@pDhPRUu{+ zz(NPXaaPhIF^l}#rm^e)M?J%h;jfrEeV&_>-Q3&IM&`j~>Nl2l=0p;r!};Z}ugsq1 z%kcUWiC1^s&wSZe>MaqgAl=BvoCY$=ldk!el%r<%h{+_GTM|$ z;@jExW*rAjC6@@`g_P}g0QH9Nq6CW??4;iVD4){&8j<=|&lIp$MC_Zi4xM%jXp|6o z=&NP!`X=;1?(xfyYAtJBSFoW7hO3L``?hu8Gu;0biMGKF~*(f?69hl(k39hCj zy6AY0v5Cj*A6+G+(^JMSXQ2|1cv@G`(y?|35~d$(&>8`?x7c<_QN+V5dYypv(aQw1 zg~#^%zYW`?SK-$GQ9)2&PTO8e5Y6h^2(RK<<c38HYP+2UAH+o~U#ZAv1Ci^4TeW6UNmG(e=W@}MUJz1vK0W4LUaF1G^tDU+mCiSSjh7pX zuN7p9QEL|>AE2w7Z-o`@tXO7uE~i&lN1k5h0E&#nvksrleEk;1E)BHiq`GxrR5~AM zS*!%+MLpX0+v+EjDK^=*I2G+P8isyR8Y5`%B9GQ`X%uD|*5m{5~0b^`uQ&|E!F@wH)G?fIn`(;Dtux1 zX;5f-0v#*yn?x_r8gSO!$F#q3FdL$M4r#But&-Zu*&pd|!)UGaWc1u1Ulks;ab=vQ zi=&N{n-@LYMc@|3h?{@XVH z*tz9jFBHLU^SPU~9QZ~L)|NRtTsi!)4Z1z{bHO#BX~VS>EFCsiVRoyxTNP34qhCCJ zYpB2e>$2ADdTukQ{P)k@$MYy`2>9<^K^w=lm)cQMGKB+~;l&>nT@(A)a98@VFW836 zbU17$yTZTm<<3Ej9dbV`0mPX5{hO39-_ZHYMH4mxw8IcQ4s@lfDeh<+>_!|~SOek_UD(fp(pWPaCs+yHXwFO%qfYm85K>o)}FKTz!U51pJST!UT&LoH=fzq zMtOBfp~hLif0g2@Fu@EYWtBa?Rlb!GC}l|)!nhR zxqZ5DdDOxl--Y~3xMUTxbn+UEAj`vg=;ATAH(};JNC|#*ScV8Y6!N?Z+dDaEzmR>A zPhWQ1WeBjghW`0RXYdxj((AmlH}jdn!KEj>vVZuflIU)30W@!066~73jLsS}KsyUE z@^ad;TiZ#mHXIrtjTUJbwE;ct9P3q`R`b*ow>cG_!)&NVf_pvQdZ(f;XMp$1Jg#c% zlKWz~@;Tl+YIM-I`;1iI-k9UIu!bOwR43A(TCv>^>YQJzzy3&XJ;FA$IU*uSr^|H` zvxh2UGU%z0j*8t%go}L@jyjVC?lsSARKd4TefD7ImcEPV%hQ zs;Yx8D-8M#HZT>6^X$xVtIGYLXgJ&4OB0Ob)hBzIGdG(krM~$zO&4v{J~C7%mRiN$ z^A%NmcF(6kq=6l)nSckTr)f@=#>TfYkfrSOSxvxS+|C#o3}$ZeS_&~=>XoQ<4YY@c z<$nKOUJy=9%$YR*SWSLA-qb zZ(3zIXKWY3iuUEkOJrEcGuF&ZpgS0@#!&2pB%hYzO!T;D=hccGeYy4E1T$g)_!{*(+#z*tx*8GFCIbohrzy zmE5Qzm}HhBQaX!Z^SV&wGf~ZtaLvue)Y~(`4{BHCiDl=mCv5)RaR-<7;WdL-W~hI= zp+hnq!NmR(QMB;u zcZQ=?wP=!>ZYC(QIfS5crnWGHI7c-yT}!TrkN2}a2~;c$@5zhF{n!-JZEXFGZvelJ zzN$&d(dqW-*v}=daFnA(UG(99;`P@-e~yAsB!`Fy3f&+l8@ zecf~CRejEyJ2ku-C7xs{YzWm>?li@_80XR^gx7>{%uu4qXPm{_{`u@n?{eX6A7J|< zR3?W{5GjTBKGj#PP$$@I7C#9i)GfN|1_U@R#F3;f#7H8=3sFO(AEQYe!wGE=6`tU`vfg3sp;$}%&o0l7(TQoZLDougFAh8M~+3&f$PLJ{bWDpbTc$SNdZk5$pb^(k0U z234T(S@>lK_uaE{vi1)*M z^syi|+23ws@Ms?&wcXWR;drjqO=tImLW)Sz)&JZhss;Sz`q#!02Q(m#|JvBlZch{t ze*KB%wq{9}-GGNkURgzI?-kSTTR>exP$?G)oCEcb3$ieA7T!!wX5IJE(0uP&JM1p+ z%RY76PKO0?jdoQ5K{ihQr&Bp1OH-85-!wC{RbNqVL7+dt z^&g<);wY?3)e3&&dzc91d9wRp0uol>(YGk!R)^ z+lN|mU&`OwMYLBpnm)82_HV6)2n(j>t?@wCm}BBDlSW8X7g1UlRA@hR(0@=e(4ulO z!T>3m!`gp|jmM@GN2cI~Vl#*ovExo(>G9CiAlunP#Jv7c03d=AkArGxCsFNfZc_6lSDE3QV?ly66EZRA>kZ}kk z(G_-MBIPZ6k{J8U3I#Qogt<#w&WsmtX8BV>@d;@u>q@c>vnnGsPw)Ffp;QHC5l0Cu z6Mvp8(cnfat-=XBgQZ0yE%*dp!6OeYFX~G2d-28M!kn%a|M*U+I%S@<%RHT$P*s+? zkW}S#WuZhHX3_ebf|AgHuQP)`M1iqZ5J8&L%6_d1OV`JFtQK*<)=AyeYS=9=04BPa z&!Whqkam%7oq85VzKF1SRsvT!TVlTupXTB?kjcqkB(|G1e2A3jyV38L8M)tWzj3hw z{z5p*sM7u8UIHMV|GJi{-3BW_di$Q?VUunv%fEGklpOxA_wV4nmE#7Gva;dE;o9X)t4M#^&?WeuAGKUbz%d};I;ClE z%Jw}#uxzOOw}%yX4lYM8qg{N(?(a>;vnwwDu0PNIl?$`2zHax;oAH0`XZ-)Bqf`lH z*|QfUY#f%>bnz3tH_J<`T`gFo8w$H|=o<^)%h{g)t>4y7@4c$-KXmRD0(ESH@-3x= zNo@Gk(CVa{A%KMABJma+^-P7ihU{bF*sd3J^sAQe|5WO#ZP1T| zp{i)62dV1P)e)+yqISz-N&)1rK5+e{gEPOyUigyvJ{UjUU$7n)c5x(M_%5Rg)IIQ| zWM?9c1Y!x5hsR}gEugU2$#uy^7-We~{KU?JQLsx<$jh)#t19yeC3yj* z%+7G+gt^T-CO+Bui>Am)>vM+6XR^jU{0ZHo1I-nq1M_wXA!S{o17_zgH`Rd>fKv;) z7$xkA&6IVCplKO&6ylQqDIac1AyMKnF%Cp~3!j59F=UCPN(X9tQXV&T2yU4r(ka5BvZ6X?pa&90FE#57%sfV-taQ6$g*(WVB0nQDaHtjRHDvk$IyNKY1)6=c{*^3w>RUOSlUwo9Mc}^71lrO>mNe4)dams?k+t zu34p)x1qh_HwDco6D^vw1AIZ&t|G>01((^uo9w^y6V<-AZh#9YdillUd^2;v{)~R} z>+PecGdx?5va%gB+Q<`~AJ2&J9obv|BB*yk3&ENaazO@C%-pDCy5NdiQL1Es>n=>_EzEAWk$M){F)*!|doYZIO&Yr!=z40o zK8_2Rc|Ha(g9}y??pD1Fx~98uU+b{W?@xE6Ys+Ew79`N`v6=7A*kTv4noo6;bz;{> z>3ne?L+U`D9-yKOpKFDcQhguG8aJ)1ytDenIR0b`w^~jv7v?TZ|8F6C!JHY|%^2VH z=oC;E8d0W9ebGbh*U)F8)K6L>?5J4HlZTyO01y!nSNO>YNwsc z>Mt#9!R0|O$v~@!`=P>rG?28{ln+>~-2(OlO}8~U z{}0#XD_YQhx|xQ_Vln@u-C@^%q6xbhhby^k#6oSg(b|8PwP*C|5_OBmC9g~T{j@bY zF@;1hX1}+h_HoRGoA6(kM1OngF-9yz>iJhGCq1`hbcklU-RDm@YT4-Hy-4asn z{1=tmSC>D-wvKvP3{xDJ(wL@gOg*DVSvM;wxY)0LH6`88>MyOhlT1XrSJfX#`suO7 zG}{cLRK0Ec{7mw+soqwb*)`%1b7SuLr^)%{wGaw`i{PgMmrM$=j*Fm03d*4o!?Sj< zKE%^=5Y<{p{z6sAMGLJvMRWrBn1~~;Zb51dlSylUmrMx2znfEt1PW_F$xvG1%p$RM z2bQ-&rG05Ze84mF49ZDNZ;x#C5y;(zDXW9UiZY@ECOrvv`bfU(-MdXw`}s5it%b4% zd6!llJf&++ERTvvju`Jhp&{N^e`fyc;QCHwP*X&UTk%iT+PQx(C(}hk$uw@dRh>D}_2Bc7Ol{{fTZ}tNU!$0KAEp zbt=kUs2tT>)D0HX53vpbxA$><6VtZOwS33xiu>VKgVD8*uTwWWjsc)<;(e+Vm6W%) z)}P5yVE@MpptXV_LHaR-c@e6*;dQ=!d(sh#Q^_S*&RL$v-g86Kx(ddQWH$Ip7XW}R zkEs$grF2h6bT;5YJ4h0N1}FRhKv=)dT*_p2N1uLMMun z?acJ^EruMfOA^K?&g8QWN|lmiC_M;l-ArVsD$cbDPW{#?v^AgD6%&$ENn`_AD05AC|(nMa_VsPTUV zb7!XyIL6mmgpY7XyNzwLcuJsRjujq1QwrTS^J^?a?HC_ugh23{bM2l`tHCinjj%UC zI%w$BJXDJTN5Fb-sC=Y11=s$sS|WWbG(58J%|fOkhExtL$0Z z90?E+6P_q{xezx}RwJSu_D}0=FKA85^RgpPjh(6A#IwiW8BnYtEoy1i1Y94*Wj>0b%__nR(n@#?!2mtq+Z?3PEL! zjTZN0oQ^ykRHoVPuzx;<8z^a-?KWuBlr zi^4`FDizgs@`uKuLzN(iwW37LE$$2rgO;C7zDdMR911pK<;ySQ#)7etk`5l=s@x9` zX-O`1D?@%6QeEGH7+E=BLn&%&;|vc?(SWp_UI4{awbGRS1cnzGB6QtKu81n0{4#~2 zAk9g2mtYPP4j24sib(-!;%%9VA{wY>O>=@bh>W*@8#aw`)9Q>13O9Pa1jaacP{ zn+e+TS=AZLb%rAh{7RZ3uWj^mi574HOM%}Z`L)S8qlytvHA$;uH+>c3jmiKu(WM;1 z4t^>#ExS8algv9+ur&BXEd?3v~>wul|aHuN{+_(R3a?@MG#Qh;qnWVKKf!U2k!PRF40 znzuPAe-{X(-R4MgtzEMXUrAFdBxc*ukgVOksscYj{;zp0a}D4h;JNXTrKt){|Gs<{ zoQRJ^5x)=b2O!XpWtr?I*_-9O;T-L!ujOo^4Iy*h%SpF)Br$PA!#QZstjQ9N@reOh zYLbsR0Z}gp2+q8!!#86FPx?>i;(%J)qMD+YIUOUj=-Fc?xF#jV7No)awm6&g$qF9s zRj-mqN)CdL-_YQ`CJSt0V@Gbf2r4I<;-LzZ#xgSuxmn8Vq~WQjWg1atU;%zMqlNWG z`iuALT75|Y0Q8?1GP~KVCnh2d@HADZztxjw%Ez*>$Dp$RusmY_UXM80vIY{2716dT zg|TuA4tbnIEQ*&o35!~(F&RqL5zaGiSk5{9FzZ^k<^VSL1hK+8GNg}dazpOSMSc2w z9rO`*heX?`M-}am{mj|XKz)~Pg)DR$KZ3DP@XHPqn3Q<9k#!uWsDJhfZ0Hjxj`93y z#{n*8qMH2-Or(?MRBxHymjYRxrhA1$saXd3F{_Y$WypXQY0LXNr05ZK+PFtQ9US@g zbx$h%<)AvFWY(EL zX1R%S@}P&d-&8|lv0eQjSK(GU@(Zx{f zwE5h0t*$0iBaxKsnkKMwzhpx#7rrnC`L2IY{i>sZlCC9r>lIQabnZjf)ue>a2VQw@ zu5%~g%suRpx2c_3uI2=FivP(CT!5aS_UIkET9Dj$;e>F2elyE_2N+j5&?qwtzEOv$;t-{dkrI`T`3*hBXu_3c z8h=*mOIbYUL}+3pwTGqMG~2}5)Y#HguaE2X*50$}3?RUV?IFNKHBG z5D=92W)(5oN+3XO7bH%I`_SjH*T+t)_51$Z0WwSbb`A7BPAn)~8%4GPoDgi^zU1xT zg^|mfQvg3~<(C0Hb#X}!{n3or4&!SWilO!?E&84IshcBo79I(y%UANt?xh+6MJ#j# z7uLmydkh`=TV7@|zIh1G+hr#2bk2PY(9=&pM1fAmWzYBTrjtCl3NZo-WXdnW^ku8my4q<|YHUX?d3o+O zX-Et{8R;Mg3e6`NdFGdTsNr}|B|Rwt9$j>nRq0gf{8YoIF42K&#R30_uXGCg#ewR& z*;Q;<;8g{q!a}d|!aj+hRAyJY2$&6{(ux^%WL*3l?qV#eIXW!aE#-mUtl+r7lsOxr z9OZ-znJ@rN6E<+)%8N=+a9K{wg_-RllZx`wf*cp6pO?E# zC@>2r`LaWi7@(}! zE@~J`iNcc;a4*dQx@rLso_~lem}-|l3P9)nM6bt=4i7`7FpmR7TVEbXZiHOEuqGD! z4tYc3VNb7y$CO=LlyoBIym;z@mK*7<%>E6ElQq4F@;NX@95NIs*p@o@V~)!GjjWqm z&AsO8Jlh(C!{BO=3AEQPqK;4C0sXK&RyEpYmvlBd_emrqq*WtTxpbjpO}x(Tl0)Ln z4f|5`L77VpSDyl*8OaXEF%rUHrPG0~WCC2MML>t+N-i27JlCNgNw%WkKC3JWk#K*q z21j6$SmK5e0I-&<5hT-dMUerfsil!JX_4M!h1M5=21wN8NaW{g9eZ?vARUAV0A~*Y z1NJZEi?8#1lIB(%q@;%HXdFE>ac0|;rB9TlNpMN*ixH&uA-VX~|>+`26f$&JRCkANsq(V=%Me;SYeQ|xB?g0vG^uq5y6Z{kn z#wv;cO(J<7yXMeXq*k#msCgYlL0O5k8*|!4-YnJ7K-@JfFVuaF^gI?Hk{5g|*1)#B^LhOHqe zpszzGobt@IPtO?S>&&SiP)!nVWH@tn{9Uar1fyI;{Sqn1x*86p2pzEf#$wKsL&sW31Jhncct)fD zpx5FWheqG=X;=gzl-$SfLX}@eMAH>Zq864~_Y=}p#{pVk)#M+Zr4%-s+jq_SA(=`3 z`guMGhjoD7rD86Nhp*dVbTjJ2#2<>n-T*74@m!JS3S_5>EbMtkjjIrisTl>ykFK>H z*jh*%uneCE&tcIQQH+kD%8$1Vl711N471#BnbKbw8+dB5A4wg1_H6amNfgjkgAlzQ zqU?hwyghGOE@dXYNOZR$bJ%pYsHG3;+XCuMKY~De&#)775vbQ&fB%4EPJw-eULq?o z3#V__?@)?7yg$M8qHDiJd^F7 z;>-I-Yxo|?|fKCxsi(Ec@|6=l8g;UDgx6G2Vyw7$2=53=rUvsJLk?5CrT(^(g zm*MU>#wTJN+Knmyx@~l3{)iaIojpD4IiK%Wc5bb#>vXDqMWNT8iLXtu<^NcW;qqeT zGUYS<3u>5}oZ$?8r1irW_I}e+Mr6m_9A2+w9g}D`* zl{vd5D;v8xw;3lVn+311;Q#ML24Vt)%zyt>xt4TQv^;P}Z;!?N=>TYGNq~&WI5b91 zt|4S8G&EJ+UswPDnu??f_j4I1C4<|ymN0o&xvAD~43FhD7v=BCwzjT>dCX@M)31L> z9EI<5wqIuij&q+U?;|4x0|+VkW$)NfWniO1#}p1Ubz&_$vTH!acj`fK-}vf_w2=mh zS22A}zl7Yv`(a2l@;nWwAPqTR#GvCwsji}yG>MGte7UkE(whBME!zQ_F$#zl&KFcE zTcJCLouf%qXGMXnfnr|GBFmN2fdBhDyNFYczUgoosRXZrozY}!fpdR+NOSL6_b<{X zRP6wL?eHW0_{t^d04_V~Ac+@2rlxfB2ZuQ?2OiI^blL-jCs+QF)Mo4>ednd;qi!}G zy_AT4iYP~%VESgLzJ`1^h$G3WOMc2}nR0GY#iqk_iZ@#$&0%g?P=-Un(zu3eW?@px zX66TV7PaA_br{#a%~3KBcy6IhrwDy6u!y%dRmoNDFBVIR1 zUKl@3+!q)j6ZYW+LmT!9UZ{yj5KsD!m2WYOMi^f3jD}}!@vY3TjYgku89wm)2MD|| z`-km6P@Hxh@(2Boi4I6Ff*iwVD7xkTpyv-O-w=ZGM`Lut_)gk~*fzs_XTKd?-y#NV zJ0!kl#vp3^XkV>|A4tLt>uo{}H^U7#H;(-&8#^3;8~4cu^Lsf`;s*sx@dlz}HLCOv z=*yuIIo^)^omofiH-x#-9BjxqX4qCHD9kFa zQXfR1&vX3kdg*PEVE@1N_n+sm+x;#6*CG%8&ePAkD!wyR^a;_7IF%m+ww;UM!*oPV z2^L+W8hmV1pC;QqIdEFF90XXZTDL8|rq^%f4r3`71x(QMQE*sR9mbY^-ech8lVz)0 zeF(!+(B5OvR^RRP;Of;c-o`iO8k5oep09hM