Печать таблицы LaTeX непосредственно в изображение (PNG или другое)

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

Трубные мечты?


person Brandon Bertelsen    schedule 15.02.2012    source источник


Ответы (5)


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

Если вы можете найти один из них (возможно, 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?

person Spacedman    schedule 15.02.2012
comment
Хорошо, если Hmisc работает в вашей системе, а dvipng включен в ваш TeX, тогда мое решение может сработать... - person Spacedman; 16.02.2012
comment
Я вижу файл DVI в каталоге (не знаком с этим форматом), но не PNG. - person Brandon Bertelsen; 16.02.2012
comment
И я дважды проверил, у меня установлен dvipng с дистрибутивом miktex. - person Brandon Bertelsen; 16.02.2012
comment
В моей системе происходит какая-то странность с путем, но эта концепция работает в целом (если я настрою object$file на то место, где на самом деле находится файл) - person Brandon Bertelsen; 16.02.2012
comment
К вашему сведению, dvi — это исходный выходной формат TeX. В те дни у каждой компании, выпускающей принтеры, был свой собственный язык управления печатью, поэтому TeX выпускал dvi, и все, что вам было нужно, — это dvi-к-чему-либо для каждого принтера. Это менее важно, так как pdflatex сгенерировал pdf без него. - person Spacedman; 16.02.2012
comment
Возможно, dvi.latex был экспортирован во время публикации, но это больше не так, поэтому решение не работает. Так что либо используйте Hmisc:::dvi.latex, либо просто dvi. Я не могу проверить результат, так как у меня нет ни yap, ни dvipng, и я не могу их установить. - person Moody_Mudskipper; 21.02.2018
comment
@Spacedman, у вас есть решение, использующее только то, что поставляется только с пакетами rstudio и R? См. мой последний вопрос: stackoverflow.com/questions/48903882/ - person Moody_Mudskipper; 21.02.2018

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')
person Brent    schedule 15.02.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="")))
}
person Brandon Bertelsen    schedule 16.02.2012
comment
invisible(sys(cmd)), вероятно, должно быть invisible(system(cmd)) - person mzuba; 17.08.2017

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

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")

Экспорт таблицы в png с помощью kableExtra

person hplieninger    schedule 15.05.2019

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

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

person David Webber    schedule 15.02.2012