简而言之:我想使用\newcolumntype
该array
包定义一种新的表格列类型,该包设计为不会作为tabular
环境中的最后一列出现,但会添加自动&
制表符对齐(像往常一样分隔两个单元格)。
一种特殊情况是N
表格第一列的行编号类型(参见下面 MWE 中的定义),例如
\begin{tabular}{Nrr}
Line & One \tabularnewline
Line & Two \tabularnewline
\end{tabular}
与明确输入相同&
(当然,使用N
type 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
列类型的附加选项。