2008-09-23 64 views
12

我有一个命令,其中包含一个includegraphics命令 - 我可以将图像传递给我的命令,并且它会在实际包含图像之前为我执行一些标准格式。我通过这个命令包含的一些图像小于\ textwidth,而其中一些更大。我想缩放较大的图像降低到\文本宽度,而不是缩放较小的图像了 - 这意味着我不能只是做向下缩放图像,但不在乳胶

\includegraphics[width=\textwidth]{img} 

是否有指定maxwidth的方法吗?或者,我可以得到图像的宽度不知何故,所以我可以做这样的事情

\ifthenelse{\imagewidth > \textwidth}{% 
    \includegraphics[width=\textwidth]{img}}{% 
    \includegraphics{img}} 

回答

16

以获取图像的宽度,你可以使用此代码:

\newlength{\imgwidth} 
\settowidth{\imgwidth}{\includegraphics{img}} 

你可以在文件前用它来创建一个新的命令来自动设置宽度:

\usepackage{graphicx} 
\usepackage{calc} 

\newlength{\imgwidth} 

\newcommand\scalegraphics[1]{% 
    \settowidth{\imgwidth}{\includegraphics{#1}}% 
    \setlength{\imgwidth}{\minof{\imgwidth}{\textwidth}}% 
    \includegraphics[width=\imgwidth]{#1}% 
} 

然后在你的文件中:

\scalegraphics{img} 

我希望这有助于!

+0

我不' t知道了多少次我看着\ settowidth,并决定它不会在图像上出于某种原因 - 谢谢! – 2008-09-23 21:14:40

-3

通过CTAN手册和谷歌搜索结果搜索几分钟后,我想我可以有把握地说,你想要做的是什么要么不可能要么很辛苦。我唯一的建议是你有两个命令,一个用于小图像,另一个用于大型,或者一个命令带有选项。

可能有办法,但我把它留给其他S.O. LaTeX向导提供了更好的答案。

编辑:我错了,见上文。

+0

我得出了同样的结论 - 虽然除了如何获得图像的宽度外,我已经弄清楚了所有的事情,所以我真的希望能够克服最后的障碍 – 2008-09-23 18:16:42

1

我喜欢任意缩放图像向上或向下一点额外的参数,所以我的\ scalegraphics版本是这样的:

\newcommand\scalegraphics[2][]{% 
    \settowidth{\imgwidth}{\includegraphics{#2}}% 
    \setlength{\imgwidth}{\minof{#1\imgwidth}{\textwidth}}% 
    \includegraphics[width=\imgwidth]{#2}% 
} 
0

adjustbox包是有用的这一点。下面你会找到一个简短的例子。它允许以下(除了修边,裁剪,增加利润和相对比例:

\documentclass[a4paper]{article} 


\usepackage[demo]{graphicx} 
\usepackage[export]{adjustbox} 

\begin{document} 

\adjustbox{max width=\linewidth}{\includegraphics[width=.5\linewidth,height=3cm]{}} 

\adjustbox{max width=\linewidth}{\includegraphics[width=2\linewidth,height=3cm]{}} 

\includegraphics[width=2\linewidth,height=3cm,max width=\linewidth]{} 
\end{document} 

如果你使用它的大部分按键可直接与\includegraphics使用的export封装选项,例如钥匙与你有关的,max width