aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJohn MacFarlane <[email protected]>2024-04-17 22:55:27 -0700
committerJohn MacFarlane <[email protected]>2024-06-23 16:12:37 -0700
commit26b25a4428815b04c255e33e95ee86ca7b6ee30e (patch)
treec163d151c95dd67fa49e287d78d163d9510cdece /test
parent965de61edbd41b4bebea76c557afc99199cf08eb (diff)
LaTeX writer: new method for ensuring images don't overflow.
Previously we relied on graphicx internals and made global changes to Gin to force images to be resized if they exceed textwidth. This approach is brittle and caused problems with `\includesvg` (see #9660). The new approach uses a new macro `\pandocbounded` that is now defined in the LaTeX template. (Thanks here to Falk Hanisch in https://github.com/mrpiggi/svg/issues/60.) The LaTeX writer has been changed to enclose `\includegraphics` and `\includesvg` commands in this macro when they don't explicitly specify a width or height. In addition, the writer now adds `keepaspectratio` to the `\includegraphics` or `\includesvg` options if `height` is specified without width, or vice versa. Previously, this was set in the preamble as a global option. Compatibility issues: - If custom templates are used with the new LaTeX writer, they will have to be updated to include the new `\pandocbounded` macro, or an error will be raised because of the undefined macro. - Documents that specify explicit dimensions for an image may render differently, if the dimensions are greater than the line width or page height. Previously pandoc would shrink these images to fit, but the new behavior takes the specified dimensions literally. In addition, pandoc previously always enforced `keepaspectratio`, even when width and height were both specified, so images with width and height specified that do not conform to their intrinsic aspect ratio will appear differently. Closes #9660.
Diffstat (limited to 'test')
-rw-r--r--test/Tests/Writers/LaTeX.hs2
-rw-r--r--test/command/3450.md2
-rw-r--r--test/command/5476.md2
-rw-r--r--test/command/7181.md2
-rw-r--r--test/command/9045.md2
-rw-r--r--test/writer.latex23
6 files changed, 18 insertions, 15 deletions
diff --git a/test/Tests/Writers/LaTeX.hs b/test/Tests/Writers/LaTeX.hs
index f17dfdcce..c4a456dce 100644
--- a/test/Tests/Writers/LaTeX.hs
+++ b/test/Tests/Writers/LaTeX.hs
@@ -70,7 +70,7 @@ tests = [ testGroup "code blocks"
"\\begin{description}\n\\item[foo] ~ \n\\subsection{bar}\n\nbaz\n\\end{description}"
, "containing image" =:
header 1 (image "imgs/foo.jpg" "" (text "Alt text")) =?>
- "\\section{\\texorpdfstring{\\protect\\includegraphics{imgs/foo.jpg}}{Alt text}}"
+ "\\section{\\texorpdfstring{\\protect\\pandocbounded{\\includegraphics[keepaspectratio]{imgs/foo.jpg}}}{Alt text}}"
]
, testGroup "inline code"
[ "struck out and highlighted" =:
diff --git a/test/command/3450.md b/test/command/3450.md
index d12b0d9c1..e83ce21f7 100644
--- a/test/command/3450.md
+++ b/test/command/3450.md
@@ -8,5 +8,5 @@
% pandoc -fmarkdown-implicit_figures -t latex
![image](lalune.jpg){height=2em}
^D
-\includegraphics[width=\linewidth,height=2em]{lalune.jpg}
+\includegraphics[width=\linewidth,height=2em,keepaspectratio]{lalune.jpg}
```
diff --git a/test/command/5476.md b/test/command/5476.md
index 6e744f5ec..bc8b88549 100644
--- a/test/command/5476.md
+++ b/test/command/5476.md
@@ -4,7 +4,7 @@
^D
\begin{figure}
\centering
-\includegraphics{test/lalune.jpg}
+\pandocbounded{\includegraphics[keepaspectratio]{test/lalune.jpg}}
\caption[moon]{moon\footnotemark{}}
\end{figure}
\footnotetext{the moon}
diff --git a/test/command/7181.md b/test/command/7181.md
index e2cf7a731..e449e057e 100644
--- a/test/command/7181.md
+++ b/test/command/7181.md
@@ -4,7 +4,7 @@
^D
\begin{figure}
\centering
-\includegraphics[page=13,trim=1cm,clip,width=4cm]{slides.pdf}
+\pandocbounded{\includegraphics[keepaspectratio,page=13,trim=1cm,clip,width=4cm]{slides.pdf}}
\caption{Global frog population.}
\end{figure}
diff --git a/test/command/9045.md b/test/command/9045.md
index 3556fc9a1..387ba75b5 100644
--- a/test/command/9045.md
+++ b/test/command/9045.md
@@ -4,7 +4,7 @@
^D
\begin{figure}
\centering
-\includegraphics{there.jpg}
+\pandocbounded{\includegraphics[keepaspectratio]{there.jpg}}
\caption{hi}\label{foo}
\end{figure}
```
diff --git a/test/writer.latex b/test/writer.latex
index 5027b85cc..1cb69633f 100644
--- a/test/writer.latex
+++ b/test/writer.latex
@@ -39,15 +39,17 @@
\usepackage{xcolor}
\usepackage{graphicx}
\makeatletter
-\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
-\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
-\makeatother
-% Scale images if necessary, so that they will not overflow the page
-% margins by default, and it is still possible to overwrite the defaults
-% using explicit options in \includegraphics[width, height, ...]{}
-\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
+\newsavebox\pandoc@box
+\newcommand*\pandocbounded[1]{% scales image to fit in text height/width
+ \sbox\pandoc@box{#1}%
+ \Gscale@div\@tempa{\textheight}{\dimexpr\ht\pandoc@box+\dp\pandoc@box\relax}%
+ \Gscale@div\@tempb{\linewidth}{\wd\pandoc@box}%
+ \ifdim\@tempb\p@<\@tempa\p@\let\@tempa\@tempb\fi% select the smaller of both
+ \ifdim\@tempa\p@<\p@\scalebox{\@tempa}{\usebox\pandoc@box}%
+ \else\usebox{\pandoc@box}%
+ \fi%
+}
% Set default figure placement to htbp
-\makeatletter
\def\fps@figure{htbp}
\makeatother
\ifLuaTeX
@@ -922,11 +924,12 @@ From ``Voyage dans la Lune'' by Georges Melies (1902):
\begin{figure}
\centering
-\includegraphics{lalune.jpg}
+\pandocbounded{\includegraphics[keepaspectratio]{lalune.jpg}}
\caption{lalune}
\end{figure}
-Here is a movie \includegraphics{movie.jpg} icon.
+Here is a movie \pandocbounded{\includegraphics[keepaspectratio]{movie.jpg}}
+icon.
\begin{center}\rule{0.5\linewidth}{0.5pt}\end{center}