背景
大量屏幕截图已缩放至 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
的选项的包,您现在可以简单地使用键,如果图像较大,则将图像缩小到该宽度,但如果图像较小或等于该宽度,则根本不缩放图像。还有相关键、(用于宽度和高度)以及、和。export
graphicx
max width
max height
max size
min width
min height
min size
对于您来说,只需使用以下代码:
\includegraphics[max width=\linewidth]{<image file name>}
请注意,您不能max width
使用 以全局方式设置等\setkeys{Gin}{max width=...}
。它的实现方式与 不同width
。但是,我也计划为此添加一种可能性。
答案2
- 定义一个宏,计算图像是否宽于
\linewidth
。 - 如果图像太宽,则为
\linewidth
宏分配一个值。 - 否则,分配图形输入的自然宽度的值(
\Gin@nat@width
)。 - 重新定义
\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
。