poprawna zmiana rozmiaru obrazów PNG w przecenie z pandoc dla html / pdf / docx

25

Próbuję użyć Markdown z Pandoc, aby przekonwertować pojedynczy dokument na HTML, PDF i DOCX. To niezwykle prosty dokument zawierający tylko tekst bez matematyki i kilka zdjęć. Obrazy są w formacie PNG. Zamieszczam obraz, używając tego w źródle przeceny:

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

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

</div>

i skompiluj jako:

# 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

Zauważyłem, że niektóre obrazy PNG o tych samych wymiarach mają różne rozmiary w formatach HTML i PDF. Plik PNG o wymiarach 250 x 256 pikseli i niskiej rozdzielczości (72 piksele / cal) pojawi się w formacie PDF w przybliżeniu na stronie i w rozsądnym rozmiarze w formacie HTML, ale PNG ma takie same wymiary (250 x 256 pikseli), ale jest obraz o wysokiej rozdzielczości (300 pikseli / cal) ma niewielki rozmiar na stronie w pliku wyjściowym PDF. Chcę zachować zestaw obrazów PNG w określonym przeze mnie rozmiarze i wyświetlać je w tym formacie zarówno w formacie HTML / PDF / DOCX.

Jestem gotów zrezygnować z automatycznej obsługi formatu docx (lub później zająć się ręcznym formatowaniem) tylko po to, by mieć format PDF / HTML.

Jak mogę powiedzieć pandoc, aby nie zmieniał rozmiaru plików PNG w formacie PDF lub obrazu i wyświetlał je na swoich prawidłowych obrazach? dzięki.

użytkownik46976
źródło
2
Plik PNG o rozdzielczości 300 dpi, ale tylko 250 x 256 pikseli, powinien być dość mały na stronie, prawda? (Mniej niż jeden cal kwadratowy.) Plik PNG o niższej rozdzielczości będzie większy na stronie. Pandoc bierze pod uwagę informacje o rozdzielczości, a także rozmiar w pikselach. A nie powinno? Być może możesz użyć CSS do globalnego skalowania obrazów w wysokiej rozdzielczości w HTML.
John MacFarlane
1
@JohnMacFarlane: Widzę, że zachowanie pandoc jest prawidłowe, biorąc pod uwagę dpi - ale chcę, aby ignorowało dpi i trzymało się bezwzględnych rozmiarów, dzięki czemu mogę zachować pojedynczy obraz PNG o wysokiej rozdzielczości dla wszystkich obrazów. Czy jest właściwy sposób, aby to zrobić, aby wersje obrazów w niższej rozdzielczości były dostępne, czy jest sposób, aby pandoc po prostu używał tylko wymiarów obrazu i ignorował rozdzielczość? To byłoby najprostsze z mojego
punktu widzenia

Odpowiedzi:

17

Wymiary są konwertowane na piksele w celu uzyskania w formacie HTML. Użyj opcji --dpi, aby określić liczbę pikseli na cal. Domyślnie jest to 96dpi.

Znajdź najczęstszy element na zdjęciach i użyj go. Modyfikuj tylko wyjątki.


Przykłady: dpi, szerokość, wysokość.

Jeśli podasz informację o dpi:

Dodaj opcję --dpi, jak podano, aby zastąpić wartość domyślną.


Jeśli większość zdjęć ma wspólną wysokość lub szerokość, należy to łatwo poprawić.

Na przykład zmieniłeś linię na:

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

lub

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

Lub zrób to w prostym znaczniku HTML:

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

lub

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

i stosunek będzie poprawny.


Odniesienie: Pandoc Readme

W przypadku HTML i EPUB wszystkie atrybuty oprócz szerokości i wysokości (ale włączając srcset i rozmiary) są przekazywane w niezmienionej postaci. Inni pisarze ignorują atrybuty, które nie są obsługiwane przez ich format wyjściowy.

Atrybuty szerokości i wysokości obrazów są traktowane specjalnie. W przypadku użycia bez jednostki przyjmuje się, że jednostką są piksele. Można jednak użyć dowolnego z następujących identyfikatorów jednostek: px, cm, mm, in, inch i%.

Wymiary są konwertowane na cale w celu uzyskania wyników w formatach opartych na stronach, takich jak LaTeX. Wymiary są konwertowane na piksele w celu uzyskania w formacie HTML. Użyj opcji --dpi, aby określić liczbę pikseli na cal. Domyślnie jest to 96dpi.

Jednostka% jest ogólnie związana z dostępną przestrzenią. Na przykład powyższy przykład będzie renderowany do <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).

Niektóre formaty wyjściowe mają pojęcie klasy (ConTeXt) lub unikalnego identyfikatora (LaTeX \ caption) lub obu (HTML).

Jeśli nie określono atrybutów szerokości ani wysokości, awarią jest przyjrzenie się rozdzielczości obrazu i metadanych dpi osadzonych w pliku obrazu.

BloodyEl
źródło
5
Można również użyć { width=100% }dla względnych szerokości do ogólnego rozmiaru ekranu / strony / szerokości linii.
rriemann
Czy można tego używać ze składnią pandoc-crossrefs {#fig:refname}?
wiosłowa
2
Odpowiadając na mój komentarz: {#fig:refname width=50%}działa.
Oarfish