![将数学列的表格阵列居中](https://linux22.com/image/459409/%E5%B0%86%E6%95%B0%E5%AD%A6%E5%88%97%E7%9A%84%E8%A1%A8%E6%A0%BC%E9%98%B5%E5%88%97%E5%B1%85%E4%B8%AD.png)
我有一个依赖于 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
。
似乎您需要将 放入\refstepcounter
而preto
不是 中,并且仅当位于具有 的单元格内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 选项,