6

Can I control the add.to.row command in xtable to place an \footnote{} in the LaTeX table output header?

This is how far I've gotten it. (I would like to find a solution using xtable and not `Hmisc')

require(xtable)
x <- matrix(rnorm(60), ncol = 10)
x.big <- xtable(x,label='tabbig', caption='Example of longtable')
names(x.big) <- LETTERS[1:10]
print(x.big,tabular.environment='longtable',floating=FALSE, 
      add.to.row = list(pos = list(seq(1,nrow(x.big), by = 2), 0, 1),
      command = c("\\rowcolor[gray]{.95} ", "\\hline \\endhead ", 
      "\\footnote{This is the first footnote that I would like to have 
      in the headder next to `I'.}") ) )

then I use the output in a small latex file. Like this:

\documentclass{article}
\usepackage{longtable} 
\usepackage{colortbl} 
\usepackage[landscape]{geometry}

\begin{document}
I
\vspace{100 mm}

% latex table generated in R 2.15.1 by xtable 1.7-0 package
% Sun Dec  2 15:38:26 2012
\begin{longtable}{rrrrrrrrrrr}
  \hline
 & A & B & C & D & E & F & G & H & I & J \\ 
  \hline \endhead  \hline
1 & 0.57 & -0.21 & 1.11 & 0.15 & -0.47 & 0.77 & 0.26 & 2.08 & 0.65 & -1.62 \\ 
   \rowcolor[gray]{.95}  \footnote{This is the first footnote that I would like to have in the headder next to `I'.}2 & -0.45 & -0.06 & 0.13 & 0.20 & 0.26 & 0.48 & 0.07 & 0.45 & -0.51 & 1.26 \\ 
  3 & -0.23 & -0.68 & 0.17 & -0.92 & -0.44 & -0.43 & -0.63 & 1.84 & 0.08 & 1.21 \\ 
   \rowcolor[gray]{.95} 4 & -1.60 & -0.69 & -0.11 & 2.12 & -0.12 & -1.81 & -1.51 & 0.67 & 0.22 & 0.43 \\ 
  5 & -0.26 & 0.14 & 0.86 & -0.78 & -2.04 & 1.17 & -1.48 & -0.38 & 0.80 & 1.49 \\ 
   \rowcolor[gray]{.95} 6 & -0.53 & -0.43 & -0.84 & 0.06 & -0.87 & 1.13 & -0.56 & 0.30 & -0.96 & 1.75 \\ 
   \hline
\hline
\caption{'Example of longtable'}
\label{tabbig}
\end{longtable}

\end{document}

This produces this table,

table01

agstudy
  • 119,832
  • 17
  • 199
  • 261
Eric Fail
  • 8,191
  • 8
  • 72
  • 128

1 Answers1

6

I think you can't manipulate the header using the add.to.row argument.

But why not to sanitize?

Here my solution : The idea is to put a tag in the header (footnote here) and to change it using sanitize option.

x <- matrix(rnorm(60), ncol = 10)
x.big <- xtable(x,label='tabbig', caption='Example of longtable')
names(x.big) <- LETTERS[1:10]
names(x.big)[9] <- paste('I','footnote')    # I put the tag on I letter 
print(x.big,tabular.environment='longtable',floating=FALSE,
      sanitize.text.function=function(str)gsub("footnote","\\footnote{my tricky footnote !!}",str,fixed=TRUE))

You can easily extend the solution to many footnots by using many tags.

enter image description here

Update , case of multiple footnote

You can easily use thes ame trick for multiple notes, like this :

names(x.big)[1] <- paste('A','footnote1')    # I put the tag on A letter 
names(x.big)[9] <- paste('I','footnote2')    # I put the tag on I letter 
print(x.big,floating=FALSE,
      sanitize.text.function=function(str){
        str <- gsub("footnote1","\\footnote{my tricky footnote 1 !!}",str,fixed=TRUE)
        str <- gsub("footnote2","\\footnote{my tricky footnote 2 !!}",str,fixed=TRUE)
      }
        )

The idea is to assign the same string after the regular expression substitution.

agstudy
  • 119,832
  • 17
  • 199
  • 261
  • Does anyone know a smart way to resolve the conflict between `\footnote{}` and `\endhead`? – Eric Fail Dec 03 '12 at 18:01
  • @Eric it is better to ask a real question , isn't it? – agstudy Dec 03 '12 at 18:03
  • you are right. Though I did solve it with `\footnotemark` and `\footnotetext` as described in the [longtable manual, p. 8](http://www.cs.brown.edu/system/software/latex/doc/longtable.pdf). Also, [described here](http://www.latex-community.org/forum/viewtopic.php?f=5&t=558). – Eric Fail Dec 03 '12 at 19:43
  • 1
    Great! This also works in Lyx. I pasted my lyx file there: [sanitizefootnote.lyx](https://gist.github.com/paul4forest/064c778714f6fff952be). – Paul Rougieux Nov 19 '15 at 09:18
  • 1
    @agstudy How do you extend the solution to many footnotes? I tried using two sets of `gsub` functions in the `sanitize.text.function` but that didn't work. – meenaparam Aug 21 '17 at 16:40
  • @agstudy I just tried your solution with the sample code, and the footnotes don't actually appear. The footnote superscript numbers appear by the "A" and "I" in the table, but not the "my tricky footnote 1 !!" and "my tricky footnote 2 !!" text. Any thoughts? I can post a separate question if that's easier. – meenaparam Aug 22 '17 at 08:37
  • @agstudy I made a separate question here: https://stackoverflow.com/questions/45813247/show-multiple-footnotes-in-xtable – meenaparam Aug 22 '17 at 09:03