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.