MacQueen, Don
2016-Nov-03 00:22 UTC
[R] Prevent a table from crossing page boundary using rmarkdown/pandoc
I'm using rmarkdown::render, which executes pandoc, to create a fairly simple document, and I would like to prevent tables from breaking across pages. I've been doing some web-searching but haven't found a solution. In my report's context, the table is so short that breaking it across pages looks shabby, whereas leaving some empty space at the bottom of the page is acceptable. ## this R script creates a reproducible example ## on my installation library(rmarkdown) library(knitr) sink('tmp.Rmd') cat('--- title: A Title output: html_document: toc: yes number_sections: yes word_document: reference_docx: report-template.docx pdf_document: number_sections: yes toc: yes ---\n\n') for (i in 1:65) { cat('ln',i,'\n\n') } mytbl <- data.frame(A=1:5, B=1:5) ## then, within a chunk: print(kable(mytbl)) for (i in 66:70) { cat('ln',i,'\n\n') } sink() render('tmp.Rmd','pdf_document') ## open tmp.pdf and see that the table breaks ## between the first and second pages ## possibly, other latex installations will be different ## (e.g., I have default letter-size paper, A4 will ## be different. Change the 1:65 until the table starts ## two or three lines from the bottom of the page.) An alternative to kable() that has a suitable arg, would be easiest, I suppose. I've looked at pander::pandoc.table without success. Naturally, I'd like the solution to work for word_document as well, but I'd be more than grateful for a pdf solution. It's irrelevant for html output. If it matters, am working in R at a shell command line, not within RStudio. Thanks in advance. -Don -- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062
Duncan Murdoch
2016-Nov-03 09:50 UTC
[R] Prevent a table from crossing page boundary using rmarkdown/pandoc
On 02/11/2016 8:22 PM, MacQueen, Don wrote:> I'm using rmarkdown::render, which executes pandoc, to create a fairly > simple document, and I would like to prevent tables from breaking across > pages. I've been doing some web-searching but haven't found a solution.If you make it into a float, LaTeX will try not to split it. You can do that by specifying the caption arg to kable(). I don't know if you can specify where the float appears or if you're stuck with the default. Duncan Murdoch> > In my report's context, the table is so short that breaking it across > pages looks shabby, whereas leaving some empty space at the bottom of the > page is acceptable. > > > > ## this R script creates a reproducible example > ## on my installation > library(rmarkdown) > library(knitr) > sink('tmp.Rmd') > > cat('--- > title: A Title > output: > html_document: > toc: yes > number_sections: yes > word_document: > reference_docx: report-template.docx > pdf_document: > number_sections: yes > toc: yes > ---\n\n') > > for (i in 1:65) { > cat('ln',i,'\n\n') > } > > > mytbl <- data.frame(A=1:5, B=1:5) > > ## then, within a chunk: > > print(kable(mytbl)) > > for (i in 66:70) { > cat('ln',i,'\n\n') > } > > sink() > > render('tmp.Rmd','pdf_document') > > ## open tmp.pdf and see that the table breaks > ## between the first and second pages > ## possibly, other latex installations will be different > ## (e.g., I have default letter-size paper, A4 will > ## be different. Change the 1:65 until the table starts > ## two or three lines from the bottom of the page.) > > > An alternative to kable() that has a suitable arg, would be easiest, I > suppose. I've looked at pander::pandoc.table without success. > > Naturally, I'd like the solution to work for word_document as well, but > I'd be more than grateful for a pdf solution. It's irrelevant for html > output. > > If it matters, am working in R at a shell command line, not within RStudio. > > Thanks in advance. > -Don > >