Pergunta

Eu tenho um comando que inclui um comando includegraphics - eu posso passar uma imagem para o meu comando, e ele vai fazer algum padrão de formatação para mim antes de realmente incluindo a imagem. Algumas das imagens que eu estou incluindo através deste comando são menores do que \ textwidth, enquanto alguns são maiores. Eu gostaria de escalar as maiores imagens para baixo para \ textwidth, apesar de não escalar as imagens menores up - Isso significa que eu não posso simplesmente fazer

\includegraphics[width=\textwidth]{img}

Existe uma maneira para especificar um maxwidth? Ou, posso obter a largura da imagem de alguma forma para que eu possa fazer algo como

\ifthenelse{\imagewidth > \textwidth}{%
    \includegraphics[width=\textwidth]{img}}{%
    \includegraphics{img}}
Foi útil?

Solução

Para obter a largura da imagem que você pode usar este código:

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

Você pode usar esta no preâmbulo do documento para criar um novo comando para definir automaticamente a largura:

\usepackage{graphicx}
\usepackage{calc}

\newlength{\imgwidth}

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

e, em seguida, em seu documento:

\scalegraphics{img}

Espero que isso ajude!

Outras dicas

Eu como um parâmetro adicional para escalar opcionalmente a imagem para baixo ou para cima um pouco, por isso a minha versão do \ scalegraphics parece com isso:

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

Se o que você deseja restringir não é uma imagem, mas um arquivo independente .tex, você pode modificar ligeiramente \scalegraphics de ChrisN para

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

e, em seguida, usá-lo como assim

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

E, claro, adjustbox como sugerido por ted vai funcionar tão bem:

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

Depois de alguns minutos de busca através de manuais de CTAN e resultados do Google, acho que posso dizer com segurança que o que você quer fazer é impossível ou muito difícil. A única recomendação é que você tem dois comandos, um para imagens pequenas e outra para grande, ou um comando com uma opção.

Pode haver uma maneira, mas eu deixá-lo para outra S. O. LaTeX assistentes para fornecer uma resposta melhor.

Edit: eu estou errado, veja acima

.
scroll top