Масштабируйте изображение вниз, но не в латексе
У меня есть команда, которая включает в себя команду includegraphics - я могу передать изображение в свою команду, и для меня будет стандартное форматирование, прежде чем включать изображение. Некоторые из изображений, которые я включаю с помощью этой команды, меньше, чем \textwidth, а некоторые больше. Я хотел бы масштабировать большие изображения до \textwidth, а не масштабировать меньшие изображения вверх - это означает, что я не могу просто сделать
\includegraphics[width=\textwidth]{img}
Есть ли способ указать maxwidth? Или я могу получить ширину изображения так или иначе, чтобы я мог сделать что-то вроде
\ifthenelse{\imagewidth > \textwidth}{%
\includegraphics[width=\textwidth]{img}}{%
\includegraphics{img}}
Ответы
Ответ 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}
Надеюсь, это поможет!
Ответ 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}}
И, конечно же, будет работать adjustbox
предложенный adjustbox
:
\usepackage{adjustbox}
...
\adjustbox{max width=\linewidth}{\input{standalone}}
Ответ 5
После нескольких минут поиска в руководствах CTAN и результатах Google я думаю, что могу с уверенностью сказать, что то, что вы хотите сделать, либо невозможно, либо очень сложно. Моя единственная рекомендация состоит в том, что у вас есть две команды: одна для небольших изображений и одна для больших или одна команда с опцией.
Может быть какой-то способ, но я оставляю его другому S.O. Мастера LaTeX, чтобы обеспечить лучший ответ.
Изменить: я ошибаюсь, см. выше.