在 LaTeX 表格中重复序言

在 LaTeX 表格中重复序言

TeX 基元\halign允许重复前导,每个表格等都是基于此构建的。查看以下代码的输出可以最轻松地解释它是什么。

\documentclass{article}
\usepackage{array}
\newcolumntype{\repeat}{<{\span\doublenextamp}}
\def\doublenextamp#1&{#1&&}
\begin{document}

First test.
\begin{tabular}{c\repeat lr}
    a   & b   & d     &e   & f     & apsdoi \\
    cde & def & erasd &arp & sefoi & wp     
\end{tabular}

\end{document}

这节省了大量的打字工作,并且,对于自动生成的表,还节省了大量自己计算列数的工作。

但是,我只能在 LaTeX 中让它在从第二列或更多列开始重复时工作,而不是重复整个序言。这是因为 LaTeX(或者说软件包array?)在用户可以输入的任何内容之前插入了很多内容,但 TeX 希望将额外的内容&(标记重复的内容)放在首位。

两个问题:

  • 有没有打包的解决方案?

  • 是否存在具有简洁用户界面的自定义解决方案?

答案1

这是一个通过修改包内部结构来实现的解决方案array

\documentclass{article}
\usepackage{array}
\makeatletter
\newcommand*\repeatall{%
        \def\@arstrut{&\unhbox\@arstrutbox}%
}
\newcommand*\repeatnone{%
        \def\@arstrut{\unhbox\@arstrutbox}%
}
\makeatother
\begin{document}
\repeatall
\begin{tabular}{l}
a&b&c\\
d&e&f\\
\end{tabular}
\end{document}

或许将其变成环境而不是开关会更好。

\newenvironment{repeattabular}{%
        \repeatall
        \tabular
}{%
        \endtabular
}

答案2

这并不能完全回答你的问题,但可能对那些需求较少的人有帮助,所以我把它包括在这里。你可以*n{c}使用n类型的列c。您可以使用*n{lr}来获取n lr列。使用该array包,您可以对任何定义的列类型执行此操作:

\documentclass{article}
\usepackage{array}

\newcolumntype{L}{lr}

\begin{document}
\begin{tabular}{*3{L}}
    a   & b   & d     &e   & f     & apsdoi \\
    cde & def & erasd &arp & sefoi & wp    
\end{tabular}
\end{document}

当然,这不会动态分配列,但根据自动生成的表的创建方式,您可能提前知道需要重复的列数。

相关内容