考虑以下代码:
% DOCUMENT TYPE
\documentclass[12pt,a4paper]{article}
% PACKAGES
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage[margin=10pt,font=footnotesize,labelfont=bf]{caption}
\usepackage{lipsum}
\usepackage{fancyhdr}
\usepackage{fancybox}
\usepackage{amsmath}
\usepackage{array}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{floatrow}
\usepackage{subfigure}
\usepackage{enumitem}
\usepackage{appendix}
\usepackage{listings}
\usepackage{multicol}
\usepackage{sistyle}
\usepackage{color}
\usepackage{tikz}
\usepackage{lmodern}
\usepackage{multicol}
\usepackage{seqsplit}
\usepackage[listings,skins,theorems]{tcolorbox}
\usepackage{libertine}
\usepackage[export]{adjustbox}
\usepackage[normalem]{ulem}
\usepackage[top=1.25in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
\usepackage{calc}
\usetikzlibrary{calc}
\usepackage{hyperref}
% PRESENTATION
\pagestyle{fancy}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\hypersetup{colorlinks, citecolor=blue, filecolor=blue, linkcolor=blue, urlcolor=blue}
% DOCUMENT BEGINNING
\begin{document}
\lipsum~{}
\begin{center}
\makebox[\textwidth]{
\begin{tikzpicture}
\node[anchor=north west,inner sep=0] (image) at (0,0) {\includegraphics[width=\paperwidth]{valtech-magna-tiles-tessellation-hexagons-2048x1356.jpg}};
\end{tikzpicture}
}
\end{center}
\lipsum
\end{document}
% DOCUMENT END
使用可用的图像这里。
结果如下:
现在是棘手的部分。我想按以下方式剪切图像:
- 左上角应从原始图像左上角水平方向 200px 处开始,垂直方向 100px 处开始
- 右上角应从原始图像左上角水平方向 400px 处开始,垂直方向 100px 处开始
- 生成的图像应调整为适合整个页面宽度
- 图像应被裁剪,使其高度为 4 厘米
这是我想要导入的图像部分(这里的页面宽度指的是\paperwidth
):
最终结果将是:
怎么做?
注意:这是一项“学术”练习,因此我了解如何做到这一点,并且能够以相同的方式剪切具有其他长度/比例的其他图形。
答案1
包裹adjustbox
您的序言已包含包adjustbox
。它提供了修剪和剪辑所需的功能
我不确定图像周围需要多少间距。以下示例让图像表现为具有大写字母的高度H
和深度g
。
\documentclass[12pt,a4paper]{article}
\usepackage{lipsum}
\usepackage{libertine}
\usepackage{graphicx}
\usepackage[top=1.25in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
\usepackage{adjustbox}
\usepackage{calc}
\begin{document}
\lipsum[7]
\centerline{%
\settoheight{\dimen0}{H}%
\adjincludegraphics[
Clip={\dimexpr\width*200/2048\relax}
{0pt}
{\dimexpr\width*400/2048\relax}
{\dimexpr\height*100/1356\relax},
width=\paperwidth,
Clip={0pt} {\dimexpr\height-4cm\relax} {0pt} {0pt},
raise=\dimexpr\dimen0-\height\relax,
]{valtech-magna-tiles-tessellation-hexagons-2048x1356.jpg}%
}
\settodepth{\prevdepth}{g}
\noindent
\lipsum[1]
\end{document}
带封装的像素尺寸bmpsize-base
常见的 TeX 编译器对所包含图像的像素大小一无所知,即使支持该图像格式。该项目bmpsize
使用 pdfTeX 的(与模式无关的)功能\pdffiledump
来解析和分析二进制图像位图文件。此外,LuaTeX 也通过包 自动获得支持pdftexcmds
。包bmpsize
增加了对 DVI 驱动程序的图像大小检测支持,而 PDF 模式下 pdfTeX 则不需要。但图像宽度和像素宽度检测在包中外包bmpsize-base
。以下示例检查支持的图像位图格式以获取像素宽度和高度:
\documentclass[12pt,a4paper]{article}
\usepackage{lipsum}
\usepackage{libertine}
\usepackage{graphicx}
\usepackage[top=1.25in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
\usepackage{adjustbox}
\usepackage{bmpsize-base}
\usepackage{kvsetkeys}
\newcommand*{\imgfile}{valtech-magna-tiles-tessellation-hexagons-2048x1356.jpg}
\makeatletter
\newcommand*{\getpixelsizes}[1]{%
\expandafter\comma@parse\expandafter{\bmpsize@types}{%
\csname bmpsize@read@\comma@entry\endcsname{#1}%
\ifbmpsize@ok
\let\PixelWidth\bmpsize@pixelwidth
\let\PixelHeight\bmpsize@pixelheight
\PackageInfo{ImageSize}{%
File = #1\MessageBreak
Size = \PixelWidth\space x \PixelHeight\space pixels\@gobble
}%
\comma@break
\fi
\@gobble
}%
\ifbmpsize@ok
\else
\PackageError{ImageSize}{%
Cannot get pixel sizes for image file\MessageBreak
`#1'%
}\@ehc
\fi
}
\makeatother
\begin{document}
\lipsum[7]
\centerline{%
\settoheight{\dimen0}{H}%
\getpixelsizes{\imgfile}
\adjincludegraphics[
Clip={\dimexpr\width*200/\PixelWidth\relax}
{0pt}
{\dimexpr\width*400/\PixelWidth\relax}
{\dimexpr\height*100/\PixelHeight\relax},
width=\paperwidth,
Clip={0pt} {\dimexpr\height-4cm\relax} {0pt} {0pt},
raise=\dimexpr\dimen0-\height\relax,
]{\imgfile}%
}
\settodepth{\prevdepth}{g}
\noindent
\lipsum[1]
\end{document}
没有adjustbox
修剪可以通过 选项完成
trim
。\includegraphics
由于单位是像素,所以需要知道像素宽度和像素高度。实际计算可以用 e-TeX 来完成,\dimexpr
精度较高。\paperwidth
可以通过选项进行缩放width
。可以通过 进行 4cm 的剪辑
tikz
。
示例文件:
\documentclass[12pt,a4paper]{article}
\usepackage{lipsum}
\usepackage{libertine}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage[top=1.25in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
\begin{document}
\lipsum[7]
\centerline{%
\begin{tikzpicture}[inner sep=0pt, baseline=-height("H")]
\clip (0, 0) rectangle (\paperwidth, -4cm);
\node[below right] (img) {%
\sbox0{\includegraphics{valtech-magna-tiles-tessellation-hexagons-2048x1356.jpg}}%
\includegraphics[
trim={\dimexpr\wd0*200/2048\relax}
{0pt}
{\dimexpr\wd0*400/2048\relax}
{\dimexpr\ht0*100/1356\relax},
width=\paperwidth,
]{valtech-magna-tiles-tessellation-hexagons-2048x1356.jpg}%
};
\end{tikzpicture}%
}
\kern-4cm
\nointerlineskip
\vbox to 4cm{\vphantom{g}}
\noindent
\lipsum[1]
\end{document}