dimensionar correctamente las imágenes PNG en markdown con pandoc para html / pdf / docx

25

Estoy tratando de usar Markdown con pandoc para convertir un solo documento en html, pdf y docx. Es un documento extremadamente simple que contiene solo texto sin matemáticas y algunas imágenes. Las imágenes están en formato PNG. Incluyo una imagen usando esto en la fuente de descuento:

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

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

</div>

y compilarlo 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

Noté que algunas imágenes PNG que tienen las mismas dimensiones tienen un tamaño diferente en formatos HTML y PDF. Un PNG que es de 250x256 px con baja resolución (72 px / in) aparecerá en PDF como el tamaño correcto aproximadamente en la página, y aparecerá en un tamaño razonable en html, pero un PNG que tiene las mismas dimensiones (250x256 px) pero es la resolución alta (300 px / in) se redimensiona para que sea pequeña en la página en la salida PDF. Quiero mantener un conjunto de imágenes PNG en un tamaño que especifique y que aparezcan en ese tamaño en los formatos HTML / PDF / DOCX.

Estoy dispuesto a renunciar al soporte automático de docx (o tratar con mucho formateo manual después) solo para tener PDF / HTML.

¿Cómo puedo decirle a Pandoc que no cambie el tamaño de PNG para PDF o imagen, y que aparezcan en sus imágenes correctas? Gracias.

user46976
fuente
2
Un PNG que es 300 ppp pero solo 250x256px debería ser bastante pequeño en la página, ¿no? (Menos de una pulgada cuadrada). Un PNG con un dpi más bajo será más grande en la página. Pandoc tiene en cuenta la información de dpi, así como el tamaño de píxel, al dimensionar las imágenes. ¿Y no debería? Quizás podría usar CSS para reducir globalmente las imágenes de alta resolución en HTML.
John MacFarlane
1
@JohnMacFarlane: Veo que el comportamiento de Pandoc es correcto al tener en cuenta los ppp, pero quiero que ignore los ppp y se quede con los tamaños absolutos, para que pueda mantener un solo PNG de alta resolución para todas las imágenes. ¿Es la forma correcta de hacer esto para hacer una versión de menor resolución de las imágenes, o hay una manera de hacer que Pandoc simplemente use las dimensiones de la imagen e ignore la resolución? Eso sería lo más simple para mí
user46976

Respuestas:

17

Las dimensiones se convierten en píxeles para la salida en formatos similares a HTML. Use la opción --dpi para especificar el número de píxeles por pulgada. El valor predeterminado es 96 ppp.

Encuentra el elemento más común en tus imágenes y úsalo. Solo modifique las excepciones.


Ejemplos: ppp, ancho, alto.

Si le das la información de dpi:

Agregue la opción --dpi como se indica para anular el valor predeterminado.


Si la mayoría de sus imágenes tienen una altura o ancho común, eso debería corregirse fácilmente.

Por ejemplo, cambió la línea a:

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

o

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

O haga esto en marcado HTML directo:

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

o

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

y la proporción será correcta


Referencia: Léame de Pandoc

Para HTML y EPUB, todos los atributos excepto ancho y alto (pero incluyendo srcset y tamaños) se pasan como están. Los otros escritores ignoran los atributos que no son compatibles con su formato de salida.

Los atributos de ancho y alto en las imágenes se tratan especialmente. Cuando se usa sin una unidad, se supone que la unidad son píxeles. Sin embargo, se puede utilizar cualquiera de los siguientes identificadores de unidad: px, cm, mm, in, inch y%.

Las dimensiones se convierten a pulgadas para la salida en formatos basados ​​en páginas como LaTeX. Las dimensiones se convierten en píxeles para la salida en formatos similares a HTML. Use la opción --dpi para especificar el número de píxeles por pulgada. El valor predeterminado es 96 ppp.

El% de unidad es generalmente relativo a algún espacio disponible. Por ejemplo, el ejemplo anterior se representará en <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).

Algunos formatos de salida tienen la noción de una clase (ConTeXt) o un identificador único (LaTeX \ caption), o ambos (HTML).

Cuando no se especifican atributos de ancho o alto, la alternativa es observar la resolución de la imagen y los metadatos de dpi incrustados en el archivo de imagen.

BloodyEl
fuente
44
También se puede usar { width=100% }para anchos relativos al tamaño general de pantalla / página / ancho de línea.
Rriemann
¿Se puede usar esto con pandoc-crossrefla {#fig:refname}sintaxis s ?
pez remo
1
Respondiendo a mi propio comentario: {#fig:refname width=50%}funciona.
pez remo