2015-08-28 8 views
4

Я новичок в knitr, и у меня были некоторые базовые знания латекса в прошлом, поэтому я googled уже надеялся найти решение, которое уже было опубликовано где-то , Однако я не смог решить свою проблему. Я надеюсь, что кто-то будет достаточно любезен, чтобы помочь.Longtable in knitr (PDF) document: using xtable (или kable)

У меня есть кадр данных из 14 столбцов и много строк, скажем 60. Используя данные, мне нужно создать отчет в формате PDF в ландшафтном макете и представить этот фрейм данных в виде таблицы.

Ближайшее решение, которое я нашел здесь на tex.stackexchange.com: LaTex Longtable spanning several pages

я использовал некоторые из подсказок там. Однако таблица не установлена ​​должным образом. Крайний правый столбец (-ы) отсекаются на правом краю страницы. В конце таблицы нет слова «Продолжить» в конце страницы. Я размещаю свой код и картинку здесь.

Я нахожусь после решения, чтобы правильно разместить на странице долгожданные вещи, если мне не хватает ничего очевидного, пожалуйста, не стреляйте :) Я действительно новичок в этом.

\documentclass[a4paper, landscape]{article} 
\usepackage[a4paper, margin=1in, hmarginratio=1:1, landscape]{geometry} 
\usepackage{longtable} 
\usepackage{graphicx} 
\usepackage{xcolor} 
\definecolor{myblue}{RGB}{24,57,121} 
\usepackage{lipsum} 
\usepackage{booktabs} 
\usepackage{colortbl} 
\usepackage{array} 
\usepackage{rotating} 
\usepackage{fancyhdr} 
\pagestyle{fancy} 
\fancyhead{} 
\fancyfoot{} 
\renewcommand{\headrulewidth}{0.5pt} 
\setlength\headheight{40mm} 
\begin{document} 
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}} 
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}} 
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}} 
\renewcommand*{\arraystretch}{1.0} 
% 
\section{My Long Table} 
%\begin{center} 
%\begin{small} 
%\setlongtables 
%\begin{longtable} 
<<echo=FALSE, eval=TRUE, results='asis'>>= 
library(knitr) 
library(xtable) 
df <- data.frame(replicate(13, sample(1000000:9000000, 60,replace=TRUE))) 
df$Sum <- rowSums(df) 
totals <- colSums(df) 
df <- rbind(df, totals) 
names(df) <- c("Jan 2014", "Feb 2014", "Mar 2014", "Apr 2014", "May 2014", "Jun 2014", "Jul 2014", 
      "Aug 2014", "Sep 2014", "Oct 2014", "Nov 2014", "Dec 2014", "Jan 2015", "Sum") 
# 
dtable <- xtable(x = df) 
print (dtable 
      #, table.placement = "H" 
      , table.placement = "!htp" 
      , caption.placement = "top" 
      , include.rownames = TRUE 
      , include.colnames = TRUE 
      , size = "footnotesize" 
      , tabular.environment = 'longtable' 
      , floating = FALSE 
      #, scalebox = 0.7 
      #, width = 0.8 
      , add.to.row = list(pos = list(0),command = 
        paste("\\hline \\endfirsthead" ,       # First caption 
        "\\caption[]{My Caption should be here} \\label{tab:The Table} \\\\ \\hline", # Additional captions 
        paste("&", names(df), collapse=" "), 
        "\\\\ \\hline ", 
        "\\endhead", 
        "\\hline \\multicolumn{11}{r}{\\textit{Continued}} \\      
        \\endfoot 
        \\endlastfoot",collapse=" "))) 
@ 
%\end{longtable} 
%\end{small} 

%\end{center} 
\end{document} 

enter image description here enter image description here

ответ

1

Я думаю, что в принципе решить эту проблему в версии Dev из kableExtra.

library(knitr) 
library(kableExtra) 
kable(df, "latex", longtable = T, booktabs = T) %>% 
    kable_styling(latex_options = c("repeat_header"), font_size = 7) %>% 
    landscape() 

так longtable не поддерживает resizebox, вы не можете использовать опцию "scale_down" в latex_options. Я попытался уменьшить размер шрифта до 7, и он выглядит довольно хорошо.