Форматирование таблиц Sweave, две проблемы - PullRequest
4 голосов
/ 03 ноября 2011

Я борюсь с двумя проблемами форматирования в Sweave.Один из них - курсив текста в таблице, второй - как добавить строку суммирования столбцов в нижней части таблицы.Пожалуйста, смотрите следующие MWE для деталей.

\documentclass[12pt,letterpaper,oneside]{amsart}
\usepackage{graphicx}
\usepackage{longtable}
\SweaveOpts{keep.source=TRUE}        % Keeps comments in the R code.
% 
\begin{document}
% \maketitle
\section*{The Challenge}
    Italicize the taxa in the following table and add a row at the bottom which gives the sum of the sites column.

<<echo=TRUE>>=
# Creating Data
taxa <- c("Arabidopsis thaliana",
    "Populus trichocarpa",
    "Brachypodium distachyon")
sites <- c(270,320,240)
data.df <- data.frame(taxa,sites)
@
~
<<label=tab1,echo=TRUE,results=tex>>=
# Creating Table
library(xtable)
data.table <- xtable(data.df,
    caption="Sweave Output")
print(data.table,
    caption.placement="top")
@

    The results should look something like table 2, which was hand coded in \LaTeX.
\begin{table}[ht]
    \caption{Manually coded \LaTeX}
    \begin{tabular}{l l r}
        \hline
          & taxa & sites \\
        \hline
        1 & \emph{Arabidopsis thaliana}     & 270 \\
        2 & \emph{Populus trichocarpa}      & 320 \\
        3 & \emph{Brachypodium distachyon}  & 240 \\    
        \hline
          & Total Sites                     & 830 \\
        \hline
    \end{tabular}   
\end{table}
\end{document}

1 Ответ

4 голосов
/ 03 ноября 2011

Добавьте \emph вручную с помощью paste и добавьте новую строку с помощью rbind, установив имя новой строки в один пробел. Кроме того, используйте stringsAsFactors=FALSE при создании исходного фрейма данных, чтобы сделать возможным добавление нового значения в столбец таксонов.

Затем используйте sanitize.text.function=identity, чтобы xtable сохранял обратную косую черту в команде \emph, и hline.after, чтобы получить строки, где вы хотите их.

\documentclass[12pt,letterpaper,oneside]{amsart}
\usepackage{graphicx}
\usepackage{longtable}
\SweaveOpts{keep.source=TRUE}  % Keeps formatting of the R code.
\begin{document}
<<echo=TRUE>>=
taxa <- c("Arabidopsis thaliana",
          "Populus trichocarpa",    
          "Brachypodium distachyon")
sites <- c(270,320,240)
data.df <- data.frame(taxa,sites, stringsAsFactors=FALSE)
@
~
<<label=tab2, echo=TRUE, results=tex>>=
library(xtable)
data.df$taxa <- paste("\\emph{",taxa,"}", sep="")
data.df <- rbind(data.df, ` `=c("Total Sites", sum(data.df$sites)))
data.table <- xtable(data.df,
                     caption="Sweave Output")
print(data.table, 
      caption.placement="top", 
      sanitize.text.function=identity, 
      hline.after=c(-1,0,nrow(data.df)-1, nrow(data.df)))
@
\end{document}
...