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

StackOverflow https://stackoverflow.com/questions/122348

  •  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, чтобы дать лучший ответ.

Редактировать:Я не прав, см. выше.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top