Уменьшить изображение, но не в латексе - PullRequest
14 голосов
/ 23 сентября 2008

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

\includegraphics[width=\textwidth]{img}

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

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

Ответы [ 5 ]

18 голосов
/ 23 сентября 2008

Для получения ширины изображения вы можете использовать этот код:

\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}

Надеюсь, это поможет!

1 голос
/ 20 апреля 2011

Мне нравится дополнительный параметр для необязательного увеличения или уменьшения изображения, поэтому моя версия \ scalegraphics выглядит так:

\newcommand\scalegraphics[2][]{%
    \settowidth{\imgwidth}{\includegraphics{#2}}%
    \setlength{\imgwidth}{\minof{#1\imgwidth}{\textwidth}}%
    \includegraphics[width=\imgwidth]{#2}%
}
0 голосов
/ 05 февраля 2019

Если вы хотите ограничить не изображение, а отдельный файл .tex, вы можете слегка изменить \scalegraphics ChrisN * на

\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}}
0 голосов
/ 28 июля 2013

Пакет 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.

0 голосов
/ 23 сентября 2008

После нескольких минут поиска в руководствах CTAN и результатах Google, я могу с уверенностью сказать, что то, что вы хотите сделать, либо невозможно, либо очень сложно. Моя единственная рекомендация - иметь две команды: одну для маленьких изображений и одну для больших или одну команду с опцией.

Может быть, есть выход, но я оставляю его другому С.О. Мастера LaTeX, чтобы дать лучший ответ.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...