我想制作一个包含所有数字的平方的两列表格。使用以下代码,第一列中的等号和数字之间没有适当的间距,第二列中的等号未排版。
\documentclass{amsart}
\usepackage{amsmath}
\begin{document}
$$
\begin{array}{r@{${}={}$}lc@{\qquad\qquad}cr@{${}={}$}l}
0^2&0, & 5^2&25, \\
1^2&1, & 6^2&36, \\
2^2&4, & 7^2&49, \\
3^2&9, & 8^2&64, \\
4^2&16, & 9^2&81.
\end{array}
$$
\end{document}
我希望得到有关如何仅使用数组环境来执行此操作的提示。
答案1
答案2
您可以要求 TeX 以您喜欢的任意基数(最多 36)自行进行计算。
\documentclass{article}
\usepackage{xparse,array,booktabs}
\ExplSyntaxOn
\NewDocumentCommand{\digitsquares}{sO{c}m}
{% #1 * option for the header, #2 = alignment, #3 = radix
\IfBooleanTF { #1 }
{
\tl_set:Nn \l_tmpa_tl { \multicolumn{6}{c}{\mbox{Base ~ $#3$}} \\ \midrule }
}
{
\tl_clear:N \l_tmpa_tl
}
\int_step_inline:nnn { 0 } { \int_div_round:nn { #3 } { 2 } - 1 }
{
\tl_put_right:Nx \l_tmpa_tl
{
\int_to_Base:nn { ##1 } { #3 } ^2 & = & \int_to_Base:nn { (##1)*(##1) } { #3 } &
\int_compare:nT { ##1 + \int_div_round:nn { #3 } { 2 } < #3 }
{
\int_to_Base:nn { ##1 + \int_div_round:nn { #3 } { 2 } } { #3 }^2 & = &
\int_to_Base:nn
{
(##1 + \int_div_round:nn { #3 } { 2 })*
(##1 + \int_div_round:nn { #3 } { 2 })
} { #3 }
\exp_not:N \\
}
}
}
\begin{array}[#2]{@{} r @{} >{{}}c<{{}} @{} l @{\qquad} r @{} >{{}}c<{{}} @{} l @{}}
\l_tmpa_tl
\end{array}
}
\ExplSyntaxOff
\begin{document}
\[
\digitsquares*[t]{10} \qquad \digitsquares*[t]{7}
\]
\[
\digitsquares{16}
\]
\end{document}
表示*
我们需要标题;可选参数用于将对齐选项传递给array
。强制参数是基数。
序言array
由两部分组成
r @{} >{{}}c<{{}} @{} l
即:右对齐列,无空格,居中列,{}
项目两侧(这将是符号=
),左对齐列;中间有\qquad
分隔符。前导和尾随@{}
使数组两侧的填充无效。
答案3
我使用的平台显然不允许数组环境的所有选项。它可能只允许、、l
和。我修改了代码,以便它能准确地满足我的要求。r
c
@{\qquad}
\documentclass{amsart}
\usepackage{amsmath}
\begin{document}
$$\begin{array}{r@{}l @{\qquad\qquad} r@{}l}
0^2 &{}={} 0, & 5^2 &{}={} 25, \\
1^2 &{}={} 1, & 6^2 &{}={} 36, \\
2^2 &{}={} 4, & 7^2 &{}={} 49, \\
3^2 &{}={} 9, & 8^2 &{}={} 64, \\
4^2 &{}={} 16, & 9^2 &{}={} 81.
\end{array}$$
\end{document}