Подтвердить что ты не робот

Масштабируйте изображение вниз, но не в латексе

У меня есть команда, которая включает в себя команду includegraphics - я могу передать изображение в свою команду, и для меня будет стандартное форматирование, прежде чем включать изображение. Некоторые из изображений, которые я включаю с помощью этой команды, меньше, чем \textwidth, а некоторые больше. Я хотел бы масштабировать большие изображения до \textwidth, а не масштабировать меньшие изображения вверх - это означает, что я не могу просто сделать

\includegraphics[width=\textwidth]{img}

Есть ли способ указать maxwidth? Или я могу получить ширину изображения так или иначе, чтобы я мог сделать что-то вроде

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

Ответ 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, чтобы обеспечить лучший ответ.

Изменить: я ошибаюсь, см. выше.