【问题标题】:Scale image down, but not up in latex缩小图像,但不能在乳胶中放大
【发布时间】:2010-09-12 10:46:23
【问题描述】:

我有一个包含 includegraphics 命令的命令 - 我可以将图像传递给我的命令,它会在实际包含图像之前为我执行一些标准格式设置。我通过此命令包含的一些图像小于 \textwidth,而有些则更大。我想将较大的图像缩小到 \textwidth,而不是将较小的图像放大 - 这意味着我不能只做

\includegraphics[width=\textwidth]{img}

有没有办法指定最大宽度?或者,我可以以某种方式获得图像的宽度,以便我可以做类似的事情

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

【问题讨论】:

    标签: latex


    【解决方案1】:

    要获取图像的宽度,您可以使用以下代码:

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

    我希望这会有所帮助!

    【讨论】:

    • 我不知道我看了多少次 \settowidth 并决定由于某种原因它不适用于图像 - 谢谢!
    • 我还建议添加 keepaspectratio 作为包含图形的参数之一。顾名思义,当缩放到指定的大小时,它会保持图像的纵横比。例如 \includegraphics[width=\imgwidth,keepaspectratio]{#1}
    【解决方案2】:

    我喜欢一个额外的参数,可以选择缩小或放大图像,所以我的 \scalegraphics 版本如下所示:

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

    【讨论】:

      【解决方案3】:

      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}
      

      如果您使用export 包选项,它的大部分密钥都可以直接与\includegraphics 一起使用。例如与您相关的密钥,max width

      【讨论】:

        【解决方案4】:

        如果你要约束的不是图片而是独立的.tex文件,可以稍微修改ChrisN的\scalegraphics

        \newlength{\inputwidth}
        \newcommand\maxwidthinput[2][\linewidth]{%   
            \settowidth{\inputwidth}{#2}%
            \setlength{\inputwidth}{\minof{\inputwidth}{#1}}%
            \resizebox{\inputwidth}{!}{#2}
        }
        

        然后像这样使用它

        \maxwidthinput{\input{standalone}}
        \maxwidthinput[0.5\textwidth]{\input{standalone}}
        

        当然,ted 建议的 adjustbox 也可以:

        \usepackage{adjustbox}
        ...
        \adjustbox{max width=\linewidth}{\input{standalone}}
        

        【讨论】:

          【解决方案5】:

          在通过 CTAN 手册和 Google 结果搜索几分钟后,我想我可以肯定地说,您想要做的事情要么不可能,要么非常困难。我唯一的建议是你有两个命令,一个用于小图像,一个用于大图像,或者一个带有选项的命令。

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

          编辑:我错了,见上文。

          【讨论】:

          • 我得出了同样的结论——不过,除了如何获得图像的宽度之外,我已经弄清楚了一切,所以我真的希望我能克服最后一个障碍。
          猜你喜欢
          • 2011-02-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-15
          • 1970-01-01
          • 1970-01-01
          • 2017-05-28
          • 2011-08-22
          相关资源
          最近更新 更多