添加图像时两列未正确填充

添加图像时两列未正确填充

我正在写一份报告,需要添加 5 张图片。将上述图片添加到报告时,前两张放在第一页的文本顶部,另两张放在第二页的任一列,然后第五张放在第三页,即使第二页是空的(除了另外两张图片)。我们最多只能使用两页,每页两列,所以即使我忽略格式问题,这也会带来很大的问题。

我曾尝试使用float包的[H]说明符强制将图像准确地放置在.tex文件中的位置,但这样做只会在列中产生巨大的间隙。

如果我使用[p]说明符,图像只会填充每页的左列,然后才移至下一页,从第二页开始。

[h]说明符基本上结合了上述两者:它在文本中创建较大的间隙,并且最后几幅图像填充单个列,然后再移到下一页。

这是我能做的最好的 MWE(第一次尝试)。我有\item和原始文档一样多的说明符,但带有填充文本。我还删除了说明符,因为我不确定如何表示多个不同的说明符,而不是简单地复制/粘贴所有内容几次。

\documentclass[aps,pre,twocolumn,showpacs,amsmath,amssymb]{revtex4-1}

\usepackage{graphicx}
\usepackage{color}
\usepackage{bm}
\usepackage{float}
\usepackage{pgfplots}
\usepackage{blindtext}

\pgfplotsset{compat=1.16}

\usepackage[portuguese]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\hfuzz 1pt
\vfuzz 1pt

\setlength{\parskip}{\baselineskip}

\begin{document}
\begin{itemize}
%
\item \blindtext
\begin{figure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image1}
\end{figure}
\begin{figure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image2}
\end{figure}
\item \blindtext
\begin{figure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y =x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image3}
\end{figure}
\item \blindtext
\begin{figure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image4}
\end{figure}
\item \blindtext
\item \blindtext 
\begin{figure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image5}
\end{figure}
%
\end{itemize}
\end{document}

TL;DR:图像无法以双列格式正确显示。我做错了什么?

答案1

如果您确切知道图形适合的位置,您可以考虑将它们“在线”处理,而不是作为浮动处理。

将它们包裹在中\begin{center} ... \end{center},以添加浮动会自动添加的垂直空间。

最后,使用\captionof(包caption)插入标题。

答案2

我在这里所做的就是使用 [ht] 数字。如果浮动可以放在这里,它就会放在这里。它永远不会到达当前列的顶部。相反,它会到达下一列的顶部。

由于您已经加载了浮动包,因此我为最后一个使用了 [H] 图形。我还添加了\vspace{\intextsep}属于 [h] 但不属于 [H] 的图形。s\hrule只是为了使间距更清晰。

也可以看看这个问题

\documentclass[aps,pre,twocolumn,showpacs,amsmath,amssymb]{revtex4-1}

\usepackage{graphicx}
\usepackage{color}
\usepackage{bm}
\usepackage{float}
\usepackage{pgfplots}
\usepackage{blindtext}

\pgfplotsset{compat=1.16}

\usepackage[portuguese]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\hfuzz 1pt
\vfuzz 1pt

\setlength{\parskip}{\baselineskip}

\begin{document}
\begin{itemize}
%
\item \blindtext

\begin{figure}[ht]
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image1}
\end{figure}
\begin{figure}[ht]
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image2}
\end{figure}

\item \blindtext

\begin{figure}[ht]
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y =x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image3}
\end{figure}
\item \blindtext

\begin{figure}[ht]
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image4}
\end{figure}
\item \blindtext
\item \blindtext\vspace{\intextsep}

\begin{figure}[H]
\hrule
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image5}
\hrule
\end{figure}
%
\end{itemize}
\end{document}

此版本相当于使用 [H] 图形,除了\intextsep间距可能不同。

\documentclass[aps,pre,twocolumn,showpacs,amsmath,amssymb]{revtex4-1}

\usepackage{graphicx}
\usepackage{color}
\usepackage{bm}
\usepackage{float}
\usepackage{pgfplots}
\usepackage{blindtext}

\pgfplotsset{compat=1.16}

\usepackage[portuguese]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\makeatletter
\newenvironment{myfigure}{\par\vskip\intextsep
  \def\@captype{figure}%
  \noindent\minipage{\columnwidth}%
}{\endminipage
  \par\vskip\intextsep}
\makeatother

\hfuzz 1pt
\vfuzz 1pt

\setlength{\parskip}{\baselineskip}

\begin{document}
\begin{itemize}
%
\item \blindtext

\begin{myfigure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image1}
\end{myfigure}
\begin{myfigure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image2}
\end{myfigure}

\item \blindtext

\begin{myfigure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y =x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image3}
\end{myfigure}
\item \blindtext

\begin{myfigure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image4}
\end{myfigure}
\item \blindtext
\item \blindtext

\begin{myfigure}
    \begin{tikzpicture}
        \begin{axis}[
            xlabel={$x$},
            ylabel={$y$},
            xmin=0, xmax=10,
            ymin=0, ymax=10,
            legend pos=north east,
        ]
        \addplot[mark=none, domain=0:10,samples=2]{x};
        \addlegendentry{$y = x$}
        \end{axis}
    \end{tikzpicture}
\caption{Stuff}
\label{fig:image5}
\end{myfigure}
%
\end{itemize}
\end{document}

相关内容