Escala da imagem para baixo, mas não em latex
-
02-07-2019 - |
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}}
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}%
}
O href="http://get-software.net/macros/latex/contrib/adjustbox/adjustbox.pdf" rel="nofollow"> Se você usar a opção de pacote adjustbox
pacote
\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
maioria de suas chaves podem ser usadas diretamente com \includegraphics
. Por exemplo, a chave relevantes para você, max width
.
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
.