我有一组很长的方程式,我把它们放在一个数组中。它们必须按以下方式对齐:
\begin{array}{lclc}
A & Long expression & \text{\hspace{.5cm}} & Long expression \\
.
.
.
Z & Long expression & \text{\hspace{.5cm}} & Long expression \\
\end{array}
这是为了让你知道表达式可以有多长。此外,第二和第四个部分必须居中。我想使用对齐,因为它允许在方程太长的情况下分页,但如果我使用它们,那么对齐的第二和第四个部分就不再居中了。我怎样才能拥有如下结构:
\begin{align}
A & Long centered expression & \text{\hspace{.5cm}} & Long centered expression \\
.
.
.
Z & Long centered expression & \text{\hspace{.5cm}} & Long centered expression \\
\end{align}
我需要对方程式进行编号、居中,如果它们太长的话还可以分成多页。
编辑
我添加一个例子:
\[
\begin{array}{lclc}
A & This is a very long expression & \text{\hspace{.5cm}} & Also this is a long expression \\
B & Normal & \text{\hspace{.5cm}} & Something \\
Z & Short & \text{\hspace{.5cm}} & This is even longer expression of before \\
\end{array}
\]
如果您在 TeX 文件上尝试此操作,则第二列和第四列将根据其内容居中。如果我有一个非常长的表达式,那么如果我使用数组,则方程式可能不适合页面,因为它不能分成多个页面。所以我考虑使用 \allowpagebreaks[1] 对齐。但如果我使用
\[
\begin{align}
A & This is a very long expression & \text{\hspace{.5cm}} & Also this is a long expression \\
B & Normal & \text{\hspace{.5cm}} & Something \\
Z & Short & \text{\hspace{.5cm}} & This is even longer expression of before \\
\end{align}
\]
您会看到第二列和第四列的对齐是相对于 & 符号的,而不是相对于其内容居中。
我希望这个例子能解释我的问题
答案1
请注意,您不能align
在里面。\[
最简单和最常见的方法是在表达式中添加对齐点,使它们与对齐点对齐,而不是看起来与左侧或右侧齐平。我在这里添加了 | 以使对齐在输出中可见,但这不是必需的。请注意,即使我删除了 0.5 厘米的间距(没有必要\hspace
在里面),示例文本已经太宽,无法放入标准文本块中\text
)如果您的文本块更宽或您的实际表达式更小,您当然可以重新添加间距,尽管align
已经在每个表达式之间添加了空格(即在每对列之间)
\documentclass[a4paper]{article}
\usepackage{amsmath}
\begin{document}
\begin{align}
A && This isa very&|long expression & Also this &|is a long expression \\
B && Normal&| & Some&|thing \\
Z && Short&| & This is even &|longer expression of before
\end{align}
\end{document}
答案2
您可以使用 和 来完成此操作alignat
。eqparbox
系统会为每个显示器自动生成箱子的标签align-lcc
。
不'添加尾随的\\
, 因为对于align
和 朋友来说这是强制性的。
\documentclass{article}
\usepackage{amsmath,eqparbox}
\ExplSyntaxOn
\NewDocumentEnvironment{align-lcc}{b}
{
\mininno_align_lcc:n { #1 }
}
{}
\seq_new:N \l__mininno_align_body_seq
\seq_new:N \l__mininno_align_row_seq
\tl_new:N \l__mininno_align_body_tl
\int_new:N \g__mininno_align_rows_int
\cs_new_protected:Nn \mininno_align_lcc:n
{
\int_gincr:N \g__mininno_align_rows_int
\tl_clear:N \l__mininno_align_body_tl
\seq_set_split:Nnn \l__mininno_align_body_seq { \\ } { #1 }
\seq_map_indexed_function:NN \l__mininno_align_body_seq \__mininno_align_row:nn
\begin{alignat}{3}
\tl_use:N \l__mininno_align_body_tl
\end{alignat}
}
\cs_new_protected:Nn \__mininno_align_row:nn
{
\seq_set_split:Nnn \l__mininno_align_row_seq { & } { #2 }
\tl_put_right:Nx \l__mininno_align_body_tl { \seq_item:Nn \l__mininno_align_row_seq { 1 } }
\tl_put_right:Nx \l__mininno_align_body_tl
{
\__mininno_align_cell:nn {A}{\seq_item:Nn \l__mininno_align_row_seq { 2 }}
}
\tl_put_right:Nx \l__mininno_align_body_tl
{
\__mininno_align_cell:nn {B}{\seq_item:Nn \l__mininno_align_row_seq { 3 }}
}
\int_compare:nF { #1 == \seq_count:N \l__mininno_align_body_seq }
{ \tl_put_right:Nn \l__mininno_align_body_tl { \\ } }
}
\cs_new_protected:Nn \__mininno_align_cell:nn
{
&\quad&
\eqmakebox[#1-\int_to_arabic:n {\g__mininno_align_rows_int}][c]{$\displaystyle#2$}
}
\ExplSyntaxOff
\begin{document}
\begin{align-lcc}
A & This is a very long expression & Also this is a long expression \\
B & Normal & Something \\
Z & Short & This is even longer expression of before
\end{align-lcc}
\end{document}
其想法是将输入拆分为\\
,然后将每一行拆分为&
并使用填写\eqmakebox
。