% !Rnw weave = knitr\r
% \VignetteEngine{knitr::knitr}\r
%**************************************************************************\r
-\documentclass[article, nojss]{jss}\r
+\documentclass{article}\r
+\usepackage[a4paper,height=24cm]{geometry}\r
+\usepackage{parskip}\r
+\usepackage{titlesec}\r
+\titleformat\subsubsection{\bfseries\itshape}{}{0pt}{}\r
\usepackage{booktabs}\r
\usepackage{longtable}\r
\usepackage{rotating}\r
\usepackage{tabularx}\r
-\title{The xtable Gallery}\r
-\author{Jonathan Swinton and others\\<jonathan@swintons.net>}\r
-\Abstract{This document gives a gallery of tables which can be made by using the\r
- \texttt{xtable} package to create \LaTeX\ output. It doubles as a regression\r
- check for the package.}\r
-\Keywords{Reproducible research, \LaTeX}\r
-\Shorttitle{\pkg{xtable} Gallery} %% JSS header\r
-\Address{Jonathan Swinton\\E-mail: \email{jonathan@swintons.net}} %% JSS last pg\r
+\newcommand\code[1]{\texttt{#1}}\r
\newcommand\p{\vspace{2ex}}\r
+\setcounter{tocdepth}{2}\r
\begin{document}\r
\r
+\title{The xtable Gallery}\r
+\author{Jonathan Swinton and others}\r
+\maketitle\r
+\r
+\tableofcontents\r
+\r
+\newpage\r
+\r
<<include=FALSE>>=\r
library(knitr)\r
opts_chunk$set(fig.path='figdir/fig', debug=TRUE, echo=TRUE)\r
xtable(tli[1:10, ])\r
@\r
\r
-\newpage\r
-\r
\subsection{Matrix}\r
<<results='asis'>>=\r
design.matrix <- model.matrix(~ sex*grade, data = tli[1:10, ])\r
xtable(fm1)\r
@\r
\r
+\newpage\r
+\r
\subsection{lm}\r
<<results='asis'>>=\r
fm2 <- lm(tlimth ~ sex*ethnicty, data = tli)\r
xtable(fm2)\r
@\r
\r
-\p\textbf{\itshape Anova table (one model)}\r
+\subsubsection{Anova table (one model)}\r
<<results='asis'>>=\r
xtable(anova(fm2))\r
@\r
\r
-\p\textbf{\itshape Anova table (two models)}\r
+\subsubsection{Anova table (two models)}\r
<<results='asis'>>=\r
fm2b <- lm(tlimth ~ ethnicty, data = tli)\r
xtable(anova(fm2b, fm2))\r
xtable(fm3)\r
@\r
\r
-\p\textbf{\itshape Anova table}\r
+\p\r
<<results='asis'>>=\r
xtable(anova(fm3))\r
@\r
xtable(summary(npk.aov))\r
@\r
\r
+\newpage\r
+\r
+\p\r
<<results='asis'>>=\r
## Alternative multistratum model\r
op <- options(contrasts = c("contr.helmert", "contr.treatment"))\r
xtable(npk.aovE)\r
@\r
\r
+\p\r
<<results='asis'>>=\r
xtable(summary(npk.aovE))\r
@\r
xtable(lm.D9)\r
@\r
\r
+\p\r
<<results='asis'>>=\r
xtable(anova(lm.D9))\r
@\r
\r
+\newpage\r
+\r
\subsection{More glm}\r
<<results='asis'>>=\r
## Dobson (1990, p. 93) randomized controlled trial\r
xtable(pr1)\r
@\r
\r
+\p\r
<<results='asis'>>=\r
xtable(summary(pr1))\r
@\r
x\r
@\r
\r
+\newpage\r
+\r
\section{Sanitization}\r
<<results='asis'>>=\r
insane <- data.frame(Name = c("Ampersand","Greater than","Less than",\r
function(str) gsub("_", "\\_", str, fixed = TRUE))\r
@\r
\r
+\newpage\r
+\r
\subsection{Markup in tables}\r
Markup can be included in tables, including in column and row names, by using\r
a custom \code{sanitize.text.function}.\r
tli.table\r
@\r
\r
-\p\textbf{\itshape Left aligned strings with column lines}\r
+\subsubsection{Left aligned strings with column lines}\r
<<results='asis'>>=\r
align(tli.table) <- "|rrl|l|lr|"\r
tli.table\r
@\r
\r
-\p\textbf{\itshape Fixed width columns}\r
+\subsubsection{Fixed width columns}\r
<<results='asis'>>=\r
align(tli.table) <- "|rr|lp{3cm}l|r|"\r
tli.table\r
@\r
\r
+\newpage\r
+\r
\subsection{Number of digits}\r
One number for all columns,\r
<<results='asis'>>=\r
tli.table\r
@\r
\r
+\newpage\r
+\r
\subsection{Suppress row names}\r
<<results='asis'>>=\r
tli.table <- xtable(tli[1:10, ])\r
align(tli.table) <- "|rr|lp{3cm}l|r|"\r
@\r
\r
+\newpage\r
+\r
\subsection{Suppress column names}\r
<<results='asis'>>=\r
print(tli.table, include.colnames = FALSE)\r
print(tli.table, include.colnames = FALSE, include.rownames = FALSE)\r
@\r
\r
+\newpage\r
+\r
\subsection{Rotate row and column names}\r
The \code{rotate.rownames} and \code{rotate.colnames} arguments can be used to\r
rotate the row and/or column names. This requires \verb|\usepackage{rotating}|\r
print(tli.table, rotate.rownames = TRUE, rotate.colnames = TRUE)\r
@\r
\r
-\subsection{Horizontal lines}\r
-\p\textbf{\itshape Line locations}\r
+\newpage\r
\r
+\subsection{Horizontal lines}\r
+\subsubsection{Line locations}\r
Use the \code{hline.after} argument to specify the position of the\r
horizontal lines.\r
\r
print(xtable(anova(glm.D93)), hline.after = c(1))\r
@\r
\r
-\p\textbf{\itshape Line styles}\r
-\r
+\subsubsection{Line styles}\r
Specifying \code{booktabs = TRUE} will generate three line types. By default,\r
when no value is given for \code{hline.after}, a \verb|\toprule| will be drawn\r
above the table, a \verb|\midrule| after the table headings and a\r
%% The column name alignment is off in the following example.\r
%% It needs some revision before exposing it. - CR, 7/2/2012\r
%\r
-%\p\textbf{\itshape Long tables with the header on each page}\r
-%\r
+%\subsubsection{Long tables with the header on each page}\r
%The \code{add.to.row} argument can be used to display the header\r
%for a long table on each page, and to add a "continued" footer\r
%on all pages except the last page.\r
print(x.width, tabular.environment = "tabularx", width = "\\textwidth")\r
@\r
\r
+\newpage\r
+\r
\section{Suppressing printing}\r
By default the \code{print} method will print the \LaTeX\ or HTML to standard\r
output and also return the character strings invisibly. The printing to\r