\newcolumntype 具有自动 & 插入功能

\newcolumntype 具有自动 & 插入功能

简而言之:我想使用\newcolumntypearray包定义一种新的表格列类型,该包设计为不会作为tabular环境中的最后一列出现,但会添加自动&制表符对齐(像往常一样分隔两个单元格)。

一种特殊情况是N表格第一列的行编号类型(参见下面 MWE 中的定义),例如

\begin{tabular}{Nrr}
  Line & One \tabularnewline
  Line & Two \tabularnewline
\end{tabular}

与明确输入相同&(当然,使用Ntype with 不会自动添加)&

\begin{tabular}{Nrr}
  & Line & One \tabularnewline
  & Line & Two \tabularnewline
\end{tabular}

请注意,编号只是一个例子。这个问题具有更普遍的性质,适用于“任何”用户定义的列类型

我失败了,因为 LaTeX 抱怨

! Missing # inserted in alignment preamble.
<to be read again> 
                   &
l.15 \begin{tabular}{Nrr}

我猜这是一个\catcode问题,但我不知道如何改变它。

这种自动&插入是否可能实现?

\documentclass{article}

\usepackage{array}
\usepackage{xpatch}
\newcounter{tabline}

%\newcolumntype{N}{>{\stepcounter{tabline}\thetabline &\arraybackslash}r} % does not work

\xpretocmd{\tabular}{\setcounter{tabline}{0}}{}{} % Lazy, I know 

\newcolumntype{N}{>{\stepcounter{tabline}\thetabline \arraybackslash}r}

\begin{document}

\begin{tabular}{Nrr}
  Line & One \tabularnewline
  Line & Two \tabularnewline
\end{tabular}

\begin{tabular}{Nrr}
  & Line & One \tabularnewline
  & Line & Two \tabularnewline
\end{tabular}


\end{document}

我省略了屏幕截图,因为(原始)表格的样子很清楚(当然,实际情况更为复杂)。

答案1

这实际上是可能的,但非常脆弱,通常不需要,例如行编号可以按如下方式进行:

 \documentclass{article}
\usepackage{xpatch}
\usepackage{array}

\newcounter{tabline}

\xpretocmd{\tabular}{\setcounter{tabline}{0}}{}{} % Lazy, I know 

\newcolumntype{N}{!{\refstepcounter{tabline}\thetabline}}

\begin{document}

\begin{tabular}{Nrr}
  Line & One \tabularnewline
  Line & Two \tabularnewline
\end{tabular}

\begin{tabular}{Nrr}
   Line & One \tabularnewline
   Line & Two \tabularnewline
\end{tabular}


\end{document}

如果你够勇敢,可以选择

\documentclass{article}

\usepackage{blkarray}

\newcounter{tabline}


\begin{document}


\makeatletter
\begin{blockarray}{lrr}
col1&col2&col3\\
\begin{block}{\BAmulticolumn{2}{>{\refstepcounter{tabline}\thetabline\hfill}r}r}
   Line & One \\
   Line & Two \\
\end{block}
\end{blockarray}


\end{document}

答案2

我将把行号设置为列分隔的一部分,使用类似如下的方法:

\newcolumntype{N}{@{\refstepcounter{tabline}\thetabline\hspace{\tabcolsep}}}

在此处输入图片描述

\documentclass{article}

\usepackage{array,xpatch}
\newcounter{tabline}

\xpretocmd{\tabular}{\setcounter{tabline}{0}}{}{} % Lazy, I know 

\newcolumntype{N}{@{\refstepcounter{tabline}\thetabline\hspace{\tabcolsep}}}

\begin{document}

\begin{tabular}{Nrr}
  Line & One \tabularnewline
  Line & Two \tabularnewline
\end{tabular}

\begin{tabular}{|N|r|r|}
  Line & One \tabularnewline
  Line & Two \tabularnewline
\end{tabular}

\end{document}

如果您想在左侧插入适当的间距,可能需要更多增强功能。但是,这些是可以插入到N列类型的附加选项。

相关内容