knitr xtable выделите и добавьте горизонтальные линии для той же строки,

Я использую knitr и xtable для автоматизации моей процедуры отчетности. Я хочу выделить несколько строк таблицы и выделить горизонтальную линию прямо над каждой строкой. Файл.Rnw, который я использую, читает, как показано ниже:

\usepackage{colortbl, xcolor}
\usepackage{longtable}

\begin{document}

<<do_table, results = "asis">>=
library(xtable)
mydf <- data.frame(id = 1:10, var1 = rnorm(10), var2 = runif(10))

print(xtable(mydf), add.to.row = list(pos = list(0,2), command = rep("\\rowcolor[gray]{0.75}",2)),hline.after=c(0,2))
@

\end{document}

Это прекрасно работает, однако таблица, с которой я работаю, должна быть длинной, если я настрою последнюю строку кода на

print(xtable(mydf), add.to.row = list(pos = list(0,2), command = rep("\\rowcolor[gray]{0.75}",2)),hline.after=c(0,2),tabular.environment="longtable",floating=FALSE)

вывод довольно уродливый, и строки не выделены, как ожидалось. Кто-нибудь может знать ответ на этот вопрос?

Спасибо,

Дэвид

3 ответа

Решение

Вы на правильном пути, но я немного запутался: хотите, чтобы выделенные строки были выделены hline а также rowcolor? По моему опыту, один цвет строки выглядит лучше, поэтому я предполагаю, что в моем ответе ниже (но вы можете легко использовать оба, просто добавьте \\hline команда).

В качестве бонуса, весь код ниже предполагает, что вы используете LaTeX booktabs пакет, который дает правильно взвешенные правила (в отличие от хлайна). Честно говоря, я всегда работаю с закладками, и я не мог потрудиться настроить код для использования hline - но если вы предпочитаете hline, замените все \toprule, \midrule а также \bottomrule макросы с \hline,

Похоже, вы упустили тот факт, что для длинных таблиц LaTeX требуется специальный заголовок, и мы должны предоставить его также в качестве элемента для command вектор add.to.row список (это может быть причиной того, что ваша таблица наборов выглядит плохо).

longtable.xheader <-
   paste("\\caption{Set your table caption.}",
     "\\label{tab:setyourlabel}\\\\ ",
     "\\toprule ",
     attr(xtable(mydf), "names")[1],
     paste(" &", attr(xtable(mydf), "names")[2:length(attr(xtable(mydf), "names"))], collapse = ""),
     "\\\\\\midrule ",
     "\\endfirsthead ",
     paste0("\\multicolumn{", ncol(xtable(mydf)), "}{c}{{\\tablename\\ \\thetable{} -- continued from previous page}}\\\\ "),
     "\\toprule ",
     attr(xtable(mydf), "names")[1],
     paste("&", attr(xtable(mydf), "names")[2:length(attr(xtable(mydf), "names"))], collapse = ""),
     "\\\\\\midrule ",
     "\\endhead ",
     "\\midrule ",
     paste0("\\multicolumn{", as.character(ncol(xtable(mydf))), "}{r}{{Continued on next page}}\\\\ "),
     "\\bottomrule \\endfoot ",
     "\\bottomrule \\endlastfoot ",
     collapse = "")

С этим позаботились, идти вперед и print таблица:

print(xtable(mydf), 
      floating = FALSE, % since longtable never floats
      hline.after = NULL, % hline off since I use booktabs
      add.to.row = list(pos = list(-1, 
                               c(0, 2),
                               nrow(xtable(mydf))),
                    command = c(longtable.xheader, 
                                "\\rowcolor[gray]{0.75}\n",
                                "%")), % comments out a spurious \hline by xtable
      include.rownames = FALSE, % depends on your preference
      include.colnames = FALSE, % depends on your preference
      type = "latex", 
      tabular.environment = "longtable",
      % xtable tries to escape TeX special chars, can be annoying sometimes
      sanitize.text.function = function(x){x},
      % not all dashes are meant to be math negative sign, set according to your data
      math.style.negative = FALSE)

Надеюсь, мое использование booktabs в ответе не слишком смутило вас. Продолжай вязать!

Извините, немного оффтоп, но демонстрируем решение только для уценки для простого выделения ячеек / строк:

> mydf <- data.frame(id = 1:10, var1 = rnorm(10), var2 = runif(10))
> library(pander)
> emphasize.strong.rows(c(1, 3))
> pander(mydf)

---------------------------
 id      var1       var2   
----- ---------- ----------
**1** **0.7194** **0.6199**

  2     0.8094     0.1392  

**3** **-1.254** **0.5308**

  4     0.4505     0.8235  

  5    -0.3779     0.7534  

  6    -0.3518     0.3055  

  7     1.759      0.5366  

  8     0.9822     0.9938  

  9     1.549      0.3589  

 10     -1.077     0.5153  
---------------------------

Это может быть преобразовано в LaTeX или PDF напрямую.

Возможно, вам повезет больше, если вы разместите это на латексном форуме. Следует отметить, что xcolor/longtable не совместимы: http://www.ukern.de/tex/xcolor.html.

Другие вопросы по тегам