仅当图像对于页边距来说太大时,才将图像大小调整为文本宽度的一半

仅当图像对于页边距来说太大时,才将图像大小调整为文本宽度的一半

我希望将我使用的超出页面文本宽度的图像缩小到文本宽度的一半。不大于文本宽度的图像不需要缩放。我有一个 markdown 文档,我正在使用 pandoc 将其转换为 html 和 pdf。

以下代码位于序言中。

\usepackage{graphicx}
\makeatletter
\def\maxwidth{
\ifdim\Gin@nat@width>\linewidth
    \linewidth
\else
    \Gin@nat@width
\fi}
\makeatother
\let\Oldincludegraphics\includegraphics
\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}

我使用什么语法才能使 maxwidth = x * \linewidth 其中 x = .5(或其他数字)?这是代码块中的第 5 行。

答案1

如果你想调整大小到一半,\linewidth如果它比那么宽,那么只需在前面\linewidth添加一个0.5\linewidht然后条款:

\usepackage{graphicx}
\makeatletter
\def\maxwidth{%
\ifdim\Gin@nat@width>\linewidth
    0.5\linewidth
\else
    \Gin@nat@width
\fi}
\makeatother
\let\Oldincludegraphics\includegraphics
\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}

%后面也应该有一个{,否则你会在那里得到一个空格,这可能会引起麻烦。


请注意,该adjustbox包添加了一个max width键,并且还允许使用原始宽度的\width广告\adjincludegraphics有关此内容,请参阅我的回答包括图形最大宽度

答案2

没有必要重新\includegraphics定义

\makeatletter
\setkeys{Gin}{width=\ifdim\Gin@nat@width>\linewidth
    0.5\linewidth
\else
    \Gin@nat@width
\fi}
\makeatother

在序言中应该使所有图形包含都尊重该缩放比例。

答案3

以下重新定义\includegraphics允许这样做:

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\makeatletter
\let\old@includegraphics\includegraphics
\renewcommand{\includegraphics}[2][,]{%
  \setbox9=\hbox{\old@includegraphics[#1]{#2}}%
  \ifdim\wd9>\textwidth
    \old@includegraphics[#1,width=.5\textwidth]{#2}%
  \else
    \old@includegraphics[#1]{#2}%
  \fi%
}
\makeatother
\begin{document}
\noindent\rule{\textwidth}{1pt} \par
\noindent\includegraphics[width=.8\textwidth,height=50pt]{example-image-a}\par
\noindent\includegraphics[width=1.1\textwidth,height=50pt]{example-image-a} \par
\noindent\rule[1ex]{.5\textwidth}{1pt}
\end{document}

相关内容