今天在准备论文支撑材料的时候,需要对几个图片进行排版,结果出了很多奇怪的问题,正好这里记录下来,方便后续改正。
1、第一页顶部的双栏导图
想把某个大图放到第一页的顶部,之前用的是\begin{figure}[t],一点问题没有,老老实实放在了顶部的左上角,但是这个图本身比较大,如果单栏的话,字体就看不清了,于是我打算改成双栏顶部,于是设置了\begin{figure*}[t],然后问题出现了,这个图死活放不到第一页的顶部,即使空间很充足,仍然是跑到了第二页的顶部。
我百思不得其解,后来查资料发现,主要原因是:
我们将其放置在了 \maketitle 之后。 在双栏排版中,LaTeX 引擎无法在第一页标题已经生成的情况下,强行插入一个跨两栏的图形,因此它会忽略 [t] 参数,自动将该图推迟到下一页(第二页)的顶部。
解决方案就是改成 teaserfigure 环境,因为acmart 官方模板已经为这种导图准备好了专门的位置,因此只需要将\begin{figure*}[t] \end{figure*}改为\begin{teaserfigure} \end{teaserfigure},并调整到 \maketitle 之前即可。
2、莫名其妙丢失的图
还碰到个问题,就是一共图1-图6,突然图5没了,但是文中的顺序还在,只是图5消失了,正文引用处也是显示??。
这主要是acmart 模板为了美观,会在文档结束(\end{document})时强制把最后一页的左右两栏文字拉平对齐。当这个机制触发时,如果你还有图片(比如图 5)卡在队列里没有输出,对齐引擎会直接中断排版,把队列里剩下的图片当作垃圾清理掉。
解决方案也很简单,就是在\end{document}前面加个\clearpage即可。这个命令的作用是:在触发末页对齐并关闭文档之前,强制拉起一张新的一页,把队列里所有还没发出去的图片全部安全地打印出来。
3、死活放不到指定页数的图
最后还有个问题,就是某个双栏图,总是自动跑到最后一页的顶部,但其实上一页还有空间,而且上一页的右下角有大片的空白,但这个双栏图就是不往上一页跑。
这个原因也很简单,这也是 LaTeX 双栏排版中非常经典的一个机制:跨栏图(figure*)通常会被强制推迟到它在代码中出现位置的“下一页”顶部。
所以,解决方案就是,把这个图放到上上一页的文字那,这样LaTeX在渲染的时候,就会把这个图放到上一页的顶部~
4、总结
这里总结了几个LaTeX排版时不太注意的小细节:
- 在
LaTeX的双栏(twocolumn)排版中,带星号的\begin{figure*}专门用于生成跨越两栏的宽图。但是,跨栏图片只允许出现在页面的顶部 (t) 或单独的浮动页 (p),因此注意双栏图不要用h; - 如果你的文档(特别是
Appendix附录部分)包含大量图片而文字较少,经常会遇到图片离奇失踪、正文引用变成Figure ??的惨案。这通常是因为acmart等模板在文档末尾触发了“强制双栏对齐”机制,直接清空了还在排队的图片。养成一个好习惯:在\end{document}或参考文献声明之前,加上一行\clearpage。这能强制拉起新页,安全打印出所有积压的图表; LaTeX不是所见即所得的排版工具。在双栏模式下,跨栏大图默认会被排版在“代码声明位置的下一页顶部”。如果你希望某张大图完美出现在第3页的顶部,而不会导致页面下方出现大段异常空白,你需要将这张图的LaTeX代码剪切,往前放到第2页的正文段落里让它“提前排队”。
马春杰杰