Мне нужно вывести несколько .png-файлов всей страницы (на самом деле, мне нужно склеить левую и правую страницы, я сейчас делаю это с помощью imagemagick). Я знаю, что это можно сделать с помощью отдельного класса, но мне нужно сделать это с целыми книгами в классе мемуаров (например,этотодин).
Я мог бы сделать это, получив pdf, а затем используя некоторые утилиты pdf, но мне было интересно, есть ли более эффективные способы сделать это (так как я буду делать это тысячи раз). Ближе всего к идеальному результату я получаю, используя dvipng, используя опцию -T bbox
, которая, к сожалению, оставляет некоторые поля. Есть ли другие варианты, которые работают напрямую с файлом .tex или выходом .dvi?
Для конкретного случая, имея в качестве исходного файла следующее:
\documentclass[smalldemyvopaper,11pt]{memoir}
\usepackage{lipsum}
\begin{document}
\lipsum[1-5]
\end{document}
И затем использование команды dvipng -T 5.675in,8.5in example.dvi
показывает совсем другое изображение, чем ожидалось. 5.675in,8.5in
Часть была взята из мемуарного документа классатаблица 1.3. Обратите внимание, как обрезана и левая часть.
решение1
Если у вас есть к нему доступ, я бы использовал pdftoppm
утилиту, которая является частью poppler
утилит для работы с PDF-файлами.
(Я не совсем понимаю, что вы имели в виду, когда говорили, что левая и правая страницы «склеены».)
Взяв ваш файл примера (который я называю testpng.tex
), я могу запустить
pdflatex testpng.tex
который генерирует страницы как PDF. Затем я запускаю
pdftoppm -png testpng.pdf tpn
( -png
переключатель запрашивает вывод в формате png, а tpn
аргумент задает префикс выходных файлов png) Эта команда генерирует три файла png (так как вы начали с трех страниц в выводе PDF) с именами tpn-1.png
, tpn-2.png
, и tpn-3.png
. Например, вторая страница выглядит так
который, как мне кажется, имеет правильные поля. Вы можете прочитатьстраница руководствачтобы увидеть, что еще он может сделать.
Альтернативой является использование dvipng
инструмента, который, как отметил OP, работает быстрее. Проблема, которую заметил OP, заключается в том, что после указания размера бумаги поля отображаются неправильно.
Это происходит потому, что dvipng
выходные данные основаны на -T
параметре:
- Если
-T bbox
указано , то dvipng выводит изображение, представляющее собой наименьший прямоугольник, включающий- the происхождение dvi(по умолчанию это точка на расстоянии 1 дюйма как по горизонтали, так и по вертикали от верхнего левого угла страницы)
- и все чернила на странице.
- Если
-T tight
указано , то dvipng выводит изображение, представляющее собой наименьший прямоугольник, включающий все чернила на странице. - Если
-T <width>,<height>
выводит изображение, представляющее собой прямоугольник указанного размера,содержимое которого представляет собой прямоугольник такого размера, измеренный относительнопроисхождение dvi(напомню, что это точка, расположенная на расстоянии 1 дюйма от верхнего и левого края бумаги).
Чтобы проиллюстрировать это, рассмотрим следующий источник TeX:
\documentclass{book}
\usepackage{geometry}
\geometry{paperwidth=5in, paperheight=7in, inner=0.4in, outer=2in, top=1.2in, bottom=2in}
\usepackage{lipsum}
\begin{document}
\lipsum[1-5]
\end{document}
Это имеет сильно несбалансированные поля. Если вы используете dvipng -T5in,7in
, то для первых двух страниц вы увидите следующее:
Страница 1:
Страница 2:
Вы видите, что часть текста на странице 1 обрезана, это потому, что внутреннее поле установлено на 0,4 дюйма, что меньше 1 дюйма от края. Вы также можете измерить, если хотите, чтобы обнаружить, что в обоих случаях оставшееся верхнее поле составляет ровно 0,2 дюйма, что означает, что оба номера страниц теперь исчезают.
Чтобы получить всю страницу, как задумано, все, что вам нужно сделать, это сместить начало координат DVI ровно на 1 дюйм по горизонтали и вертикали так, чтобы оно теперь совпадало с верхним левым углом страницы.Обратите внимание, что нетдогадки или глазомерное наблюдениетребуется.Вот результаты для тех же двух страниц с использованием dvipng -T5in,7in -O1in,1in
; обратите внимание, что сильно асимметричные поля соблюдены и в отличие от того, чтоДэвид предложил, то для установки параметра смещения не требуется никаких манипуляций с фактическими полями документа.
Страница 1:
Страница 2: