当我添加大于 A4 页面的图像时,我遇到了一个小问题。通常,我会使用此代码,但使用此代码,我可以使用边界框(从 0, 0 到 500,700)裁剪它:
%%image start
\begin{figure}[h!]
\caption{\url{http://www.url.com/.htm}
\newline
Text
\newline
}
\centering
% cropped at 500 x 700
\includegraphics[bb= 0 0 500 700 ,clip]{images/001.png}
\end{figure}
%%image end
问题是我的图像比页面大(但每个图像的大小都不同),所以我想从左上角到右下角裁剪它,切掉下部,假设图像高 700。是否可以使用边界框或其他东西来做到这一点?
答案1
我想到的唯一想法是将图形存储在一个盒子中,这样我们就可以查询 tex 的高度(\ht
),并使用该值作为边界框一个角的 y 坐标,然后从该值中减去所需的高度,并使用结果作为另一个角的 y 坐标。
我写了一个宏来做这些计算。下面是一个 MWE:
\documentclass{article}
\usepackage{mwe} % For the sample images
\usepackage{graphicx}
\newcommand{\includeclippedgraphics}[3]{%
% #1 = width
% #2 = height
% #3 = graphics file
\setbox0=\hbox{\includegraphics{#3}}%
\dimen1=\ht0\advance\dimen1 by -#2bp%
\includegraphics[clip, viewport=0 \dimen1 #1 \ht0]{#3}%
}
\begin{document}
% Original image
\includegraphics{example-image}
\vskip 5mm
% Standard crop (from bottom left corner)
\includegraphics[clip, bb=0 0 160 120]{example-image}
\vskip 5mm
% New crop (from upper left corner)
\includeclippedgraphics{160}{120}{example-image}
\end{document}
结果:
更新
我引入了一个变体,其中宏的第一个参数(图像所需的宽度)是可选的。如果省略,则使用原始宽度,因此您只需指定所需的垂直尺寸,图像的底部就会被裁剪。
\documentclass{article}
\usepackage{mwe} % For the sample images
\usepackage{graphicx}
\usepackage[margin=5mm]{geometry}
\newcommand{\includeclippedgraphics}[3][0]{%
% #1 = width (optional)
% #2 = height
% #3 = graphics file
\setbox0=\hbox{\includegraphics{#3}}%
\dimen1=\ht0\advance\dimen1 by -#2bp%
\ifnum#1=0\dimen2=\wd0\else\dimen2=#1bp\fi
\includegraphics[clip, viewport=0 \dimen1 \dimen2 \ht0]{#3}%
}
\begin{document}
% Original image
\includegraphics{example-image}
\vskip 5mm
% Standard crop (from bottom left corner)
\includegraphics[clip, bb=0 0 160 120]{example-image}
\vskip 5mm
% New crop (from upper left corner) with optional width set to 160
\includeclippedgraphics[160]{120}{example-image}
\vskip 5mm
% New crop (from upper left corner) with optional width omitted
\includeclippedgraphics{120}{example-image}
\end{document}
结果如下: