Напечатайте таблицу LaTeX непосредственно на изображение (PNG или другое) - PullRequest
11 голосов
/ 15 февраля 2012

Есть ли способ напечатать изнутри R таблицу LaTeX непосредственно в файл изображения (для включения в другой документ / веб-страницу).По сути, я хотел бы предоставить код LaTeX для функции, которая сохраняет его как изображение в рабочем каталоге.

Труба мечты?

Ответы [ 5 ]

7 голосов
/ 15 февраля 2012

Существуют различные сценарии преобразования LaTeX-to-Image, предназначенные для конвертации уравнений в изображения для включения в веб-страницы.

Если вы можете найти один из них (возможно, dvipng?), Тогда вы можетедостаточно просто перейти из таблицы в R в LaTeX, а затем из LaTeX в png.

Если у вас есть dvipng, вы можете использовать латексные преобразования Hmisc, чтобы сделать более аккуратную функцию для этого:

dvipng.dvi <-
  function (object, file, ...) 
{
  cmd <- if (missing(file)) 
    paste("dvipng -T tight", shQuote(object$file))
  else paste("dvipng -T tight", "-o", file, shQuote(object$file))
  invisible(sys(cmd))
}

И тогда вы можете сделать:

> tt   # here is a table
   y
x    1  2  3
  1  9 12 11
  2 18  9 10
  3 10  7 14
> dvipng.dvi(dvi.latex(latex(tt)))

И это создаст файл png со случайным именем в рабочем каталоге.Опция -T сжатый обрезает все пустое пространство вокруг него.

Это настолько прямолинейно, насколько я могу себе представить.

Linux, Windows, Mac или Atari?

5 голосов
/ 15 февраля 2012

xtable предоставляет возможность вывода разметки из латекса или html.Вы можете вставить html напрямую.

Сказав, что я тоже хотел бы иметь возможность перейти непосредственно от трикотажа или свива к png или svg.Я пытался сделать это только на прошлой неделе.Я создаю инфографику inkscape (svg) и ищу способ вставить связанное изображение таблицы, которая обновляется с помощью кода R.

В начальном тестировании я объединил использование xtable и Spacedman (+1) код для получения приятного вывода png (Ubuntu).Опция -D позволяет управлять разрешением.

Я смотрю в конвертер dvi-> svg, который больше похож на то, что мне нужно.http://dvisvg.sourceforge.net/

dvipng.dvi <- function (object, file, res=600)
{
    if (missing(file)){
        invisible(sys(
                paste("dvipng -T tight", "-D", res, shQuote(object$file)))
            )
}
    else{
        invisible(sys(
                paste("dvipng -T tight", "-D", res, "-o", file, shQuote(object$file)))
            )
    }
}

tt <- head(iris)

dvipng.dvi(dvi.latex(latex(xtable(tt))), file='iris.png')
3 голосов
/ 17 февраля 2012

С ответом Spaceman я смог найти решение, которое не полагается на latex из пакета Hmisc, поскольку latex вызывало у меня некоторые проблемы с путями:

table.png <- function(obj, name) { 
first <- name
name <- paste(name,".tex",sep="")
sink(file=name)
cat('
\\documentclass{report}
\\usepackage[paperwidth=5.5in,paperheight=7in,noheadfoot,margin=0in]{geometry}
\\begin{document}\\pagestyle{empty}
')
print(xtable(obj))
cat('
\\end{document}
')
sink()
texi2dvi(file=name)
cmd <- paste("dvipng -T tight", shQuote(paste(first,".dvi",sep="")))
invisible(sys(cmd))
cleaner <- c(".tex",".aux",".log",".dvi")
invisible(file.remove(paste(first,cleaner,sep="")))
}
0 голосов
/ 15 мая 2019

Пакет kableExtra позволяет создавать красивые и персонализированные таблицы через LaTeX или HTML. Он также имеет функцию для экспорта таких автономных таблиц, например, в PNG или PDF через Webshot. Вот пример:

library(kableExtra)
knitr::kable(mtcars[1:6, 1:5], "latex", booktabs = TRUE, linesep = "") %>% 
    kable_styling(full_width = TRUE, font_size = 12) %>% 
    column_spec(1, width = "4cm") %>% 
    save_kable(file = "table.png")

Export table to png using kableExtra

0 голосов
/ 15 февраля 2012

У меня нет хорошего ответа, который включает использование R, но если бы вы были в отчаянии, я полагаю, что «экран печати» и копия в Paint или другой такой программе и, наконец, сохранение его, по крайней мере, вы получите изображение в сохраняемый формат.

Я создавал пошаговую пользовательскую документацию таким образом, когда другие опции были недоступны.

...