Цвет яркого цвета Knitr приводит к тому, что вторая таблица в ячейке заголовка строки омрачена
Дорогой парень R xtable и knitr пользователи: я боролся с этой проблемой в течение нескольких дней, и я очень удивлен, что кто-то уже не видел подобного случая. Ваше понимание и помощь приветствуются.
Я использовал xtable для создания двух или более таблиц. Строки в таблицах поочередно окрашены. Первая таблица в порядке. Но, начиная со второй таблицы (или более), самая большая ячейка заголовка всегда затемняется.
К сожалению, это очень воспроизводимо. После первой приятной таблицы я всегда получал точно такой же загорелый заголовок. Вот коды для его воспроизведения:
\documentclass{article}
\usepackage{booktabs}
\usepackage{colortbl, xcolor}
\begin{document}
<<echo=TRUE,results='asis'>>=
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
mydata <- data.frame(employee, salary)
rws <- seq(1, (nrow(mydata)), by = 2)
col <- rep("\\rowcolor[gray]{0.90}", length(rws))
library(xtable)
print(xtable(mydata, caption="Test"), booktabs = TRUE,
include.rownames = FALSE, caption.placement = "top",
sanitize.colnames.function = identity,
add.to.row = list(pos = as.list(rws), command=col))
print(xtable(mydata, caption="Test"), booktabs = TRUE,
include.rownames = FALSE, caption.placement = "top",
sanitize.colnames.function = identity,
add.to.row = list(pos = as.list(rws), command=col))
@
\end{document}
Вывод:
![xtable output]()
И мой sessionInfo() выглядит следующим образом:
> sessionInfo()
R version 3.0.1 (2013-05-16)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] digest_0.6.3 evaluate_0.4.7 formatR_0.9 knitr_1.4.1 stringr_0.6.2 tools_3.0.1
Ответы
Ответ 1
Легко исправить: просто измените nrow(mydata)
на nrow(mydata) - 1
, и вы больше не увидите черную ячейку.
Основная проблема здесь довольно тонкая: у вас есть 3 строки, а seq(1, nrow(mydata), by = 2)
дает вам c(1, 3)
, тогда вы сообщаете xtable
добавить \rowcolor[gray]{0.90}
после первой и третьей строки, которая генерирует таблицу ниже
\begin{tabular}{lr}
\toprule
employee & salary \\
\midrule
John Doe & 21000.00 \\
\rowcolor[gray]{0.90}Peter Gynn & 23400.00 \\
Jolie Hope & 26800.00 \\
\rowcolor[gray]{0.90} \bottomrule % <-- the problem is here
\end{tabular}
Таким образом, в конце таблицы есть дополнительная команда \rowcolor[gray]{0.90}
, которая по какой-то причине имеет побочный эффект для следующей таблицы. Решение состоит в том, что после последней строки вы не должны добавлять \rowcolor[gray]{0.90}
, и поэтому вам нужно сгенерировать последовательность от 1 до nrow(data) - 1
вместо nrow(data)
.
Теперь вы должны увидеть ожидаемый результат:
![]()