Масштабируйте изображение вниз, но не вверх в латексе
-
02-07-2019 - |
Вопрос
У меня есть команда, которая включает команду includegraphics — я могу передать изображение своей команде, и она выполнит для меня стандартное форматирование перед фактическим включением изображения.Некоторые изображения, которые я добавляю с помощью этой команды, меньше, чем extwidth, а некоторые больше.Я хотел бы масштабировать большие изображения до extwidth, не увеличивая при этом меньшие изображения - это означает, что я не могу просто сделать
\includegraphics[width=\textwidth]{img}
Есть ли способ указать максимальную ширину?Или могу ли я каким-то образом получить ширину изображения, чтобы я мог сделать что-то вроде
\ifthenelse{\imagewidth > \textwidth}{%
\includegraphics[width=\textwidth]{img}}{%
\includegraphics{img}}
Решение
Чтобы получить ширину изображения, вы можете использовать этот код:
\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}
Надеюсь, это поможет!
Другие советы
Мне нравится дополнительный параметр для увеличения или уменьшения изображения, поэтому моя версия \scalegraphics выглядит так:
\newcommand\scalegraphics[2][]{%
\settowidth{\imgwidth}{\includegraphics{#2}}%
\setlength{\imgwidth}{\minof{#1\imgwidth}{\textwidth}}%
\includegraphics[width=\imgwidth]{#2}%
}
А 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
.
Если вы хотите ограничить не изображение, а отдельный .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
как предложил Тед, тоже будет работать:
\usepackage{adjustbox}
...
\adjustbox{max width=\linewidth}{\input{standalone}}
После нескольких минут поиска в руководствах CTAN и результатах Google я могу с уверенностью сказать, что то, что вы хотите сделать, либо невозможно, либо очень сложно.Моя единственная рекомендация — иметь две команды: одну для маленьких изображений и одну для больших, или одну команду с опцией.
Возможно, есть способ, но я оставляю это другим С.О.Мастера LaTeX, чтобы дать лучший ответ.
Редактировать:Я не прав, см. выше.