我刚开始撰写生物化学毕业论文,我很高兴能够使用 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}