
1. 从投稿排版说起双栏论文里的大图长公式到底卡在哪里先说个场景。你花了两周写完一篇论文改了三轮导师终于点头准备投某个双栏排版的双栏期刊。结果打开模板一编译那张占了半页的核心系统框图在双栏里被压成了窄窄一溜细节完全看不清还有那个推导了三行的损失函数硬生生挤进单栏连编号都飘到了页边。这时候你大概率会想能不能让这张图、这个公式独占一整栏或者整页宽度同时其余部分继续双栏答案是能而且方法在LaTeX里早就写好了。这个问题看着小但真遇到的人不少——我自己第一次投某个双栏会议时就因为一张大图在双栏里挤成了缩略图审稿人直接写信说“图2看不清”。后来才意识到LaTeX双栏文档里普通浮动体figure、table默认只占当前栏的宽度想让内容跨越两栏必须用专门的跨栏命令或环境。这篇文章就把几种最靠谱的写法、背后的排版机制、以及我踩过的坑一次讲清楚。内容适合正在写双栏期刊或会议论文的硕博生、科研人员也适合给毕业论文模板做定制化改造的人。下面全部基于实际可编译的LaTeX代码你可以直接抄走用。2. 跨栏排版的核心思路为什么普通figure不行figure*才行2.1 LaTeX双栏排版的两个基本事实理解了双栏机制你就看懂了一半问题。LaTeX双栏文档通过\documentclass[twocolumn]{article}或期刊模板开启本质上是把页面纵向切成两条栏轨文字和行内公式按顺序从左栏流到右栏。浮动体的默认宽度是\columnwidth也就是当前栏的宽度。所以有两件事你必须有预期第一普通figure环境里放一张宽度为\textwidth的图它不会自动跨栏而是被硬生生压缩到栏内——如果图片没加width...参数原图就溢出栏外加了width\columnwidth就会变得很小。第二双栏模式下很多模板的\textwidth被设置成整个版心的宽度而\columnwidth是单栏宽度。你需要的“跨栏宽度”实际就是\textwidth。要绕过这个限制核心手段是使用带星号的浮动体环境figure*、table*。这两个环境的作用就是告诉LaTeX“这个浮动体占据整个页面宽度排版时单独处理。”\begin{figure*}[t] \centering \includegraphics[width\textwidth]{architecture.png} \caption{完整的系统架构图} \label{fig:arch} \end{figure*}用figure*之后这张图会出现在页面顶部或底部横跨左右两栏。公式虽然没有equation*这种环境但可以借用figure*或table*加上数学环境来实现跨栏公式。2.2 为什么LaTeX把跨栏浮动体限制在“顶部或底部”这里有个很重要的机制点跨栏浮动体即figure*和table*只能放在页面顶部[t]或底部[b]不能放在页面中部[h]或[H]。这是LaTeX底层浮体算法的限制——跨栏浮动体必须跨过栏之间的纵向分隔它没法和普通栏内浮动体那样嵌入到文字流中。处理办法有好几种第一种用[t]或[b]参数接受它出现在页首或页尾。这是最常规、排版质量最高的做法期刊最终出版时基本都是这样。第二种如果必须让大图处在某一页的中间位置可以手动调整浮动体在源文件中的位置配合\clearpage或\newpage控制分页把浮动体“推”到想要的位置。第三种使用cuted宏包提供的strip环境它可以做到真正意义上“跨栏但不限页首尾”但会引入一些编译层面的细节问题我后面详细说。3. 大图跨栏的实操figure*的正确打开方式3.1 基础用法与宽度控制单张图跨栏最稳的写法就是figure*但宽度参数怎么选很多人搞混。直接给结论跨栏图使用width\textwidth不是\columnwidth也不是\linewidth。如果原图本身清晰度足够、但在页面上不需要占满整行可以用width0.8\textwidth这类比例控制。高清矢量图PDF、EPS格式建议加width\textwidth并配合\centering效果最好。\begin{figure*}[t] \centering \includegraphics[width0.9\textwidth]{figures/overview.pdf} \caption{本文提出的整体框架包含数据预处理、特征编码与决策模块} \label{fig:overview} \end{figure*}注意一点如果你用的图片是位图PNG、JPG放大到\textwidth之后要检查分辨率。双栏期刊版心宽度一般是180mm左右也就是说图片物理宽度约180mm300dpi的图需要大约2100像素宽的源文件否则印刷时会有锯齿。3.2 位置参数怎么选t、b、p、H 的取舍跨栏浮动体的位置参数不是随便写的。我在实际使用中总结出一个相对靠谱的选择策略参数含义适用场景风险[t]页面顶部默认首选图片清晰不打断正文可能被排到当前页或下一页顶部位置略滞后[b]页面底部图在正文之后作为补充说明底部放图阅读体验一般少数期刊不允许[p]单独成页超宽图、横向大表浪费版面一般投稿不建议[ht]优先放在文字中/顶部双栏浮动体实际大多会退化为[t]位置控制力弱编译时可能跑很远[H]强制在这里需float宏包单栏小范围使用可以跨栏基本无效跨栏结构下极易导致排版错误有人可能想问我能不能用[H]强制figure*就在当前位置答案是几乎不行。figure*跨栏时[H]会让LaTeX尝试把浮动体放进栏内但宽度又超过栏宽编译会报“Float too large for page”的警告最终图片还是乱跑。我用过几次就放弃了。3.3 多张图拼一个跨栏图subfigure的配合有时候不是一张大图占跨栏而是多张子图需要并排放在一起比如左侧是原图右侧是处理结果对比。这时候用figure*配合subcaption宏包的子图环境\usepackage{subcaption} \begin{figure*}[t] \centering \begin{subfigure}{0.45\textwidth} \centering \includegraphics[width\linewidth]{input.png} \caption{输入图像} \end{subfigure} \hfill \begin{subfigure}{0.45\textwidth} \centering \includegraphics[width\linewidth]{output.png} \caption{处理后结果} \end{subfigure} \caption{方法在示例样本上的视觉效果对比。} \label{fig:comparison} \end{figure*}0.45\textwidth这样的比例是为了让两个子图之间留出空隙\hfill负责把两个子图推到左右两端。如果你要在子图内部再调整间距可以改用\hspace{1em}。子图的宽度选择有一个经验值两个子图通常各取0.48\textwidth三个子图各取0.32\textwidth留出约4%的间距既不会太挤也不会太散。4. 长表格跨栏table*与自适应列宽4.1 table*环境与表格宽度的控制长表格跨栏和图片类似用table*包裹即可。但表格有一个图片没有的问题图片的宽度靠includegraphics参数控制表格的宽度靠列格式和内容自身决定如果内容撑不满整行跨栏表格看起来会很空如果内容太多又会超出\textwidth。控制跨栏表格宽度我常用的组合是table*tabularx\usepackage{tabularx} \begin{table*}[t] \centering \caption{不同模型在四个基准数据集上的性能对比} \label{tab:comparison} \begin{tabularx}{\textwidth}{lXXXX} \toprule 模型 数据集A 数据集B 数据集C 数据集D \\ \midrule Baseline 82.3 79.1 85.6 77.4 \\ Ours 88.7 84.2 90.1 81.5 \\ \bottomrule \end{tabularx} \end{table*}tabularx的X列类型会自动计算宽度把表格拉伸到指定总宽\textwidth。这里有个细节X列的自动宽度分配是等分的如果你希望某些列更宽要配合{\hsize1.5\hsize}X这类设置。4.2 三线表跨栏时的线宽与字号问题跨栏表格在期刊模板里经常用三线表booktabs风格不过跨栏之后表格线宽度和正文线宽可能有视觉差异。我的建议是保持\toprule、\midrule、\bottomrule默认设置即可不要为了“看起来更粗”而手动加\heavyrulewidth否则印刷出来会显得突兀。字号方面跨栏表格默认和正文一致。如果表格内容太多导致超过\textwidth可以临时用小号字\begin{table*}[t] \centering \small % 或 \footnotesize / \scriptsize \begin{tabularx}{\textwidth}{...} ... \end{tabularx} \end{table*}经验是\small够用就优先\small不要一上来就\scriptsize审稿人看密密麻麻的小字表格很痛苦。表格条目多时分栏不便阅读字号酌情调整后仍然要保证行距清晰。5. 长公式跨栏的几种方案与坑5.1 方案一借用figure*环境实现公式跨栏公式和图表不同它没有专门的“带星号浮动环境”但你可以用figure*包裹数学环境。这种方法适用于一个很长的推导式、矩阵、或者需要多行对齐的核心公式。\begin{figure*}[t] \begin{equation} \begin{split} L(\theta) \sum_{i1}^{n} \left[ y_i \log \hat{y}_i (1 - y_i) \log (1 - \hat{y}_i) \right] \\ \quad \lambda \sum_{j1}^{m} |\theta_j| \mu \sum_{k1}^{p} \theta_k^2 \end{split} \end{equation} \caption*{} % 注意\caption* 需要 caption 宏包 \end{figure*}这里有个小坑figure*环境必须要有\caption否则编译会警告。但公式不需要图题所以用\caption*{}生成一个空的不编号标题。这需要加载caption宏包。如果你用的期刊模板自带caption配置直接加入自己的\caption*{}可能与模板冲突编译报双重caption错误。这时候可以改用\setlength{\abovecaptionskip}{-10pt}之类的手段把空标题的间距压掉或者直接不套figure*改用strip环境。5.2 方案二strip环境实现“公式居中跨栏”严格说cuted宏包的strip环境是处理跨栏内容最优雅的方案——它不创建浮动体而是把处于双栏中间的一段内容扩展为整页宽度。这意味着你可以在双栏正文的中间插入一个跨栏公式公式前后的文字仍然按双栏排版而公式自己占据整行。这解决了很多figure*做不到的场景——公式不用出现在页顶或页底而是出现在它应该出现的逻辑位置。\usepackage{cuted} \begin{strip} \begin{equation} \hat{y} \arg\max_{\theta} \sum_{i1}^{N} \log p(y_i | x_i, \theta) \text{Reg}(\theta) \end{equation} \end{strip}注意几个使用要点第一strip环境在编译时可能出现奇怪的断页特别是当跨栏公式紧挨着分页符时。稳妥做法是在strip前后各留一个空行并手动检查分页点。第二strip里的公式编号仍然正常生成和equation一样。如果公式太长以至于超出页面宽度还是要用multline或split来断行。第三strip环境的最大的坑它通常要求所在位置是“当前页的顶部区域”或至少靠近栏顶否则可能在左下栏出现大片空白。遇到这种情况可以在strip前用\vspace{-2em}微调。我个人的体会是strip处理单个公式比figure*更简洁用它包长公式不会生成浮动体也不会因为\caption的问题引发冲突。但跨栏公式如果编号和正文混排不当编译后位置可能比预想的低一些我会在投稿前用PDF预览逐页检查一遍。5.3 长公式不断行用单栏页面中嵌入的“伪表格”方法还有一种方法适合那种特别长、但只能断成有限几行的公式把公式放进一个不可见的表格环境里利用表格天然的跨栏宽度控制能力。\begin{table*}[h] \centering \begin{minipage}{\textwidth} \begin{equation} \begin{aligned} A B C D E F \\ G H I \end{aligned} \end{equation} \end{minipage} \end{table*}这个方法实际效果跟figure*很接近适合模板对figure*有奇怪限制的情况。不过能用上面两种就优先上面两种这里只是提供一个备用思路。5.4 公式跨栏后编号跑偏怎么办跨栏公式用figure*包裹后equation的编号默认在公式右侧而跨栏排版时编号位置可能和期刊模板冲突。比如IEEE模板中双栏页面里公式编号在右栏的右侧但跨栏公式的编号如果在最右端会和右栏正文的编号错位。解决方法是调整公式编号的显示方式\usepackage{amsmath} \begin{figure*}[t] \begin{equation} ... \end{equation} \thispagestyle{empty} \end{figure*}真正管用的情况多半是改用strip环境编号会自然出现在公式右侧符合阅读习惯。如果你必须用figure*包公式并且期刊要求编号在左侧少数模板如此可以这样改\makeatletter \def\maketag#1{\hbox{\mth\normalfont(#1)}} \makeatother这个属于自定义公式标签格式涉及底层命令不建议在没把握时直接改全局。更安全的做法是用\tag{}手动给公式编号例如\tag{5}避开自动编号机制但这要求你自己维护编号麻烦且容易错。所以我的建议是跨栏公式优先用strip不用figure*包公式就能从根源上规避编号位置的坑。6. 我踩过的坑跨栏排版常见问题与排查速查表6.1 图片“跑了”但没完全跑浮动体位置错乱用figure*最常遇到的就是图片不在你源码里写的位置出现而是跳到后一两页。这个不是Bug是LaTeX浮体算法的正常行为——它会寻找一个同时满足位置约束顶部/底部和空间约束的页面来放置浮动体。缓解办法把figure*的代码放在第一次引用的段落附近不要集中在文末。使用[t]而不是[b]因为顶部空间通常比底部更充足。在正文里用\ref{fig:xxx}明确引用这个图LaTeX会优先考虑被引用浮动体的放置。实在不行可以通过调整\setcounter{topnumber}{...}和\setcounter{totalnumber}{...}放宽单页浮动体数量限制。% 放宽本页允许的最大浮动体数量 \setcounter{topnumber}{3} \setcounter{bottomnumber}{2} \setcounter{totalnumber}{5} \renewcommand{\textfraction}{0.1} \renewcommand{\topfraction}{0.85} \renewcommand{\bottomfraction}{0.85}这些参数是在“把图尽量放在本页”和“保持版面美观”之间做权衡改完后要重新编译看实际效果。6.2 图片宽度溢出栏外编译却不报错很多时候不是报错问题而是视觉问题。大图加了width0.8\textwidth还是溢出多半是你引用模板里的\textwidth已经被宏包改成了栏宽——有些模板细节到连\textwidth也不可靠。遇到这种情况直接使用绝对宽度参数\includegraphics[width17cm]{figure.png}或者用百分比配合\linewidth\includegraphics[width0.95\linewidth]{figure.png}注意\linewidth在浮动体内等于当前环境宽度而跨栏环境中它就是\textwidth。所以\linewidth实际上是比\textwidth更安全的写法。6.3 公式跨栏时行距异常、括号高度不一的问题用strip包公式时经常出现\left( ... \right)在一行内高度不一致的情况因为strip环境改变了局部的基线。解决方法是改用手动大小的定界符比如\bigl( ... \bigr)、\Bigl( ... \Bigr)。\begin{strip} \begin{equation} f(x) \sum_{i1}^{n} \Bigl( x_i^2 y_i^2 \Bigr)^{1/2} \end{equation} \end{strip}另一个经常出现的问题是公式内部分数太大挤压行距。可以在公式环境中加\displaystyle强制显示模式或者用\dfrac代替\frac来保证分数高度统一。跨栏公式比普通公式更显眼公式内部的可读性更重要。6.4 模板自带浮动体样式与figure*冲突不同期刊模板的处理方式差别很大。IEEE模板IEEEtran对figure*支持很好而某些双栏模板用multicol宏包实现双栏figure*和table*可能完全失效——因为multicol不支持跨栏浮动体。如果你发现figure*编译后只占单栏可以先检查文档类是不是用了\documentclass[twocolumn]如果不是就转成标准双栏模式或者继续使用strip环境因为strip基于multicol机制在这种模板下反而表现更好。关于嵌套选项还有一个判断如果你的模板是基于revtexAIP/APS期刊常用跨栏浮动体依然是figure*但位置参数和class选项可能有交互直接使用默认的[t]最安全。6.5 跨栏内容造成前后文错位手动排版兜底方案前面所有方法都试过之后如果大图或公式仍然不听话最直接的手段是手动控制分页。在关键位置加\clearpage或者在浮动体后面加\newpage强制LaTeX按照你的意图分页。但这种方法的代价是版面可能出现大块空白只建议在最终定稿时微调用不建议初稿阶段频繁使用。6.6 常见问题速查表现象可能原因处理方式figure*只占单栏文档类不是标准twocolumn模板基于multicol改用strip环境或调整文档类参数跨栏图跑到几页之后LaTeX浮体队列过长位置参数不匹配改[t]、在正文提前引用、放宽浮动体计数图片溢出栏外不报错宽度参数用错\textwidth被模板改变改用\linewidth或绝对宽度跨栏公式编号错位figure*包公式导致编号在页面最右改用strip环境或手动编号strip后大量留白分页点靠近公式微调前后间距手动控制分页表格内容超宽列宽分配不合理用tabularx调整X列比例编译报“Float too large”浮动体内容超过页面可容纳高度缩小图宽或拆分为多个子图7. 从可编译到可发表跨栏排版的完整自查流程写到这里基本方法都覆盖了。但投稿前建议按下面这个流程把整个文档过一遍第一步确认文档类开启双栏。用\documentclass[twocolumn]{article}或期刊提供的模板在导言区加载graphicx、amsmath、booktabs、tabularx、caption、subcaption、cuted这些宏包。缺少任何一个后面都可能出奇怪的编译错误。第二步根据内容选方案。图片跨栏用figure*[t]表格跨栏用table*tabularx公式跨栏用strip。先跑通一个最简单的测试页确认环境没有冲突再改正式内容。第三步逐页检查PDF。重点看每个跨栏内容的上下边界、图片是否清晰、公式编号是否对齐、浮动体是否和正文重叠。这一步不能省编译通过不等于排版正确。第四步如果是投稿期刊查一下期刊排版指南是否允许跨栏内容。少数期刊对跨栏浮动体有额外要求比如图题必须置于图下方、表格标题必须置于表上方这些细节通常不会影响编译但会影响形式审查结果。我自己处理跨栏排版的经验是优先保证内容不溢出、不遮挡其次再追求位置的精确控制。因为跨栏内容的排版逻辑和单栏完全不同越是想让LaTeX“完全听你的”越容易被浮体规则卡住。适当放宽位置约束接受它出现在本页顶部或下一页顶部是效率最高、也最不容易出错的策略。最后分享一个小技巧如果你在改一个很长的论文跨栏图片和公式很多建议用\include按章节分别编译每次只看一个章节的排版。这样能大大减少调试浮动体位置的痛苦也能避免一张跑偏的图影响后面所有页面的流式排版。论文不是一次编译就能完美的排版本身就是技术活跨栏这部分弄明白了其他页面的问题就都不算事了。