如何在IEEEtran文档中实现表格与algorithm2e算法纵向排列?
解决IEEEtran下表格(含表注)与algorithm2e算法纵向排列的问题
问题原因
你遇到的报错是因为algorithm2e的algorithm是独立浮动环境,LaTeX不允许浮动环境嵌套(比如把algorithm放进figure/subfigure里),直接嵌套会触发错误。下面提供两种可行的实现方式:
方法一:非浮动表格+固定位置算法(推荐,无需额外宏包)
将表格用minipage包裹成非浮动形式,再用algorithm2e的[H]选项固定算法位置,手动调整间距实现上下对齐:
\documentclass{IEEEtran} \usepackage{threeparttable,booktabs,multirow} \usepackage[ruled,vlined]{algorithm2e} \begin{document} % 非浮动表格(带threeparttable表注) \begin{center} \begin{minipage}{\linewidth} \begin{threeparttable} \caption{算法符号定义} \label{tab:alg_symbols} \begin{tabular}{@{}ll@{}} \toprule 符号 & 含义 \\ \midrule $X$ & 输入特征数据集 \\ $\theta$ & 模型参数集合 \\ $\mathcal{L}$ & 损失函数 \\ \bottomrule \end{tabular} \begin{tablenotes}[flushleft] \item[1] 所有符号均为实数域内的矩阵/向量 \end{tablenotes} \end{threeparttable} \end{minipage} \end{center} % 调整表格与算法的间距(按需修改数值) \vspace{-0.3em} % 固定位置的算法 \begin{algorithm}[H] \SetAlgoLined \KwData{输入数据集 $X$,真实标签 $Y$} \KwResult{训练完成的模型参数 $\theta$} 初始化 $\theta$ 为随机值\; \For{每个训练轮次}{ 前向传播计算预测值 $\hat{Y}$\; 计算损失 $\mathcal{L}(\hat{Y}, Y)$\; 反向传播更新 $\theta$\; } \caption{基于梯度下降的模型训练算法} \label{alg:train} \end{algorithm} \end{document}
- 核心逻辑:用
minipage让表格脱离浮动环境,[H]强制算法固定在当前位置,两者自然纵向排列。 - 优势:无需额外宏包,完美适配IEEEtran的排版规范,间距可灵活调整。
方法二:用floatrow包组合浮动体
如果需要将表格和算法作为一个整体浮动,可以使用floatrow包定义组合浮动环境:
\documentclass{IEEEtran} \usepackage{threeparttable,booktabs,multirow} \usepackage[ruled,vlined]{algorithm2e} \usepackage{floatrow} % 定义表格+算法的组合浮动环境 \DeclareFloatCombination{algtable}{algorithm}[tb] \begin{document} \begin{algtable} % 表格部分 \floatbox[\capbeside]{table}[\width]{\caption{算法符号定义}\label{tab:alg_symbols}}{% \begin{threeparttable} \begin{tabular}{@{}ll@{}} \toprule 符号 & 含义 \\ \midrule $X$ & 输入特征数据集 \\ $\theta$ & 模型参数集合 \\ $\mathcal{L}$ & 损失函数 \\ \bottomrule \end{tabular} \begin{tablenotes}[flushleft] \item[1] 所有符号均为实数域内的矩阵/向量 \end{tablenotes} \end{threeparttable} } % 算法部分 \vspace{1em} \begin{algorithm}[H] \SetAlgoLined \KwData{输入数据集 $X$,真实标签 $Y$} \KwResult{训练完成的模型参数 $\theta$} 初始化 $\theta$ 为随机值\; \For{每个训练轮次}{ 前向传播计算预测值 $\hat{Y}$\; 计算损失 $\mathcal{L}(\hat{Y}, Y)$\; 反向传播更新 $\theta$\; } \caption{基于梯度下降的模型训练算法} \label{alg:train} \end{algorithm} \end{algtable} \end{document}
- 注意事项:
floatrow与IEEEtran的兼容性需要微调,若出现排版异常,可调整浮动位置选项(比如将[tb]改为[t])。
内容的提问来源于stack exchange,提问作者Abarajithan
相关产品推荐
相关产品推荐

