如何将(窄的)浮子水平地聚集在一起?

如何将(窄的)浮子水平地聚集在一起?

我有一个文档,其中包含一些较窄(不到一半\textwidth)的图像。有时页面上只有一张这样的图像,然后环境figure就足够了。但有时一页上有两个这样的浮动图像,我想将它们并排放置。有人知道有 LaTeX 包可以做这样的事情吗?(ConTeXt 解决方案同样受欢迎。)

编辑:更准确地说,这是我的用例:文档是一组问题。有些问题有与之相关的图形,通常比较窄。如果两个带有图形的问题恰好在同一页上,我希望将两个图形合并在一起(可能在页面顶部,可能在第一个问题附近,这对我来说并不重要)。如果我改变问题的顺序(我经常这样做),甚至在中间的任何地方添加更多问题,图像的配置可能会变得完全不同,这就是为什么我希望解决方案至少是半自动化的)。

答案1

在此期间,直到有人能找到合适的替代方案,我认为可以采用以下半自动化解决方案:

您可以在与图形一起出现的命令中指定问题特定的内容figure。这样,在文档的逻辑布局中,所有内容应该放在一起。然后,您可以figure根据需要按页设置环境,并仅列出环境中的命令(问题图形)figure。这里有一个小的 MWE 来说明这一点:

在此处输入图片描述

\documentclass{article}
\usepackage{caption}% http://ctan.org/pkg/caption
\usepackage[demo]{graphicx}% http://ctan.org/pkg/graphicx
\begin{document}
\begin{enumerate}
  \item Here is a problem that is very easy to solve.

  \item Here is a problem that is very difficult to solve. 
  It requires an additional figure in order for you to solve it.
  It deals with \texttt{rocks}.
  \newcommand{\rockfig}{%
    \begin{minipage}{0.5\textwidth}
      \centering\includegraphics{figure1}
      \captionof{figure}{\texttt{Rocks} figure caption.}
    \end{minipage}%
  }

  \item Here is a problem that is somewhat straight forward to solve.

  \item Here is another difficult problem with a graphic description.
  It requires an additional figure in order for you to solve it.
  It deals with \texttt{sand}.
  \newcommand{\sandfig}{%
    \begin{minipage}{0.5\textwidth}
      \centering\includegraphics{figure2}
      \captionof{figure}{\texttt{Sand} figure caption.}
    \end{minipage}%
  }

  \begin{figure}[tb]
    \centering \rockfig \sandfig
  \end{figure}

  \item Here is an easy problem.  
\end{enumerate}

\end{document}

半自动化,因为与另一种自动化的图形机制相比,在图形环境中列出命令的少量干预似乎微不足道。此外,如果每页图形中只有一个图形,则此方法有效。

要对此进行改进,必须通过反复试验来确定以下内容:

  1. 一页上是否有两幅以上的图像,以便将其分成单独的“节省空间”的图形;
  2. 考虑页面上包含的图像(无论是单独还是组合)的高度是否会将实际问题推到下一页,从而需要随后再次分解图像(避免可能的“振荡”场景,正如@Andy 所评论的那样);
  3. 如果问题重新排列,则按适当的顺序排列图形;
  4. 足够灵活,可以容纳页面上的单个图像或没有图像。

虽然 [3] 和 [4] 可能被认为是可能的/可能的,但 [1] 和 [2] 可能会让你付出超过你(或任何人)声誉的代价。一般来说,人们应该考虑权衡自动化带来的好处是否超过它的存在。

答案2

我无法提供完整的解决方案,但可以提供一些带有伪代码的想法。也许知道如何读取辅助文件的人可以添加缺失的代码。MWE 可以编译,但在注释中缺少内容。

\documentclass{article}

\RequirePackage[paperwidth=170mm, paperheight=240mm, left=40pt, top=40pt, textwidth=280pt, marginparsep=20pt, marginparwidth=100pt, textheight=560pt, footskip=40pt]{geometry}%
\usepackage{lipsum}
\usepackage{caption}

\makeatletter
%
\newsavebox{\@boxone}
\newsavebox{\@boxtwo}

\newenvironment{smallfigure}%
{%
% if figure is first or single on page
\begin{lrbox}{\@boxone}%
% if figure is second on page
% \begin{lrbox}{\@boxtwo}%
\begin{minipage}{135pt}%
\captionsetup{type=figure}}%
{\end{minipage}%
\end{lrbox}%
% if figure is single on page
\usebox{\@boxone}%
% if figure is first on page
% do nothing
% if figure is second on page
% use the two boxes adjacent to each eacher
}
%
\makeatother

\begin{document}
%
\lipsum[1]
\begin{smallfigure}
    \rule{115pt}{1em}
    \caption{a}
    \end{smallfigure}
\lipsum[1]
\begin{smallfigure}
    \rule{115pt}{1em}
    \caption{b}
\end{smallfigure}
\lipsum[1]
%
\end{document}

稍后,必须添加同一页上的第三个图形的选项。

附注 ;),我们将小图放在页边距中。然后,它们(几乎)总是位于提及的文本旁边。这可能会节省空间,也可能不会,具体取决于小图的数量。这对软件包特别有效marginfix。如果您想尝试一下,您可以将行替换\usebox\marginpar{\usebox{\@boxone}}%因此,奇怪的页面布局有足够的边距。

相关内容