Introduction

lTab is a function that produces a longtable environment.

For all of the examples that follow, we will be using the first ten rows and five columns of the mtcars data.frame, which we have saved in the variable ‘cars’. In an actual use case, a table this small could easily be accommodated with lTab, however, for the purposes of these demonstrations, it will be easier to see the effects of the individual options without needing to comb through a large, multi-page table.

Important Notes

Basics

Standard lTab table

To produce a LaTeX table, simply pass a matrix or a data.frame to the lTab function.

lTab(cars)
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Labels

Pass a string into the ‘label’ option. When not set, defaults to NULL.

lTab(cars, label = 'tab:mytable')
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \label{tab:mytable}
## \end{longtable}
## \end{center}

Captions

The lTab environment can place a caption in the head, firsthead, foot, or last foot. When placing captions in the firsthad or lastfoot, it is important to set these options (even if they are empty strings) or strange bugs can occur.

lTab(cars, caption.head = 'my caption in head')
## \begin{center}
## \begin{longtable}{rrrrr}
## \caption{my caption in head}\\
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}
lTab(cars,
     firsthead = 'f1 & f2 & f3 & f4 & f5 \\\\',
     caption.firsthead = 'my caption in firsthead')
## \begin{center}
## \begin{longtable}{rrrrr}
## \caption{my caption in firsthead}\\
## \hline
## f1 & f2 & f3 & f4 & f5 \\
## \hline
## \endfirsthead
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}
lTab(cars, caption.foot = 'my caption in foot')
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \caption{my caption in foot}\\
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}
lTab(cars,
     lastfoot = '\\hline',
     caption.lastfoot = 'my caption in last foot')
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## \caption{my caption in last foot}\\
## \hline
## \endlastfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Booktabs

Setting booktabs = TRUE sets the defaults of the toprule, midrule, and bottomrule arguments to \toprule, \midrule, and \bottomrule respectively. When using booktabs rules, regardless of whether you set booktabs = TRUE or set them individually, make sure to include \usepackage{booktabs} in your LaTeX document. When booktabs is not set, lTab looks for the value of kLat.lTab.booktabs, then kLat.booktabs, then defaults to FALSE.

lTab(cars, booktabs = TRUE)
## \begin{center}
## \begin{longtable}{rrrrr}
## \toprule
## mpg & cyl & disp & hp & drat \\
## \midrule
## \endhead
## \bottomrule
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

If any of those options are explicitly set, the booktabs value has no effect.

lTab(cars, booktabs = TRUE, midrule = '\\hline')
## \begin{center}
## \begin{longtable}{rrrrr}
## \toprule
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \bottomrule
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Headers

FirstHead

In a supertabular environment, it is possible to present a different first head (i.e. header on first page of table only).

lTab(cars,
     firsthead = 'f1 & f2 & f3 & f4 & f5 \\\\')
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## f1 & f2 & f3 & f4 & f5 \\
## \hline
## \endfirsthead
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Important Note

As demonstrated in the above example, both head and firsthead use the toprule and midrule commands by default. If you desire to use different commands for the head and firsthead (or if you want one, but not both to use a top and midrule), you must set both toprule and midrule to NULL and manually insert the commands into head and firsthead as shown below examples.

lTab(cars, toprule = NULL, midrule = NULL,
     firsthead = '\\toprule\nf1 & f2 & f3 & f4 & f5 \\\\\nmidrule',
     head = '\\hline\n col1 & col2 & col3 & cll4 & col5 \\\\\n\\hline')
## \begin{center}
## \begin{longtable}{rrrrr}
## 
## \toprule
## f1 & f2 & f3 & f4 & f5 \\
## midrule
## 
## \endfirsthead
## 
## \hline
##  col1 & col2 & col3 & cll4 & col5 \\
## \hline
## 
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}
lTab(cars, toprule = NULL, midrule = NULL,
     firsthead = '\\toprule\nf1 & f2 & f3 & f4 & f5 \\\\\nmidrule',
     head = '\\toprule')
## \begin{center}
## \begin{longtable}{rrrrr}
## 
## \toprule
## f1 & f2 & f3 & f4 & f5 \\
## midrule
## 
## \endfirsthead
## 
## \toprule
## 
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Rows

Rownames

When including row names in a table, by default lTab will use an empty column name for the ‘rownames’ column. When rows is not set, lTab looks for the value of kLat.lTab.rows, then klat.rows, then defaults to false.

lTab(cars, rows = TRUE)
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
##  & mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## Mazda RX4 & 21.0 & 6 & 160.0 & 110 & 3.90 \\
## Mazda RX4 Wag & 21.0 & 6 & 160.0 & 110 & 3.90 \\
## Datsun 710 & 22.8 & 4 & 108.0 &  93 & 3.85 \\
## Hornet 4 Drive & 21.4 & 6 & 258.0 & 110 & 3.08 \\
## Hornet Sportabout & 18.7 & 8 & 360.0 & 175 & 3.15 \\
## Valiant & 18.1 & 6 & 225.0 & 105 & 2.76 \\
## Duster 360 & 14.3 & 8 & 360.0 & 245 & 3.21 \\
## Merc 240D & 24.4 & 4 & 146.7 &  62 & 3.69 \\
## Merc 230 & 22.8 & 4 & 140.8 &  95 & 3.92 \\
## Merc 280 & 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Rownames with custom header

When providing a custom head with rows set to TRUE, remember to account for the extra column produced by the row names

lTab(cars,
     rows =  TRUE,
     head = 'rows & col1 & col2 & col3 & \\eta & col5 \\\\')
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## rows & col1 & col2 & col3 & \eta & col5 \\
## \hline
## \endhead
## \hline
## \endfoot
## Mazda RX4 & 21.0 & 6 & 160.0 & 110 & 3.90 \\
## Mazda RX4 Wag & 21.0 & 6 & 160.0 & 110 & 3.90 \\
## Datsun 710 & 22.8 & 4 & 108.0 &  93 & 3.85 \\
## Hornet 4 Drive & 21.4 & 6 & 258.0 & 110 & 3.08 \\
## Hornet Sportabout & 18.7 & 8 & 360.0 & 175 & 3.15 \\
## Valiant & 18.1 & 6 & 225.0 & 105 & 2.76 \\
## Duster 360 & 14.3 & 8 & 360.0 & 245 & 3.21 \\
## Merc 240D & 24.4 & 4 & 146.7 &  62 & 3.69 \\
## Merc 230 & 22.8 & 4 & 140.8 &  95 & 3.92 \\
## Merc 280 & 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Row separator

Any arbitrary LaTeX command can be inserted between each row, but the most common are \hline and \midrule. To use \midrule, \usepackage{booktabs} must be declared in the preamble of the LaTeX document, but booktabs = TRUE does not need to be set on the table. When rowsep is not set, lTab looks for the value of kLat.lTab.rowsep, then kLat.rowsep, then defaults to an empty string.

lTab(cars, rowsep = '\\hline')
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\\hline
## 21 & 6 & 160 & 110 & 3.9 \\\hline
## 22.8 & 4 & 108 & 93 & 3.85 \\\hline
## 21.4 & 6 & 258 & 110 & 3.08 \\\hline
## 18.7 & 8 & 360 & 175 & 3.15 \\\hline
## 18.1 & 6 & 225 & 105 & 2.76 \\\hline
## 14.3 & 8 & 360 & 245 & 3.21 \\\hline
## 24.4 & 4 & 146.7 & 62 & 3.69 \\\hline
## 22.8 & 4 & 140.8 & 95 & 3.92 \\\hline
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}
lTab(cars, rowsep = '\\midrule')
## \begin{center}
## \begin{longtable}{rrrrr}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\\midrule
## 21 & 6 & 160 & 110 & 3.9 \\\midrule
## 22.8 & 4 & 108 & 93 & 3.85 \\\midrule
## 21.4 & 6 & 258 & 110 & 3.08 \\\midrule
## 18.7 & 8 & 360 & 175 & 3.15 \\\midrule
## 18.1 & 6 & 225 & 105 & 2.76 \\\midrule
## 14.3 & 8 & 360 & 245 & 3.21 \\\midrule
## 24.4 & 4 & 146.7 & 62 & 3.69 \\\midrule
## 22.8 & 4 & 140.8 & 95 & 3.92 \\\midrule
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Columns

Column alginment

Explicitly set the column definitions. If this is set, colsep will have no effect and you must handle column separation within this declaration. Defaults to ‘r’ for numeric vector columns and ‘l’ for character vector columns.

lTab(cars, coldef ='rlc|l|p{5cm}')
## \begin{center}
## \begin{longtable}{rlc|l|p{5cm}}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}

Column separator

Place any arbitrary LaTeX between each column. Will have no effect if coldef is set.

lTab(cars, colsep = '|')
## \begin{center}
## \begin{longtable}{r|r|r|r|r}
## \hline
## mpg & cyl & disp & hp & drat \\
## \hline
## \endhead
## \hline
## \endfoot
## 21 & 6 & 160 & 110 & 3.9 \\
## 21 & 6 & 160 & 110 & 3.9 \\
## 22.8 & 4 & 108 & 93 & 3.85 \\
## 21.4 & 6 & 258 & 110 & 3.08 \\
## 18.7 & 8 & 360 & 175 & 3.15 \\
## 18.1 & 6 & 225 & 105 & 2.76 \\
## 14.3 & 8 & 360 & 245 & 3.21 \\
## 24.4 & 4 & 146.7 & 62 & 3.69 \\
## 22.8 & 4 & 140.8 & 95 & 3.92 \\
## 19.2 & 6 & 167.6 & 123 & 3.92 \\
## \end{longtable}
## \end{center}