缩放(调整大小)超出页边距的大型图像(图形)

缩放(调整大小)超出页边距的大型图像(图形)

背景

大量屏幕截图已缩放至 300%,分辨率为 288dpi。嵌入到 OpenOffice 中时,它们可以正确显示,但嵌入到 LyX 中时则不行。

问题

未超出边距的图像(小图像)可完美显示。太大的图像会超出边距。

尝试 #1

\setkeys{Gin}{width=1.0\textwidth} 

但是,该代码会缩放较小的图像以适应宽度,这是不可取的。(较小的图像会变形。)

尝试#2

没有尝试过,但是看起来很有用。

% Redefine includgraphics for avoiding images larger than the screen size
% If the size is not specified.
\let\py@Oldincludegraphics\includegraphics

\newbox\image@box%
\newdimen\image@width%
\renewcommand\includegraphics[2][\@empty]{%
  \ifx#1\@empty%
    \setbox\image@box=\hbox{\py@Oldincludegraphics{#2}}%
    \image@width\wd\image@box%
    \ifdim \image@width>\linewidth%
      \setbox\image@box=\hbox{\py@Oldincludegraphics[width=\linewidth]{#2}}%
      \box\image@box%
    \else%
      \py@Oldincludegraphics{#2}%
    \fi%
  \else%
    \py@Oldincludegraphics[#1]{#2}%
  \fi%
}

来源:http://svn.python.org/projects/external/Sphinx-1.0.5/sphinx/texinputs/sphinx.sty

尝试#3

% Resize figures that are too wide for the page
\let\oldincludegraphics\includegraphics
\renewcommand\includegraphics[2][]{%
  \makeatletter%
  \def\maxwidth{\ifdim\Ginnatwidth>\linewidth\linewidth%
  \else\Ginnatwidth\fi}%
  \makeatother%
  \oldincludegraphics[width=\maxwidth]{#2}%

套餐

使用graphicx

欢迎提出其他包装建议。

问题

如果不对超出边距的每幅图像添加 LaTeX 代码,怎样才能调整那些过大的图像的大小?

例子

下面的图像是许多必须缩小以适合页面宽度的图像的示例:

有关的

答案1

使用带有扩展了几个新键adjustbox的选项的包,您现在可以简单地使用键,如果图像较大,则将图像缩小到该宽度,但如果图像较小或等于该宽度,则根本不缩放图像。还有相关键、(用于宽度和高度)以及、和。exportgraphicxmax widthmax heightmax sizemin widthmin heightmin size

对于您来说,只需使用以下代码:

\includegraphics[max width=\linewidth]{<image file name>}

请注意,您不能max width使用 以全局方式设置等\setkeys{Gin}{max width=...}。它的实现方式与 不同width。但是,我也计划为此添加一种可能性。

答案2

  1. 定义一个宏,计算图像是否宽于\linewidth
  2. 如果图像太宽,则为\linewidth宏分配一个值。
  3. 否则,分配图形输入的自然宽度的值(\Gin@nat@width)。
  4. 重新定义\includegraphics以利用新的宏定义。
\usepackage{graphicx}

% Determine if the image is too wide for the page.
\makeatletter
\def\ScaleIfNeeded{%
  \ifdim\Gin@nat@width>\linewidth
    \linewidth
  \else
    \Gin@nat@width
  \fi
}
\makeatother

% Resize figures that are too wide for the page.
\let\oldincludegraphics\includegraphics
\renewcommand\includegraphics[2][]{%
  \oldincludegraphics[width=\ScaleIfNeeded]{#2}
}

来源

答案3

我不用 Lyx,但我实验室里的很多人都用,他们向我提出了各种 Lyx 造成的问题。我见过的所有 Lyx 造成的问题只能通过手动编辑 latex 代码来解决。YMMV。

这应该可以解决问题(你需要

\usepackage{ifthen}

\ifthenelse{\lengthtest{Gin > \textwidth}}
{\setkeys{Gin}{width=1.0\textwidth}}{\relax}

答案4

这是另一个解决方案,基于原始尝试 #2(来自 sphinx.sty)。我需要的是仅调整过大的图像的大小,对于所有其他可以容纳的图像,我希望保留原始参数\includegraphics

\makeatletter
\newbox\image@box%
\newdimen\image@width%
\newcommand\IncludeGraphics[2][\@empty]{%
  \setbox\image@box=\hbox{\includegraphics[#1]{#2}}%
  \image@width\wd\image@box%
  \ifdim \image@width>\linewidth%
    \setbox\image@box=\hbox{\includegraphics[width=\linewidth]{#2}}%
    \box\image@box%
  \else%
    \includegraphics[#1]{#2}%
  \fi%
}

我现在可以做:

\IncludeGraphics[scale=.7]{myimage}

如果myimage缩小到 70% 后仍然比当前线宽,它将进一步缩小以适应,\linewidth否则它将保持缩小到仅 70%。

请注意,这将创建一个新命令,\IncludeGraphics而不是修改\includegraohics。如果你想使用\includegraphics,那么你需要添加

\let\oldincludegraphics\includegraphics

并将 改为\newcommand\IncludeGraphics\renewcommand\includegraphics在主体内部调用\oldincludegraphics

相关内容