dimensionamento corretto delle immagini PNG in markdown con pandoc per html / pdf / docx


25

Sto cercando di usare il markdown con pandoc per convertire un singolo documento in html, pdf e docx. È un documento estremamente semplice contenente solo testo privo di matematica e alcune immagini. Le immagini sono in formato PNG. Includo un'immagine usando questo nella fonte markdown:

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

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

</div>

e compilarlo come:

# 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

Ho notato che alcune immagini PNG che hanno le stesse dimensioni vengono ridimensionate in modo diverso nei formati HTML e PDF. Un PNG che è di 250x256 px a bassa risoluzione (72 px / in) apparirà in formato PDF approssimativamente sulla dimensione corretta approssimativamente nella pagina e apparirà in una dimensione ragionevole in HTML, ma un PNG che ha le stesse dimensioni (250x256 px) ma è ad alta risoluzione (300 px / in) viene ridimensionato per essere minuscolo sulla pagina nell'output PDF. Voglio mantenere un set di immagini PNG in una dimensione che ho specificato e farle apparire in quella dimensione in entrambi i formati HTML / PDF / DOCX.

Sono disposto a rinunciare al supporto automatico di docx (o a occuparmi di molta formattazione manuale dopo) solo per avere PDF / HTML.

Come posso dire a pandoc di non ridimensionare i PNG per PDF o immagini e di farli apparire nelle loro immagini corrette? Grazie.


2
Un PNG di 300 dpi ma solo 250x256 px dovrebbe essere piuttosto piccolo nella pagina, non è vero? (Meno di un pollice quadrato.) Un PNG con un dpi inferiore sarà più grande sulla pagina. Pandoc tiene conto delle informazioni dpi, nonché della dimensione dei pixel, nel dimensionamento delle immagini. E non dovrebbe? Forse potresti usare i CSS per ridimensionare globalmente le immagini ad alta risoluzione in HTML.
John MacFarlane,

1
@JohnMacFarlane: Vedo che il comportamento di Pandoc è corretto nel prendere in considerazione dpi - ma voglio che ignori dpi e resti con dimensioni assolute, in modo da poter mantenere un singolo PNG ad alta risoluzione per tutte le immagini. È il modo corretto di fare questo per rendere la versione a bassa risoluzione delle immagini, o c'è un modo per rendere pandoc semplicemente usare solo le dimensioni dell'immagine e ignorare la risoluzione? Sarebbe più semplice da parte mia
user46976

Risposte:


17

Le dimensioni vengono convertite in pixel per l'output in formati simili a HTML. Utilizzare l'opzione --dpi per specificare il numero di pixel per pollice. L'impostazione predefinita è 96 dpi.

Trova l'elemento più comune nelle tue foto e usalo. Modifica solo le eccezioni.


Esempi: dpi, larghezza, altezza.

Se gli dai le informazioni dpi:

Aggiungi l'opzione --dpi come indicato per sovrascrivere il valore predefinito.


Se la maggior parte delle immagini ha un'altezza o una larghezza comuni, è necessario correggerle facilmente.

Ad esempio, hai cambiato la linea in:

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

o

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

Oppure esegui questo markup HTML diretto:

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

o

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

e il rapporto sarà corretto.


Riferimento: Pandoc Readme

Per HTML ed EPUB, tutti gli attributi tranne larghezza e altezza (ma inclusi srcset e dimensioni) vengono passati così come sono. Gli altri autori ignorano gli attributi che non sono supportati dal loro formato di output.

Gli attributi di larghezza e altezza delle immagini sono trattati in modo speciale. Se utilizzato senza un'unità, si presume che l'unità sia pixel. Tuttavia, è possibile utilizzare uno dei seguenti identificatori di unità: px, cm, mm, in, inch e%.

Le dimensioni vengono convertite in pollici per l'output in formati basati su pagina come LaTeX. Le dimensioni vengono convertite in pixel per l'output in formati simili a HTML. Utilizzare l'opzione --dpi per specificare il numero di pixel per pollice. L'impostazione predefinita è 96 dpi.

L'unità% è generalmente relativa allo spazio disponibile. Ad esempio l'esempio sopra verrà renderizzato in <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).

Alcuni formati di output hanno una nozione di classe (ConTeXt) o identificatore univoco (LaTeX \ caption) o entrambi (HTML).

Quando non vengono specificati attributi di larghezza o altezza, il fallback consiste nel guardare la risoluzione dell'immagine e i metadati dpi incorporati nel file immagine.


4
Si può anche usare { width=100% }per larghezze relative alla dimensione complessiva dello schermo / pagina / larghezza di linea.
rriemann,

Può essere usato con pandoc-crossrefla {#fig:refname}sintassi s ?
Remo

1
Rispondere al mio commento: {#fig:refname width=50%}funziona.
Remo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.