这个数组前导中的所有这些 @{} 和 @{\quad} 是什么意思?

这个数组前导中的所有这些 @{} 和 @{\quad} 是什么意思?

当我读到不同的问题时这个我发现了数组环境的代码,其前言是相当未知的...我知道它的作用,但我想理解它,以便能够在不同情况下使用该技术...我明白“ c”“ l”“ r”的意思,但不明白其余部分:

\[
\begin{array}{@{}r@{}l@{\quad}@{}r@{}l@{}}
a&{}=bbb & c&{}=\dfrac{x}{y} \\
aa&{}=bbbb & cc&{}=\dfrac{x}{y}
\end{array}
\]

我试图以这样的形式应用它,即我只有一个居中列,然后左右两侧根据 = 内部对齐,因此我 \begin{array}{c@{\quad}@{}r@{}l@{}}按照上面的例子在环境中写了一些东西,但是它给了我一个错误,即数组前言中有未知字符...所以很明显我不明白那些“ @{}“resp “ @{\quad}”部分,我在网上找不到满意的答案......

答案1

array在(或) latex的每一列的两侧tabular添加\arraycolsep) (或\tabcolsep)个空格,因此通常列之间tabular会有空格。2\arraycolsep

如果你走的话@{hello}反而在每行的列之间添加乳胶插入物的空间hello

有时你会看到这样的形式,r@{\mbox{--}}l 看起来2 & 3像2-3

然而,最常见的形式是@{}不添加任何内容但删除列间空间。

\quad是的缩写,\hspace{1em}因此@{\quad}将列间距从2\arraycolsep(通常为 10pt)更改为1em(通常为 10pt)。

答案2

tabular以下是在或 的序言构造中提到此符号的正式参考array

  • source2e(部分56.2arraytabular环境,第 300 页)

    array或环境的 PREAMBLE 参数tabular可以包含以下内容:

    • l,,rc指示要放置条目的位置。
    • |: 表示垂直规则
    • @{EXP}EXP:在每一列中插入文本。
      \arraycolsep\tabcolsep抑制间距。
    • *{N}{PRE}:相当于在序言中写了N副本。可能包含表达式。PRE
      PRE*{N’}{EXP’}
    • p{LEN}:输入\parbox宽度LEN

表 1(第 2 页)中也提到了这一点array包裹 文档

@{<stuff>}抑制列间分离并改用<stuff>

答案3

David Carlisle 已经对做什么@{}@{\quad}做什么给出了详尽的回答。我想补充一点关于如何array首先更优雅地设置代码的意见,这样就可以避免需要五个 [5!] 指令实例@{}

\setlength\arraycolsep{0pt}具体来说,通过在 之后立即插入指令,可以避免\[所有五个 实例,从而简化设置 结构的代码:@{}array

\documentclass{article}
\usepackage{amsmath} % for "\dfrac" macro
\begin{document}
\[
  \setlength\arraycolsep{0pt} % default value: 5pt
  \begin{array}{rl @{\quad} rl}
     a&{}=bbb  &  c&{}=\dfrac{x}{y} \\[3ex]
    aa&{}=bbbb & cc&{}=\dfrac{x}{y}
  \end{array}
\]
\end{document}

相关内容