2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Как преобразовать dvi в изображение?
Сообщение06.04.2015, 16:42 
Подключил пакет tikz. Успешно генерируется dvi файл. Но при конвертации его с помощью dvipng все зависает почему-то.

Почему это может происходить?

Какими иными способами (возможно, с промежуточными форматами), можно конвертировать dvi в изображение?

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 13:54 
Самое простое — это вывести полученный DVI на экран и использовать программу для screen capture, например, кнопку PrtScrn, чтобы сохранить показанное изображение как картинку. В любом случае я бы не связывался с DVI, а использовал pdflatex.

Можно подключить пакет

\usepackage[active,tightpage]{preview}

и заключить окружение tikzpicture в окружение preview. Тогда pdflatex сгенерирует один файл PDF с картинкой. Его можно конвертировать в PNG, например, с помощью GhostView или ImageMagick (хотя, по-моему, ImageMagick тоже внутри использует GhostView). Например, командная строка для GhostView такая (по крайней мере в Линуксе):

gs -sDEVICE=pngmono -r120 -o file.png file.pdf

Вместо pngmono (черно-белый) можно использовать pnggray (серый) или png16m (цветной). Опция -r задает разрешение.

Можно, конечно, конвертировать PDF в PNG в графическом редакторе, например, в GIMP. Но опять, самое простое — это захват экрана.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 15:31 
Мне все это надо делать скриптом, так что кнопки и редакторы не подходят.

Значит, можно с помощью pdflatex конвертировать tex сразу в pdf, а потом с помощью gs pdf в png?

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 15:42 
ellipse в сообщении #1001188 писал(а):
Значит, можно с помощью pdflatex конвертировать tex сразу в pdf, а потом с помощью gs pdf в png?
Да, скриптом я бы так сделал. Если есть вопросы по gs, попробую ответить.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 17:51 
А получится делать маленькие прозрачные картинки, размером с формулу, без лишних полей?

Сначала надо разобраться, как создать pdf.

У меня texlive и в нем вроде нет gs, есть только приложения, названия которых начинаются с ps. Его нужно отдельно устанавливать? Интересно, есть ли он для Debian. :roll:

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 18:40 
ellipse в сообщении #1001247 писал(а):
А получится делать маленькие прозрачные картинки, размером с формулу, без лишних полей?
Если сказать в преамбуле
Код:
\usepackage[active,tightpage,pdftex,textmath]{preview}

то pdflatex создает файл PDF, где на каждой странице есть одна строчная формула без полей. Можно также дать опцию displaymath для выделенных формул, но тогда у них будет слева поле, поскольку эти формулы центрированы. См. http://tex.stackexchange.com/questions/ ... ew-package о некоторых методах, как убрать это поле.

Можно также использовать окружение preview: все, что туда включено, будет также отдельной страницей в PDF.

Чтобы каждая страница генерировала отдельный PNG, можно дать gs опцию -o output-%02d.png или -o counter-%d.png. Есть также опции -dFirstPage=1 -dLastPage=25. Чтобы белый цвет заменить на прозрачный, я обычно пользуюсь ImageMagick:
Код:
convert -transparent white input.png output.png

или
Код:
mogrify -transparent white input.png

(изменяет сам файл, а не генерирует новый).

ellipse в сообщении #1001247 писал(а):
Сначала надо разобраться, как создать pdf.
pdflatex должен включаться в базовых дистрибутив texlive. В Ubuntu он входит в пакет texlive-latex-base.

ellipse в сообщении #1001247 писал(а):
У меня texlive и в нем вроде нет gs, есть только приложения, названия которых начинаются с ps. Его нужно отдельно устанавливать? Интересно, есть ли он для Debian.
Конечно, есть в Debian. В Ubuntu gs входит в пакет ghostscript.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 21:38 
выполнил pdflatex my123.tex
получил pdf файл my123.pdf

далее
gswin32 -q -sDEVICE=png256 -r120 -sOutputFile=my123.png my123.pdf

появляется окно:

>>showpage, press <return> to continue<<

при нажатии клавиши, появляется приглашение к вводу
CS>

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 21:58 
При появлении приглашения можно набрать quit. Чтобы окно не возникало, используйте опции -dBATCH -dNOPAUSE. Но лучше пользоваться опцией -o file.png, которая эквивалентна -sOutputFile=file.png -dBATCH -dNOPAUSE. См. документацию на английском здесь (по опциям) и здесь (по форматам), а также здесь (ссылки на все). В Ubuntu документация содержится в пакете ghostscript-doc.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 22:39 
Цитата:
Чтобы каждая страница генерировала отдельный PNG
Мне разбиение на страницы не нужно. 1 формула - 1 файл.

Получился рисунок, только размером со страниу А4, на которой еле-еле видно маленькую формулу.

Цитата:
Если сказать в преамбуле
Код:
\usepackage[active,tightpage,pdftex,textmath]{preview}

то pdflatex создает файл PDF, где на каждой странице есть одна строчная формула без полей.
Если это добавляю, получается ошибка:
Цитата:
(d:/Server/texlive/2014/texmf-dist/tex/generic/xypic/xymatrix.tex
! Use of \stripRCS doesn't match its definition.
<argument> \stripRCS $
Revision: 3.14 $
l.26 ...Box 704, Yorktown Heights, NY 10598 (USA)}

?
! Emergency stop.
<argument> \stripRCS $
Revision: 3.14 $
l.26 ...Box 704, Yorktown Heights, NY 10598 (USA)}

End of file on the terminal!

Если указать \usepackage[active,tightpage]{preview}, то ошибки нет, но и pdf файл не создается.

Посмотрел исходники mathtex. Там используются такие программы:
/usr/share/texmf/bin/latex
/usr/share/texmf/bin/pdflatex
/usr/share/texmf/bin/dvipng
/usr/share/texmf/bin/dvips
/usr/bin/ps2epsi
/usr/bin/convert

В каких комбинациях они могут использоваться?
Может есть другие хорошие пути преобразования dvi в png.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 23:16 
ellipse в сообщении #1001391 писал(а):
Мне разбиение на страницы не нужно. 1 формула - 1 файл.
Если в LaTeX файле есть \usepackage[active,tightpage]{preview}, то pdflatex генерирует один PDF файл. В нем содержатся все рисунки (формулы или другие вещи), каждый на отдельной странице. Размеры страниц соответствуют размерам рисунка и все разные. Затем одна команда gs генерирует из каждой страницы PDF файла один файл PNG.

Какие рисунки включаются в PDF? Во-первых, содержимое окружений \begin{preview}...\end{preview}. Во-вторых, если указана опция textmath к пакету, то все строчные формулы. В-третьих, если указана опция displaymath к пакету, то все выделенные формулы. Есть еще опции для секций, для \includegraphics и т.д., и можно задавать, какие команды и окружения экспортировать в PDF; для этого см. документацию к пакету. У вас PDF файл не создавался, видимо, потому, что не было ни опций textmath и displaymath, ни окружений preview.

Без опции tightpage все равно будет одна формула/рисунок на странице, но все страницы будут размера А4.

Что касается ошибки, попробуйте для начала не использовать пакет xypic. Опция pdftex к preview также не обязательна, пакет должен догадаться сам.

Если все равно не получается, попробуйте сделать минимальный работающий пример (minimum working example) и запостить сюда.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение08.04.2015, 01:00 
Еще мне нужно узнавать смещение от базовой линии depth и высоту height.

Сейчас я это делаю так:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[12pt]{article}
\usepackage{ucs}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts, amssymb}
\usepackage{amsthm}
\usepackage{mathrsfs}
\usepackage{color}
\usepackage[matrix,arrow,curve,frame,poly,arc]{xy}
\usepackage[final]{graphicx}
\usepackage{pst-plot}
\pagestyle{empty}
\setlength{\parindent}{0pt}
\newlength{\mywidth}
\newlength{\myheight}
\newlength{\mydepth}
\newsavebox{\mybox}
\begin{lrbox}{\mybox}
$\displaystyle \left | B \right | \le \left | A \right |$
\end{lrbox}
\settowidth {\mywidth}  {\usebox{\mybox}}
\settoheight{\myheight} {\usebox{\mybox}}
\settodepth {\mydepth}  {\usebox{\mybox}}
\newwrite\foo
\immediate\openout\foo=\jobname.sizes
\immediate\write\foo{\the\myheight}
\immediate\write\foo{\the\mydepth}
\closeout\foo
\begin{document}
\usebox{\mybox}
\end{document}

Как лучше это организовать в предлагаемом случае? Может режим preview позволяет узнавать параметры более простым способом?

-- Ср апр 08, 2015 02:19:08 --

Получилось. Но качество не очень.

Так в pdf выглядит
Изображение

а так после gs при r160
Изображение

при r600 лучше, но есть зернистость
Изображение

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение08.04.2015, 15:27 
Чтобы не было зернистости, используйте опцию -dTextAlphaBits=4 для gs. Есть также опция -dGraphicsAlphaBits=4 для графики. При этом нужно -sDEVICE=pnggray, а не pngmono. Можно, наверное, задать gs разрешение больше, чем нужно, а затем грамотно его понизить (oversampling), но я про это мало знаю.

Чтобы напечатать размеры боксов, есть опция showbox у пакета preview. Она печатает в .log файл размеры всех боксов, посылаемых на выход. У меня она генерирует ошибки при компиляции, но размеры печатает. Можно также использовать команду \showbox вручную (она тоже выдает ошибки), например:
Код:
\showboxbreadth=100
\showboxdepth=10
\newsavebox{\mybox}
\savebox{\mybox}{$(a+b)^n$}
\showbox\mybox

Предварительно нужно повысить параметры, отвечающие за максимальные печатаемые длину и вложенность боксов. В .log файле будет запись \hbox(7.5+2.5)x35.02081. Здесь 7.5 — высота, 2.5 — глубина и 35.02081 — ширина в пунктах. Подробнее про \showbox можно прочитать в учебнике Кнута TeXbook.

На всякий случай, если вы хотите реализовать перевод вывода ЛаТеХа в HTML или еще куда-нибудь, то эта задача уже решена. :-) Например, пакет preview используется в Emacs'овском пакете AUCTeX, чтобы показывать формулы прямо в редакторе.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение08.04.2015, 22:24 
Цитата:
Чтобы не было зернистости, используйте опцию -dTextAlphaBits=4 для gs. Есть также опция -dGraphicsAlphaBits=4 для графики. При этом нужно -sDEVICE=pnggray, а не pngmono.
Спасибо, получилось. Поставил png256 - даже графику цветную рисует :-)

Изображение

Изображение

Цитата:
Чтобы напечатать размеры боксов, есть опция showbox у пакета preview.
Не хочу ошибки и лог парсить не охота. А \begin{preview}...\end{preview} это блок с именем preview? Может с него можно мерки снять как в моем примере с \mybox так: \settowidth {\mywidth}{\usebox{preview}}?

Цитата:
На всякий случай, если вы хотите реализовать перевод вывода ЛаТеХа в HTML или еще куда-нибудь, то эта задача уже решена.
Даже если понадобится, буду изобретать свои велосипеды :wink:

-- Ср апр 08, 2015 23:32:31 --

Не получается как блок использовать.
Попробовал так:
Используется синтаксис LaTeX
\sbox{preview} {
$\displaystyle x+1$
}

Выдает ошибку
Цитата:
! Missing number, treated as zero.
<to be read again>
p
l.25 $\displaystyle x+1$ }


-- Ср апр 08, 2015 23:39:05 --

Так ошибки нет, но и файл .sizes не создается
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\newlength{\mywidth}
\newlength{\myheight}
\newlength{\mydepth}
\begin{document}
\begin{preview}
$\displaystyle x+3$
\end{preview}
\end{document}
\settowidth {\mywidth}  {\usebox{preview}}
\settoheight{\myheight} {\usebox{preview}}
\settodepth {\mydepth}  {\usebox{preview}}
\newwrite\foo
\immediate\openout\foo=\jobname.sizes
\immediate\write\foo{\the\myheight}
\immediate\write\foo{\the\mydepth}
\closeout\foo

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение08.04.2015, 22:43 
ellipse в сообщении #1001758 писал(а):
А \begin{preview}...\end{preview} это блок с именем preview? Может с него можно мерки снять как в моем примере с \mybox так: \settowidth {\mywidth}{\usebox{preview}}?
Нет, preview — это окружение, которое, насколько я знаю, напрямую не связано с блоками. Может быть, там внутри создается блок из содержимого, не знаю. Можете сначала создать блок и снять с него мерки, а затем написать \begin{preview}\usebox{\mybox}\end{preview}. На самом деле, окружение preview добавляет границу шириной \PreviewBorder (изменять через \setlength), которая по умолчанию равна 0.5bp, т.е. пол-PostScript-овского пункта.

Все, что после \end{document}, игнорируется.

 
 
 
 Re: Как преобразовать dvi в изображение?
Сообщение08.04.2015, 22:48 
Интересно, latexpdf+gs не намного больше ресурсов потребляют, чем latex+dvipng. Если разница есть, можно сделать так: если графика, то конвертируем с помощью latexpdf+gs, иначе latex+dvipng.

-- Ср апр 08, 2015 23:58:03 --

Цитата:
На самом деле, окружение preview добавляет границу шириной \PreviewBorder (изменять через \setlength), которая по умолчанию равна 0.5bp, т.е. пол-PostScript-овского пункта.
Да, заметил, что есть лишняя рамочка. Убрал. Хорошо, что подсказали.

-- Чт апр 09, 2015 00:07:23 --

Засек время выполнения процессов. latexpdf работает также или иногда чуть дольше, чем latex, но gs работает раза в 2-3 быстрее, чем dvipng. Почему же считается, что с dvipng быстрее. Хотя, может я неправильно замеряю.

-- Чт апр 09, 2015 00:11:44 --

Цитата:
Можете сначала создать блок и снять с него мерки, а затем написать \begin{preview}\usebox{\mybox}\end{preview}
Проблема в том, что если блоки align, flalign, equation, eqnarray поместить внутрь блока \mybox, то получается ошибка. Приходится определять, когда можно вкладывать, а когда нет. Хотелось бы найти универсальный способ.

-- Чт апр 09, 2015 00:19:19 --

Сглаживание работает только при -sDEVICE=pnggray, но при этом нельзя делать цветное. При -sDEVICE=png256 цветное, но не работает сглаживание :?

 
 
 [ Сообщений: 16 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group