dimensionnement correct des images PNG dans le démarquage avec pandoc pour html / pdf / docx

25

J'essaie d'utiliser markdown avec pandoc pour convertir un seul document en html, pdf et docx. C'est un document extrêmement simple ne contenant que du texte sans maths et quelques images. Les images sont au format PNG. J'inclus une image utilisant ceci dans la source de démarque:

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

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

</div>

et compilez-le comme:

# 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

J'ai remarqué que certaines images PNG qui ont les mêmes dimensions sont de tailles différentes aux formats HTML et PDF. Un PNG de 250x256 px avec une faible résolution (72 px / in) apparaîtra en PDF comme la bonne taille à peu près sur la page, et apparaîtra dans une taille raisonnable en html, mais un PNG qui a les mêmes dimensions (250x256 px) mais est haute résolution (300 px / in) est redimensionnée pour être minuscule sur la page dans la sortie PDF. Je souhaite conserver un ensemble d'images PNG dans une taille que je spécifie et les faire apparaître dans cette taille dans les deux formats HTML / PDF / DOCX.

Je suis prêt à abandonner le support docx automatique (ou à gérer beaucoup de formatage manuel après) juste pour avoir PDF / HTML.

Comment puis-je dire à pandoc de ne pas redimensionner les fichiers PNG pour PDF ou image et de les faire apparaître dans leurs images correctes? Merci.

user46976
la source
2
Un PNG de 300 dpi mais seulement 250 x 256 pixels devrait être assez petit sur la page, n'est-ce pas? (Moins d'un pouce carré.) Un PNG avec un dpi inférieur sera plus grand sur la page. Pandoc prend en compte les informations dpi, ainsi que la taille des pixels, dans le dimensionnement des images. Et n'est-ce pas? Vous pourriez peut-être utiliser CSS pour réduire globalement les images haute résolution en HTML.
John MacFarlane
1
@JohnMacFarlane: Je vois que le comportement de pandoc est correct en tenant compte du dpi - mais je veux qu'il ignore le dpi et reste avec des tailles absolues, afin que je puisse garder un seul PNG haute résolution pour toutes les images. Est-ce la bonne façon de le faire pour créer une version à résolution inférieure des images, ou existe-t-il un moyen de faire en sorte que pandoc n'utilise que les dimensions de l'image et ignore la résolution? Ce serait le plus simple de ma fin
user46976

Réponses:

17

Les dimensions sont converties en pixels pour une sortie dans des formats de type HTML. Utilisez l'option --dpi pour spécifier le nombre de pixels par pouce. La valeur par défaut est 96 dpi.

Trouvez l'élément le plus courant dans vos photos et utilisez-le. Modifiez uniquement les exceptions.


Exemples: dpi, largeur, hauteur.

Si vous lui donnez les informations dpi:

Ajoutez l'option --dpi comme indiqué pour remplacer la valeur par défaut.


Si la plupart de vos photos ont une hauteur ou une largeur commune, cela devrait être facilement corrigé.

Par exemple, vous avez modifié la ligne en:

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

ou

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

Ou faites-le dans un balisage HTML simple:

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

ou

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

et le rapport sera correct.


Référence: Pandoc Readme

Pour HTML et EPUB, tous les attributs sauf la largeur et la hauteur (mais y compris srcset et les tailles) sont transmis tels quels. Les autres rédacteurs ignorent les attributs qui ne sont pas pris en charge par leur format de sortie.

Les attributs de largeur et de hauteur sur les images sont traités spécialement. Lorsqu'il est utilisé sans unité, l'unité est supposée être des pixels. Cependant, l'un des identificateurs d'unité suivants peut être utilisé: px, cm, mm, in, inch et%.

Les dimensions sont converties en pouces pour une sortie dans des formats basés sur des pages comme LaTeX. Les dimensions sont converties en pixels pour une sortie dans des formats de type HTML. Utilisez l'option --dpi pour spécifier le nombre de pixels par pouce. La valeur par défaut est 96 dpi.

L'unité% est généralement relative à un espace disponible. Par exemple, l'exemple ci-dessus sera rendu 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).

Certains formats de sortie ont une notion de classe (ConTeXt) ou un identifiant unique (LaTeX \ caption), ou les deux (HTML).

Lorsqu'aucun attribut de largeur ou de hauteur n'est spécifié, la solution de repli consiste à examiner la résolution de l'image et les métadonnées dpi incorporées dans le fichier image.

BloodyEl
la source
4
On peut également utiliser { width=100% }pour des largeurs relatives à la taille globale de l'écran / page / largeur de ligne.
rriemann
Peut-il être utilisé avec la syntaxe pandoc-crossrefs {#fig:refname}?
oarfish
1
Répondre à mon propre commentaire: {#fig:refname width=50%}fonctionne.
Oarfish