包裹adjustbox

包裹adjustbox

考虑以下代码:

% 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}

结果

相关内容