dimensionamento correto de imagens PNG em descontos com pandoc para html / pdf / docx

21

Estou tentando usar a remarcação com pandoc para converter um único documento em html, pdf e docx. É um documento extremamente simples, contendo apenas texto sem matemática e algumas imagens. As imagens estão no formato PNG. Eu incluo uma imagem usando isso na fonte de remarcação:

<div style="float:center" markdown="1">

![my caption](./figures/myimage.png)

</div>

e compile-o como:

# html
pandoc myarticle.md -c mystyle.css -o myarticle.html
# pdf
pandoc myarticle.md -V geometry:margin=1in -o myarticle.pdf
# docx
pandoc myarticle.md -o myarticle.docx

Percebi que algumas imagens PNG com as mesmas dimensões são dimensionadas de maneira diferente nos formatos HTML e PDF. Um PNG de 250x256 px com baixa resolução (72 px / in) aparecerá em PDF com o tamanho correto aproximadamente na página e aparecerá em um tamanho razoável em html, mas um PNG com as mesmas dimensões (250x256 px), mas é alta resolução (300 px / in) é redimensionada para ser pequena na página na saída em PDF. Quero manter um conjunto de imagens PNG no tamanho especificado e que elas apareçam nesse tamanho nos formatos HTML / PDF / DOCX.

Estou disposto a desistir do suporte automático a docx (ou lidar com muita formatação manual depois) apenas para ter PDF / HTML.

Como posso dizer ao pandoc para não redimensionar PNGs para PDF ou imagem e fazer com que eles apareçam nas imagens corretas? obrigado.

user46976
fonte
2
Um PNG com 300dpi, mas apenas 250x256px deve ser bem pequeno na página, não deveria? (Menos de uma polegada quadrada.) Um PNG com um dpi menor será maior na página. O Pandoc leva em consideração as informações de dpi, bem como o tamanho do pixel, no dimensionamento das imagens. E não deveria? Talvez você possa usar CSS para reduzir globalmente as imagens de alta resolução em HTML.
John MacFarlane
@JohnMacFarlane: Vejo que o comportamento do pandoc é correto ao considerar o dpi - mas quero que ele ignore o dpi e atenha-se a tamanhos absolutos, para que eu possa manter um único PNG de alta resolução para todas as imagens. A maneira correta de fazer isso é criar uma versão de baixa resolução das imagens ou existe uma maneira de fazer com que o pandoc simplesmente use apenas as dimensões da imagem e ignore a resolução? Isso seria o mais simples do meu final
#

Respostas:

13

As dimensões são convertidas em pixels para saída em formatos semelhantes a HTML. Use a opção --dpi para especificar o número de pixels por polegada. O padrão é 96dpi.

Encontre o elemento mais comum em suas fotos e use-o. Modifique apenas as exceções.


Exemplos: dpi, largura, altura.

Se você fornecer as informações de dpi:

Adicione a opção --dpi conforme indicado para substituir o padrão.


Se a maioria das fotos tiver uma altura ou largura comum, isso deve ser facilmente corrigido.

Por exemplo, você alterou a linha para:

![my caption](./figures/myimage.png){ width=250px }

ou

![my caption](./figures/myimage.png){ height=256px }

Ou faça isso na marcação HTML direta:

<img src="./figures/myimage.png" alt="my caption" style="width: 250px;"/>

ou

<img src="./figures/myimage.png" alt="my caption" style="height: 256px;"/>

e a proporção estará correta.


Referência: Pandoc Readme

Para HTML e EPUB, todos os atributos, exceto largura e altura (mas incluindo srcset e tamanhos), são passados ​​como estão. Os outros gravadores ignoram atributos que não são suportados pelo formato de saída.

Os atributos de largura e altura nas imagens são tratados especialmente. Quando usada sem uma unidade, assume-se que a unidade seja pixels. No entanto, qualquer um dos seguintes identificadores de unidade pode ser usado: px, cm, mm, in, inch e%.

As dimensões são convertidas em polegadas para a saída em formatos baseados em página como o LaTeX. As dimensões são convertidas em pixels para saída em formatos semelhantes a HTML. Use a opção --dpi para especificar o número de pixels por polegada. O padrão é 96dpi.

A% unidade geralmente é relativa a algum espaço disponível. Por exemplo, o exemplo acima será renderizado em <img href="file.jpg" style="width: 50%;" />(HTML), \includegraphics[width=0.5\textwidth]{file.jpg} (LaTeX), or \externalfigure[file.jpg][width=0.5\textwidth](ConTeXt).

Alguns formatos de saída têm uma noção de classe (ConTeXt) ou de um identificador exclusivo (LaTeX \ caption) ou ambos (HTML).

Quando nenhum atributo de largura ou altura é especificado, o fallback é observar a resolução da imagem e os metadados dpi incorporados no arquivo de imagem.

BloodyEl
fonte
2
Pode-se também usar { width=100% }para larguras relativas ao tamanho geral da tela / página / largura de linha.
Rriemann 4/18
Isso pode ser usado com pandoc-crossrefa {#fig:refname}sintaxe s ?
oarfish
Respondendo ao meu próprio comentário: {#fig:refname width=50%}funciona.
oarfish