floatrow 中 tikz 图像的自动缩放

floatrow 中 tikz 图像的自动缩放

我有一行中的多张图片(使用 floatrow),我想缩放它们,使它们填满一行,同时它们的顶部和底部边缘彼此齐平,并且图像本身的纵横比保持不变。请注意,我有任意的纵横比。四处寻找后,我发现我可以得到图片尺寸并在此基础上一些计算

但是手动执行此操作似乎很累(将图像包含在保存框中,获取宽度,通过公式运行它们,使用比例因子插入它们),并且可自动化。有没有可以这样做的软件包?(我正在使用 floatrow,将图像并排放置)

答案1

如果不解决 floatrow 的细节问题(我对此一无所知),您的问题有两个组成部分:将图形缩放到相同的高度,并将整体宽度缩放到某个尺寸,例如\textwidth。此 MWE 展示了如何同时执行这两项操作,使用scalerel包将一个对象的高度与下一个对象匹配(同时保留纵横比)。然后,我对结果进行缩放以将宽度匹配到,在本例中为\textwidth

我的图形由 s 组成\rule,而您的图形则由图像组成tikz。还请注意,\scalerel假设其参数处于数学模式,因此我添加了数学分隔符,本质上是退出数学模式。

我把所有图片并排放在一个框中\x。但是,如果你的要求(例如字幕等)要求你将图片作为单独的实体,\scalerel*{$\figa$}{$\figd$}则命令将创建一个\figa缩放到大小的版本\figd。当然,你仍然需要将其乘以\scalebox一个因子才能\scaleratio使其达到所需的最终大小(我将这种情况作为我的最后一个例子)。

已编辑以与最新软件包 (scalerel V1.5) 兼容

\documentclass{article}
\usepackage{scalerel}
\usepackage{fp}
\usepackage{stackengine}
\def\stacktype{L}
\usepackage{xcolor}
\begin{document}
\def\figa{\color{blue}\rule{.5in}{.7in}}
\def\figb{\color{red}\rule{.7in}{.3in}}
\def\figc{\color{green}\rule{.4in}{.5in}}
\def\figd{\color{black}\rule{1.in}{.8in}}

Figures as is:

\figa\figb\figc\figd

figures scaled to height of figd

\newsavebox\x
\sbox\x{\scalerel{$\figc$}{$\figd$}}
\sbox\x{\scalerel{$\figb$}{\usebox{\x}}}
\sbox\x{\scalerel{$\figa$}{\usebox{\x}}}
\usebox{\x}

textwidth rule

\rule[1ex]{\textwidth}{.1ex}


figures scaled to textwidth in one box

\newcount\figwidthc
\newcount\textwidthc
\figwidthc=\wd\x
\textwidthc=\textwidth
\FPdiv\scaleratio{\the\textwidthc}{\the\figwidthc}
\scalebox{\scaleratio}{\usebox{\x}}

individual figures scaled to textwidth

\stackunder{\scalebox{\scaleratio}{\scalerel*{$\figa$}{$\figd$}}}{(a)}%
\stackunder{\scalebox{\scaleratio}{\scalerel*{$\figb$}{$\figd$}}}{(b)}%
\stackunder{\scalebox{\scaleratio}{\scalerel*{$\figc$}{$\figd$}}}{(c)}%
\stackunder{\scalebox{\scaleratio}{\figd}}{(d)}
\end{document} 

在此处输入图片描述

答案2

只需缩放以下图片,使它们具有与第一张图片相同的高度,最后将行大小调整为所需的宽度:

\documentclass{article}
\usepackage{graphicx,etoolbox}

\newenvironment{imageRow}[1][\textwidth]
 {\center\firstimagetrue\def\rowwidth{#1}}
 {\resizebox{\rowwidth}{!}{\addimagerow}\endcenter}

\newif\iffirstimage
\newlength{\imageheight}
\newcommand{\addimage}[1]{%
  \sbox0{\includegraphics{#1}}%
  \iffirstimage
    \setlength{\imageheight}{\ht0}%
    \appto\addimagerow{\includegraphics{#1}}%
    \firstimagefalse
  \else
    \appto\addimagerow{\includegraphics[height=\imageheight]{#1}}%
  \fi
}

\begin{document}

\begin{imageRow}
\addimage{example-image.pdf}
\addimage{example-grid-100x100pt.pdf}
\addimage{example-image-golden.pdf}
\end{imageRow}

\begin{imageRow}[.7\textwidth]
\addimage{example-image.pdf}
\addimage{example-grid-100x100pt.pdf}
\addimage{example-image-golden.pdf}
\addimage{example-image-16x9.pdf}
\end{imageRow}

\end{document}

在此处输入图片描述

环境center只是为了方便。

这不仅限于\includegraphics;可能需要进行一些更改以支持其他类型的图形,例如 TikZ 图片,但想法是一样的:只要图像是矢量的,多次缩放它们就没有问题。

相关内容