将数学列的表格阵列居中

将数学列的表格阵列居中

我有一个依赖于 tabularray 的环境,但环境没有像我希望的那样居中。我在下面粘贴了一个示例,但首先我给出一些初步信息:我使用答案是在 Beamer 中一次显示一组关系中的一行,同时发出警报。它工作得很好,只是整个表不是水平居中的,这在我的某些用例中造成了问题。我将“myalign”(基于 tabularray 的新环境)与“align”进行比较,以显示居中的不同之处以及后果(例如换行符)。

我在示例中使用“handout”类选项只是为了关注对齐。实际上,我不使用它,而是使用覆盖。我还将方程计数器重置为 0,以使 align 和 myalign 之间的比较更接近。

\documentclass[handout]{beamer}

\usepackage{tabularray}
\UseTblrLibrary{counter}
\NewDocumentEnvironment{myalign}{+b}{
\begin{tblr}{
  column{1}={co=1},
  column{Z}={co=1},
  column{odd}={halign=r},
  column{even}={halign=l},
  colsep = 0pt,
  cells={mode=dmath},
  cell{1-Z}{1}={cmd=\action<+->},
  cell{1-Z}{2-Z}={cmd=\action<.->},
  cell{1-Z}{Z}={appto={\hfill \refstepcounter{equation}(\theequation)}}
}
#1
\end{tblr}
}{}

\begin{document}

\begin{frame}{align}
\setcounter{equation}{0}

\begin{align}
\sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)^{2} & =\sum_{i=1}^{n}\left(x_{i}^{2}-2x_{i}\overline{x}+\overline{x}^{2}\right)\\
 & =\sum_{i=1}^{n}x_{i}^{2}-\sum_{i=1}^{n}2x_{i}\overline{x}+\sum_{i=1}^{n}\overline{x}^{2}
\end{align}

\end{frame}

\begin{frame}{myalign}
\setcounter{equation}{0}

\begin{myalign}
\sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)^{2} & =\sum_{i=1}^{n}\left(x_{i}^{2}-2x_{i}\overline{x}+\overline{x}^{2}\right)\\
 & =\sum_{i=1}^{n}x_{i}^{2}-\sum_{i=1}^{n}2x_{i}\overline{x}+\sum_{i=1}^{n}\overline{x}^{2}
\end{myalign}

\end{frame}

\begin{frame}{align}
\setcounter{equation}{0}

\begin{align}
\pi(\omega) & =\pi(w_{L},w_{B})\\
 & =R(w_{L},w_{B})-C(w_{L})\\
 & =p_B\cdot\min(q_D(w_{B}),q_S(w_{L}))-p_S\cdot q_S(w_{L}).
\end{align}
\end{frame}

\begin{frame}{myalign}
\setcounter{equation}{0}

\begin{myalign}
\pi(\omega) & =\pi(w_{L},w_{B})\\
 & =R(w_{L},w_{B})-C(w_{L})\\
 & =p_B\cdot\min(q_D(w_{B}),q_S(w_{L}))-p_S\cdot q_S(w_{L}).
\end{myalign}
\end{frame}

\end{document}

(我尝试过的新手技巧,你可以跳过阅读):我无法判断问题是 tabularray 外部的居中,还是列规范的问题。我尝试\centering在各个地方添加,但似乎没有任何变化。我尝试使用各种列键进行实验,如tabularray 文档。删除column{1}={co=1}会产生明显的效果,但 tblr 似乎太靠左了。我尝试将 halign 设置为“c”(而不是默认的“j”表示对齐),但这似乎无法解决问题。更改 的值似乎也无法改善rightsep此问题。

答案1

您需要做的是仅使用方程式(没有公式编号或水平填充)来测量表格的宽度,然后将\textwidth之前测量的表格宽度的一半减去一半作为leftsep第一列。

\documentclass[handout]{beamer}

\usepackage{tabularray}
\UseTblrLibrary{counter}
\newsavebox\myalignbox
\NewDocumentEnvironment{myalign}{+b}{
    \sbox\myalignbox{%  
        \begin{tblr}{
                column{odd}={halign=r},
                column{even}={halign=l},
                colsep = 0pt,
                cells={mode=dmath}
            }
            #1
    \end{tblr}}
    \begin{tblr}{
            column{Z}={co=1},
            column{odd}={halign=r},
            column{even}={halign=l},
            colsep = 0pt,
            cells={mode=dmath},
            cell{1-Z}{1}={cmd=\action<+->},
            cell{1-Z}{2-Z}={cmd=\action<.->},
            cell{1-Z}{Z}={appto={\hfill \refstepcounter{equation}(\theequation)}},
            column{1}={leftsep={\dimexpr 0.5\textwidth-0.5\wd\myalignbox}}
        }
        #1
    \end{tblr}
}{}

\begin{document}
    
    \begin{frame}{align}
        \setcounter{equation}{0}
        
        \begin{align}
            \sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)^{2} & =\sum_{i=1}^{n}\left(x_{i}^{2}-2x_{i}\overline{x}+\overline{x}^{2}\right)\\
            & =\sum_{i=1}^{n}x_{i}^{2}-\sum_{i=1}^{n}2x_{i}\overline{x}+\sum_{i=1}^{n}\overline{x}^{2}
        \end{align}
        
    \end{frame}
    
    \begin{frame}{myalign}
        \setcounter{equation}{0}
        
        \begin{myalign}
            \sum_{i=1}^{n}\left(x_{i}-\overline{x}\right)^{2} & =\sum_{i=1}^{n}\left(x_{i}^{2}-2x_{i}\overline{x}+\overline{x}^{2}\right)\\
            & =\sum_{i=1}^{n}x_{i}^{2}-\sum_{i=1}^{n}2x_{i}\overline{x}+\sum_{i=1}^{n}\overline{x}^{2}
        \end{myalign}
        
    \end{frame}
    
    \begin{frame}{align}
        \setcounter{equation}{0}
        
        \begin{align}
            \pi(\omega) & =\pi(w_{L},w_{B})\\
            & =R(w_{L},w_{B})-C(w_{L})\\
            & =p_B\cdot\min(q_D(w_{B}),q_S(w_{L}))-p_S\cdot q_S(w_{L}).
        \end{align}
    \end{frame}
    
    \begin{frame}{myalign}
        \setcounter{equation}{0}
        
        \begin{myalign}
            \pi(\omega) & =\pi(w_{L},w_{B})\\
            & =R(w_{L},w_{B})-C(w_{L})\\
            & =p_B\cdot\min(q_D(w_{B}),q_S(w_{L}))-p_S\cdot q_S(w_{L}).
        \end{myalign}
    \end{frame}
    
\end{document}

编辑:

要修复列表内嵌套 myalign 的问题,请\textwidth用替换\linewidth

似乎您需要将 放入\refstepcounterpreto不是 中,并且仅当位于具有 的单元格内appto时,引用才是正确的。\label\refstepcounter

\label以下布局将允许在第一列使用

\NewDocumentEnvironment{myalign}{+b}{
    \sbox\myalignbox{%  
        \begin{tblr}{
                column{odd}={halign=r},
                column{even}={halign=l},
                colsep = 0pt,
                cells={mode=dmath}
            }
            #1
    \end{tblr}}
    \begin{tblr}{
            column{Z}={co=1},
            column{odd}={halign=r},
            column{even}={halign=l},
            colsep = 0pt,
            cells={mode=dmath},
            cell{1-Z}{1}={cmd=\action<+->},
            cell{1-Z}{2-Z}={cmd=\action<.->},
            cell{1-Z}{Z}={appto={\hfill (\theequation)}},
            column{1}={leftsep={\dimexpr 0.5\linewidth-0.5\wd\myalignbox}},
            column{1}={preto={\refstepcounter{equation}}},
        }
        #1
    \end{tblr}
}{}

\label如果你想在每个单元格中使用,请添加cell{1-Z}{2-Z}={preto={\addtocounter{equation}{-1}\refstepcounter{equation}}},到 tblr 选项,

相关内容