\includegraphics:获取图形的“比例”值,其大小由“宽度”表示

\includegraphics:获取图形的“比例”值,其大小由“宽度”表示

让我们来看看这个字符串:

\boxed{\includegraphics[width=0.4\textwidth]{FIGURE.pdf}}

生成以下图形:

在此处输入图片描述

现在假设我需要裁剪图形的空白边距并保持图形的大小。

我虽然可以用类似以下的方法来实现:

\boxed{\includegraphics[trim = L B R T, clip, scale=x]{FIGURE.pdf}}

其中LBR、 和T分别为左、下、右和上的修剪值,x为缩放值。

下面的例子可以更好地解释我的问题:

\boxed{\includegraphics[width=0.4\textwidth]{FIGURE.pdf}}\quad %
\boxed{\includegraphics[scale=0.238]{FIGURE.pdf}}\\

\boxed{\includegraphics[trim = 65 20 150 20, clip, width=0.4\textwidth]{FIGURE.pdf}}\quad %
\boxed{\includegraphics[trim = 65 20 150 20, clip, scale=0.238]{FIGURE.pdf}}

上述代码生成以下布局:

在此处输入图片描述

正如您所看到的,使用scale值而不是width允许我裁剪图形以保持其大小。

我的问题是:如何才能在不经过反复试验的情况下获得比例参数的精确(或多或少)值?(我的想法是编写一些Emacs Lisp代码来相应地更改LaTeX代码。)

我愿意接受任何想法或建议。

笔记。在大多数情况下,我使用外部软件来裁剪我的图像(pdfcropbriss),但有时,就像在这种情况下,它们不起作用,所以我需要手动修剪。

答案1

所有图形都以比例因子写入 PDF。当您指定尺寸时,软件包会将其转换为适当的比例因子。您可以让软件包\Gscale@box为您记住该比例因子(来源)。您可以\thelastscalefactor根据需要多次使用相同的方法:

\documentclass{article}
\usepackage{graphicx}

\makeatletter
\let\ORG@Gscale@box\Gscale@box
\long\def\Gscale@box#1{%
  \xdef\thelastscalefactor{#1}%
  \ORG@Gscale@box{#1}}
\makeatother

\begin{document}

% Measuring the image without actually using it
\sbox0{\includegraphics[width=0.4\textwidth]{example-image}}\quad

\noindent % Using with the scale only
\fbox{\includegraphics[width=0.4\textwidth]{example-image}}\quad
\fbox{\includegraphics[scale=\thelastscalefactor]{example-image}}

\noindent
\fbox{%
  \makebox[0.4\textwidth][l]{% <-- trick to align without a tabular
    \includegraphics[trim = 65 20 150 20, clip, scale=\thelastscalefactor]{example-image}%
  }%
}\quad
\fbox{\includegraphics[trim = 65 20 150 20, clip, scale=\thelastscalefactor]{example-image}}

\end{document}

输出:

在此处输入图片描述

答案2

您可以width=分别保留图形和修剪/剪辑,以免影响缩放,请参见此处的最后一个例子:

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx,adjustbox}
\begin{document}



\includegraphics[width=.4\textwidth]{example-image}

\bigskip

\includegraphics[clip,trim=1cm .5cm .7cm .1cm, width=.4\textwidth]{example-image}

\bigskip

\adjustbox{clip,trim=1cm .5cm .7cm .1cm}{\includegraphics[width=.4\textwidth]{example-image}}


\end{document}

答案3

我从来不喜欢同时缩放和裁剪的想法,因为不知道哪个先来(关键字顺序毫无意义)。此解决方案先裁剪,然后使用\savebox和缩放\adjustbox

\documentclass{article}
\usepackage{graphicx}
\usepackage{adjustbox}

\newsavebox{\tempbox}

\begin{document}

\noindent
\savebox{\tempbox}{\includegraphics[trim = 65 20 150 20, clip]{example-image}}%
\fbox{\adjustbox{width=0.4\textwidth}{\usebox\tempbox}}

\end{document}

答案4

我不太确定这是您要找的,但这里有一种方法可以计算,例如,将所需比例因子乘以 1000,四舍五入到最接近的整数:

\documentclass{article}
\usepackage{graphicx}

\newcount\myscale

\begin{document}
\setbox0=\hbox{\includegraphics{example-image}}%
\myscale=\numexpr 400*\textwidth / \wd0 \relax % 400 = 0.4×1000
\showthe\myscale                % displays 430 on the terminal

\includegraphics[width=0.4\textwidth]{example-image}

\includegraphics[scale=0.43]{example-image} % same width as above

\end{document}

相关内容