LaTeX 中的图像放置(双列模式)

LaTeX 中的图像放置(双列模式)

我刚开始撰写生物化学毕业论文,我很高兴能够使用 LaTeX 来制作出好看的最终产品。

不过,我刚接触 LaTeX,所以对它了解不多。在投入太多时间在 LaTeX 上之前,我想确保我能用这个软件做我需要做的一切事情。

在生物学中,论文通常使用双栏格式,因此我决定在文档开头使用twocolumn文档类中的选项。我找到了一种方法来获取单栏摘要,在每页的角落包含论文标题,并在整个文档中包含页码(所有要求都是我自己设定的)。在开始制作实际文档之前,我最不想做的事情就是图像(在 LaTeX 中也称为“浮点”?)。我的 99% 的数据都是实际的图形,无论是图表还是蛋白质印迹,因此在文档中获取图像是关键。我已经弄清楚了如何使用graphicx包来执行此操作并使用figure*而不是figure使其跨越整个页面。问题是图像几乎总是出现在页面上参考文献,不在同一页上。这很烦人,因为目前看来,我永远不会在讨论的同一页上看到图像,它总是在紧接着一页。

现在我已经说明了我的理由,下面是简短的版本:是否有一个技巧可以将图像始终自动地放置在您想要的位置,特别是在 2 列文档中。我之所以包含完整的理由,是因为可能有一种更好的方法来解决这个问题,即所谓的“跳出框框”,而且在我在网上搜索的大多数内容中,第一个建议都是人们建议提问者做一些他们没有明确要求的事情。举个例子,下面是一个最小的例子:

\documentclass[12pt,twocolumn]{article}

\usepackage{lipsum}
\usepackage{stfloats}

\begin{document}
\section*{Introduction}
\setlipsumdefault{13-19} 
\lipsum

{\bf Here is where I reference Figure~\ref{one}}

\begin{figure*}[tbph]
\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} 
\caption{And here is the actual figure.
\label{one}} 
\end{figure*}

\lipsum

\end{document}

我发现了一些使用multicol包并使用它来制作一个两列页面,但它似乎没有修复浮动位置。此外,大多数人似乎都说,twocolumn对于几乎完全是两列的文档,在 documentclass 中指定是最有效的方法。我知道我可以手动移动文本中图像的位置并修复它,但我将进行几轮修订,不想每次都修复它。有没有好的解决方案,或者 LaTeX 不适合我?如果这是重复的,我很抱歉,我发现的大多数其他问题都是一年或更久以前的,我希望有一个更现代的解决方案。

答案1

在此处输入图片描述

首先是坏消息:

您说得对,在实施过程中,两列浮点数永远不会插入到其定义所在的页面上。实际上,大多数人发现这在实践中不是问题,因为环境figure*不需要靠近\ref图形的第一个,但是最好不要有这种限制。

事实上,如果浮动元素位于第一列,使用与单列情况相同的机制,让浮动元素浮动到顶部是相对容易的,但问题是,如果定义位于第二列,则第一列已经设置并保存在一个全高框中,因此无法添加全宽浮动元素。

现在好消息

LaTeX 是一个非常开放的系统,它不仅是开源的,因此您可以查看源代码并进行更改,而且其代码也可以从文档本身进行修改。任何文档都可以重新定义任何 latex 定义。

下面的代码显示了如何在页面上自动插入图形定义第一个参考文献,以便它与参考文献一起位于页面的顶部。

如下所述,它仅适用于一个图形,但使用一些声明性宏很容易扩展它,以便将每个图形添加到列表中,以便根据需要插入。(但现在已经很晚了,我想展示几分钟的修改结果)。因此,虽然下面的代码可能还没有准备好投入生产,但我希望它能表明你不应该因为一些明显的限制而放弃使用 LaTeX 的想法。其他替代系统可能存在一些限制,它们没有很好地记录这些限制,而且更难解决:-)

\documentclass[12pt, twocolumn]{article}

\usepackage{lipsum}

\output\expandafter{\the\output\floatfix}

\makeatletter
\def\floatfix{%
\expandafter\ifx\csname r@x@one\endcsname\relax
\else
\ifnum\c@page=\numexpr\expandafter\expandafter\expandafter
              \@secondoftwo\csname r@x@one\endcsname-1\relax
\aftergroup\figone
\fi
\fi}
\makeatother

\begin{document}
\section*{Introduction}

\def\figone{%
\begin{figure*}[tbph]
\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} 
\caption{And here is the actual figure.
\label{one}} 
\end{figure*}
\global\let\figone\relax}

\setlipsumdefault{13-19} 
\lipsum

\textbf{Here is where I reference Figure~\ref{one}\label{x@one}}


\lipsum


\end{document}

相关内容