---
title: "textab"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{textab}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
## 0. Installation
To install the package from CRAN:
```{r echo=TRUE, eval=FALSE, message=FALSE}
install.packages("textab")
```
To install the package from Github:
```{r echo=TRUE, eval=FALSE, message=FALSE}
devtools::install_github("setzler/textab")
```
To use the package after it is installed:
```{r echo=TRUE, eval=TRUE, message=FALSE}
library(textab)
```
## 1. Character rows
Basic character row:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec = c("hello", "world")
TexRow(vec)
```
Character row with LaTeX formatting:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec = c('Hello','\\textbf{World}','$\\alpha$','$\\frac{1}{2}$')
TexRow(vec)
```
Note: Double backslashes are required for LaTeX commands.
## 2. Numeric rows
Basic numeric row:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec <- c(1.0, 1.01, 1.001)
TexRow(vec)
```
Numeric row rounded to the second decimal place:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec <- c(1.0, 1.01, 1.001)
TexRow(vec, dec = 2)
```
There are four other arguments specific to numeric rows:
- `percentage`: if TRUE, add a "%" sign after each number.
- `dollar`: if TRUE, add a "$" sign before each number.
- `se`: if TRUE, surround each number with parentheses.
- `pvalues`: if provided, these numbers are used to add stars "*" after the numbers.
See [this article](https://setzler.github.io/textab/articles/Numerics.html) about formatting numbers.
## 3. Custom Formatting using Surround
While many common formatting options are explicitly provided in `TexRow`, we also include the `surround` argument so that the user can specify custom formatting.
The surround argument allows you to provide raw LaTeX code. Place the `%s` symbol wherever your number or character should be placed.
Suppose you wish to make each number red. In LaTeX, you can make a number red using the code `{\color{red} %s}`, where `%s` indicates where the number should go. In order to make each number red, we would specify the following:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec = c(5.081, 2.345, 6.789)
TexRow(vec, dec = 1, surround = "{\\color{red} %s}")
```
Note: Double backslashes are required for LaTeX commands.
The `surround` argument works for character vectors as well, and we can apply different formatting to each value:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec = c("hello", "world")
TexRow(vec, dec = 1, surround = c("{\\color{blue} %s}", "$\\frac{\\text{%s}}{2}$"))
```
## 4. Multicolumn Rows
Merge and center the second and third rows using the `cspan` argument:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec = c("hello", "world")
TexRow(vec, cspan = c(1,2))
```
Merge and left-align the second and third rows using the `position` argument:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec = c("hello", "world")
TexRow(vec, cspan = c(1,2), position = "l")
```
Two multi-column rows, where the first is two-column left-aligned and the second is three-column right-aligned:
```{r echo=TRUE, eval=TRUE, message=FALSE}
vec = c("hello", "world")
TexRow(vec, cspan = c(2,3), position = c("l","r"))
```
## 5. Combine Rows
#### Combine Rows Side-by-side
The slash sign `/` combines rows side-by-side:
```{r echo=TRUE, eval=TRUE, message=FALSE}
first_block = TexRow(c("hello", "world"))
second_block = TexRow(c("$\\alpha$","$\\frac{1}{2}$"))
combined_row = first_block / second_block
combined_row
```
#### Stack Rows Vertically
The plus sign `+` stacks rows vertically:
```{r echo=TRUE, eval=TRUE, message=FALSE}
first_block = TexRow(c("hello", "world"))
second_block = TexRow(c("$\\alpha$","$\\frac{1}{2}$"))
combined_row = first_block + second_block
combined_row
```
#### Order of Operations: Horizontal Comes First
When using both horizontal and vertical concatenation in the same line, horizontal concatenation will be performed first:
```{r echo=TRUE, eval=TRUE, message=FALSE}
first_block = TexRow(c("hello", "world"))
second_block = TexRow(c("$\\alpha$"))
third_block = TexRow(c("$\\frac{1}{2}$"))
combined_row = first_block + second_block / third_block
combined_row
```
## 6. Vertical Space between Rows
To add 3pt of space between two rows:
```{r echo=TRUE, eval=TRUE, message=FALSE}
TexRow(c("hello", "world"), space=3) +
TexRow(c('$\\alpha$','$\\frac{1}{2}$'))
```
## 7. Midrule and Partial Midrules
Add a full midrule between two rows:
```{r echo=TRUE, eval=TRUE, message=FALSE}
TexRow(c("hello", "world"), cspan=c(1,2)) +
TexMidrule() +
TexRow(c('$\\alpha$','$\\frac{1}{2}$','$\\sqrt{\\frac{2}{3}}$'))
```
Add two partial midrules:
```{r echo=TRUE, eval=TRUE, message=FALSE}
TexRow(c("hello", "world"), cspan=c(1,2)) +
TexMidrule(list(c(1,1), c(2,3))) +
TexRow(c('$\\alpha$','$\\frac{1}{2}$','$\\sqrt{\\frac{2}{3}}$'))
```
## 8. Save a LaTeX table in .tex format
Let us work with the following table:
```{r echo=TRUE, eval=TRUE, message=FALSE}
tt = TexRow(c("hello", "world"), cspan=c(1,2), surround = c("{\\color{red} %s}", "{\\color{blue} %s}")) +
TexMidrule(list(c(1,1), c(2,3))) +
TexRow(c('$\\alpha$','$\\frac{1}{2}$','$\\sqrt{\\frac{2}{3}}$'))
```
Save a simple .tex document containing this table:
```{r echo=TRUE, eval=FALSE, message=FALSE}
TexSave(tab = tt, positions = c("l","c","c"),
filename = "example1", output_path = tempdir())
```
Save a stand-alone .tex document that could be compiled, as it has begin-document and end-document statements as well as import statements for common LaTeX packages:
```{r echo=TRUE, eval=FALSE, message=FALSE}
TexSave(tab = tt, positions = c("l","c","c"),
filename = "example2", output_path = tempdir(),
stand_alone = TRUE)
```
Note: these examples saved the table to a temporary directory, `tempdir()`. In practice, you will likely want to save the table to a permanent directory. If you do not provide an `output_path`, the table will be saved to your current working directory, `getwd()`.
## 9. Save LaTeX Table and Compile to PDF
Produce and compile the stand-alone .tex document to .pdf:
```{r echo=TRUE, eval=FALSE, message=FALSE}
TexSave(tab = tt, positions = c("l","c","c"),
filename = "example3", output_path = tempdir(),
stand_alone = TRUE, compile_tex = TRUE)
```
The final command will produce a PDF similar to [this](https://github.com/setzler/textab/blob/main/inst/example3.pdf).