2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Как преобразовать dvi в изображение?
Сообщение06.04.2015, 16:42 


25/11/08
449
Подключил пакет tikz. Успешно генерируется dvi файл. Но при конвертации его с помощью dvipng все зависает почему-то.

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

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

 Профиль  
                  
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 13:54 


06/06/13
71
Самое простое — это вывести полученный 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 


25/11/08
449
Мне все это надо делать скриптом, так что кнопки и редакторы не подходят.

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

 Профиль  
                  
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 15:42 


06/06/13
71
ellipse в сообщении #1001188 писал(а):
Значит, можно с помощью pdflatex конвертировать tex сразу в pdf, а потом с помощью gs pdf в png?
Да, скриптом я бы так сделал. Если есть вопросы по gs, попробую ответить.

 Профиль  
                  
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 17:51 


25/11/08
449
А получится делать маленькие прозрачные картинки, размером с формулу, без лишних полей?

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

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

 Профиль  
                  
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 18:40 


06/06/13
71
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 


25/11/08
449
выполнил 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 


06/06/13
71
При появлении приглашения можно набрать quit. Чтобы окно не возникало, используйте опции -dBATCH -dNOPAUSE. Но лучше пользоваться опцией -o file.png, которая эквивалентна -sOutputFile=file.png -dBATCH -dNOPAUSE. См. документацию на английском здесь (по опциям) и здесь (по форматам), а также здесь (ссылки на все). В Ubuntu документация содержится в пакете ghostscript-doc.

 Профиль  
                  
 
 Re: Как преобразовать dvi в изображение?
Сообщение07.04.2015, 22:39 


25/11/08
449
Цитата:
Чтобы каждая страница генерировала отдельный 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 


06/06/13
71
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 


25/11/08
449
Еще мне нужно узнавать смещение от базовой линии 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 


06/06/13
71
Чтобы не было зернистости, используйте опцию -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 


25/11/08
449
Цитата:
Чтобы не было зернистости, используйте опцию -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 


06/06/13
71
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 


25/11/08
449
Интересно, 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  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group