Preciso gerar alguns .pngs da página inteira (na verdade, preciso que as páginas esquerda e direita sejam coladas, atualmente estou fazendo isso pelo imagemagick). Estou ciente de que isso pode ser feito com a classe independente, mas preciso fazer isso com livros inteiros na classe de memórias (comoesseum).
Eu poderia fazer isso obtendo o pdf e depois usando alguns utilitários de pdf, mas queria saber se havia maneiras mais eficientes de fazer isso (já que farei isso milhares de vezes). O mais próximo que chego do resultado ideal é usar dvipng, usando a -T bbox
opção, que infelizmente deixa algumas margens de fora. Alguma outra opção que funcione diretamente com o arquivo .tex ou a saída .dvi?
Para um caso específico, tendo como arquivo fonte este:
\documentclass[smalldemyvopaper,11pt]{memoir}
\usepackage{lipsum}
\begin{document}
\lipsum[1-5]
\end{document}
E então usar o comando dvipng -T 5.675in,8.5in example.dvi
mostra uma imagem realmente diferente do que era esperado. A 5.675in,8.5in
parte foi retirada do documento de classe do livro de memóriastabela 1.3. Observe como a parte esquerda também é cortada.
Responder1
Se você tiver acesso a ele, eu usaria o pdftoppm
utilitário que faz parte dos poppler
utilitários para manipulação de arquivos PDF.
(Não tenho certeza do que você quis dizer com ter as páginas esquerda e direita "fixadas".)
Tomando seu arquivo de exemplo (que chamo de testpng.tex
), posso executar
pdflatex testpng.tex
que gera as páginas como PDFs. Então eu corro
pdftoppm -png testpng.pdf tpn
(a -png
opção solicita a saída no formato png e o tpn
argumento define o prefixo dos arquivos png de saída) Este comando gera três arquivos png (desde que você começou com três páginas na saída PDF) chamados tpn-1.png
, tpn-2.png
, e tpn-3.png
. A segunda página, por exemplo, parece
que eu acho que tem as margens corretas. Você pode ler opágina de manualpara ver o que mais ele pode fazer.
Uma alternativa é usar a dvipng
ferramenta, que, como observou o OP, roda mais rápido. O problema observado pelo OP é que após especificar o tamanho do papel, as margens aparecem incorretamente.
Isso ocorre porque como dvipng
as saídas são baseadas no -T
parâmetro:
- Se
-T bbox
for especificado, então dvipng gera uma imagem que é o menor retângulo que inclui- oorigem dvi(que por padrão é o ponto 1 polegada horizontal e verticalmente do canto superior esquerdo da página)
- e toda a tinta da página.
- Se
-T tight
for especificado, dvipng gerará uma imagem que é o menor retângulo que inclui toda a tinta da página. - Se
-T <width>,<height>
gerar uma imagem que é um retângulo com a dimensão especificada,cujo conteúdo é o retângulo daquele tamanho medido em relação aoorigem dvi(que, lembre-se, é o ponto a 1 polegada da borda superior e esquerda do papel).
Para ilustrar isso, considere a seguinte fonte 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}
Isto tem margens fortemente desequilibradas. Se você usar dvipng -T5in,7in
, o que você verá nas duas primeiras páginas será:
Página 1:
Página 2:
Você vê que parte do texto na página 1 está truncada, isso ocorre porque a margem interna está definida como 0,4 pol., Que é menos de 1 pol. da borda. Você também pode medir se desejar descobrir que em ambos os casos a margem superior restante é exatamente 0,2 pol., o que significa que ambos os números de página agora desaparecem.
Para obter a página inteira conforme pretendido, tudo o que você precisa fazer é deslocar a origem do dvi exatamente 1 polegada tanto na horizontal quanto na vertical, para que agora fique alinhada com o canto superior esquerdo da página.Observe que nãoadivinhação ou observaçãoé necessário.Aqui estão as saídas para as mesmas duas páginas usando dvipng -T5in,7in -O1in,1in
; note que as margens fortemente assimétricas são respeitadas e ao contrário do queDavid sugeriu, não é necessário mexer nas margens reais do documento para definir o parâmetro de deslocamento.
Página 1:
Página 2: