Изменение цвета отрицательных чисел на красный в таблице, сгенерированной с помощью xtable ()?
Я пишу отчет в R с knitr. Я использую xtable() для создания таблиц в отчете. Одна из моих таблиц включает как отрицательные, так и положительные числа. Я бы хотел изменить цвет отрицательных чисел на красный. Как я могу это сделать? Очевидно, что одним из простых решений является изменение кода latex, который генерирует xtable, но обратите внимание, что у меня есть автоматический отчет, что числа могут меняться с новыми наборами данных, и я не хочу вручную устанавливать цвета.
вот простой код:
documentclass{article}
begin{document}
<<simpleExamp, results=tex, echo=FALSE>>=
library(knitr)
library(xtable)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
xtable(testMatrix)
@
end{document}
Как я могу сделать отрицательные числа красными? Спасибо за помощь.
2 ответов
можно использовать capture.output()
для захвата строк, напечатанных (неявным) вызовом print.xtable()
. Тогда примените gsub()
к выходу, используя шаблон и замену, которые окружают каждое отрицательное число с \textcolor{red}{}
. Наконец, используйте cat()
С sep="\n"
чтобы записать измененные строки в .
\documentclass{article}
\begin{document}
<<simpleExamp, results="asis", echo=FALSE>>=
library(knitr)
library(xtable)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
## I added the following three lines
xt <- capture.output(xtable(testMatrix))
xt_mod <- gsub("(\s|^)(-\d*)", "\1\\textcolor{red}{\2}", xt)
cat(xt_mod, sep="\n")
@
\end{document}
(обратите внимание, что Я заменил results=tex
С results="asis"
, который knitr 'предпочитает' и что он будет быстрее процесс.)
Edit: добавление изображения результирующей таблицы. (Получение его в готовом виде потребовало нескольких настроек кода, которые также включены ниже.)
\documentclass{standalone}
\renewenvironment{table}{}{}% Ignore `table` environment in standalone mode.
\begin{document}
<<simpleExamp, results="asis", echo=FALSE>>=
library(knitr)
library(xtable)
cat("\Huge\n\n")
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)
## I added the following three lines
xt <- capture.output(print.xtable(xtable(testMatrix), table.placement=NULL))
xt_mod <- gsub("(\s|^)(-\d*)", "\1\\textcolor{red}{\2}", xt)
cat(xt_mod, sep="\n")
@
\end{document}
скопировал ответ Джоша О'Брайена с небольшой настройкой, чтобы покрасить таблицу десятичными знаками:
\documentclass{article}
\begin{document}
<<simpleExamp, results="asis", echo=FALSE>>=
library(knitr)
library(xtable)
testMatrix <- matrix(c(sample(-10:10,10)), ncol = 2)*1.1
## I added the following three lines
xt <- capture.output(xtable(testMatrix))
xt_mod <- gsub("(\s|^)(-\d\.\d*)", "\1\\textcolor{red}{\2}", xt)
cat(xt_mod, sep="\n")
@
\end{document}