You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LaTeX Beamer中等高并排minipages实现方案问询

LaTeX Beamer中实现等高并排minipages的方案与命令优化

需求背景

需要在LaTeX Beamer中实现仅用minipages实现并排布局(明确不使用columns或其他多列环境),现有自定义\SideBySide命令,但希望两个minipages始终保持等高,同时寻求命令的优化建议。

现有命令代码

\def \MinSideBySideGap {0.02} % 左右部分之间的最小间距比例

\newcommand{\SideBySide}[3][0.5]
{
    %
    \ifthenelse{\isempty{#1}}%
        {\FPeval{\leftwidth}{0.5-\MinSideBySideGap/2}%
         \FPeval{\rightwidth}{\leftwidth}%
        }% 如果#1为空
        {\FPeval{\leftwidth}{min(#1-\MinSideBySideGap/2,1.0)}%
         \FPeval{\rightwidth}{max(1.0-\leftwidth-\MinSideBySideGap,0.0)}
        }% 如果#1不为空
    %
    % 左侧部分
    \begin{minipage}{\leftwidth\textwidth}
    #2
    \end{minipage}%
    \hfill%
    % 右侧部分    
    \begin{minipage}{\rightwidth\textwidth}
    #3
    \end{minipage}%
}

早期基于columns的版本

\newcommand{\SideBySide}[2]
{
\begin{columns}[T] % 对齐列顶部
\begin{column}{.48\textwidth}
#1
\end{column}%
\hfill%
\begin{column}{.48\textwidth}
#2
\end{column}%
\end{columns}
}

实现等高minipages的方法

方法1:使用adjustbox包(推荐)

利用adjustbox的height和valign选项,让两个minipage高度取两者的最大值,同时顶部对齐:

  1. 先导入依赖包:
    \usepackage{calc}
    \usepackage{adjustbox}
    
  2. 修改命令中的minipage部分:
    % 左侧部分
    \begin{adjustbox}{valign=t,height=\maxof{\heightof{#2}}{\heightof{#3}}}
    \begin{minipage}[t]{\leftwidth\textwidth}
    #2
    \end{minipage}
    \end{adjustbox}%
    \hfill%
    % 右侧部分    
    \begin{adjustbox}{valign=t,height=\maxof{\heightof{#2}}{\heightof{#3}}}
    \begin{minipage}[t]{\rightwidth\textwidth}
    #3
    \end{minipage}
    \end{adjustbox}%
    

方法2:底层TeX盒命令

用TeX原生命令测量内容高度,再将内容放入等高盒子,无需额外包:

% 临时存储左右内容,测量高度
\setbox0=\vbox{\begin{minipage}{\leftwidth\textwidth}#2\end{minipage}}
\setbox1=\vbox{\begin{minipage}{\rightwidth\textwidth}#3\end{minipage}}
% 计算最大高度
\edef\maxheight{\the\maxof{\ht0}{\ht1}}
% 输出等高盒子
\vbox to \maxheight{\box0\vfill}%
\hfill%
\vbox to \maxheight{\box1\vfill}%

命令优化建议

  1. 替换FPeval为calc包:
    FPeval依赖fp包,calc是LaTeX标准工具包,语法更简洁且效率更高,修改宽度计算逻辑:

    \usepackage{calc}
    
    \def\MinSideBySideGap{0.02\textwidth} % 直接用长度单位,避免比例换算
    
    \newcommand{\SideBySide}[3][0.5\textwidth]
    {
        \def\leftwidth{#1 - \MinSideBySideGap/2}
        \def\rightwidth{\textwidth - \leftwidth - \MinSideBySideGap}
        % 边界校验:确保宽度不超出范围
        \ifdim\leftwidth>\textwidth
            \def\leftwidth{\textwidth - \MinSideBySideGap}
            \def\rightwidth{0pt}
        \fi
        \ifdim\rightwidth<0pt
            \def\rightwidth{0pt}
            \def\leftwidth{\textwidth - \MinSideBySideGap}
        \fi
        % 后续等高minipage代码...
    }
    
  2. 简化空参数判断:
    用TeX原生\ifx判断可选参数是否为空,比ifthenelse更轻量:

    \newcommand{\SideBySide}[3][0.5]
    {
        \ifx\relax#1\relax
            % 可选参数为空时的宽度计算
            \FPeval{\leftwidth}{0.5-\MinSideBySideGap/2}
            \FPeval{\rightwidth}{\leftwidth}
        \else
            % 可选参数不为空时的宽度计算
            \FPeval{\leftwidth}{min(#1-\MinSideBySideGap/2,1.0)}
            \FPeval{\rightwidth}{max(1.0-\leftwidth-\MinSideBySideGap,0.0)}
        \fi
        % 后续代码...
    }
    
  3. 增加对齐控制参数:
    给命令添加可选参数控制minipage的对齐方式(顶部/底部/居中),提升命令灵活性。

内容的提问来源于stack exchange,提问作者TheWhitestOfFangs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:15:42