以下实际例子
\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\newcounter{tabcol}\newcounter{tabrow}
\newcolumntype{C}{>{\stepcounter{tabcol}}c}
\begin{document}
\[
\begin{array}{>{\stepcounter{tabrow}\setcounter{tabcol}{1}}CCC}
(\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) \\
(\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) \\
(\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) & (\thetabrow,\thetabcol)
\end{array}
\]
\end{document}
输出行和列索引:
受到以下建筑的启发:自动生成带有大量 + 和 - 的表格什么是最灵活的方式来实现上述适合标准tabular
和array
环境的行/列索引系统没有是否需要干预列规范?
例如,混合l
、c
和r
(和X
和其他)列类型需要定义一种新的列类型来为每一个这样的列类型,不太方便。
tabular
如上所述,我对将这些计数器与传统环境结合起来的技术感兴趣array
(因此不像tikz
矩阵)。
最终的目标是使用行/列索引来决定单元格内容(可能是颜色,可能是某些输出或其他内容);风格类似于以下基本示例:
\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\newcounter{tabcol}\newcounter{tabrow}
\newcolumntype{C}{>{\stepcounter{tabcol}}c}
\newcommand{\oddornot}{\relax\ifodd\numexpr\value{tabrow}+\value{tabcol}\relax odd\else even\fi}
\begin{document}
\begin{tabular}{>{\stepcounter{tabrow}\setcounter{tabcol}{1}}CCC}
\oddornot & \oddornot & \oddornot \\
\oddornot & \oddornot & \oddornot \\
\oddornot & \oddornot & \oddornot
\end{tabular}
\end{document}
我认为解决方案需要重新定义&
并\\
进行反击和更新。但是,如果不(可能)破坏其他东西,我不太愿意这样做。
答案1
与此类似(尽管要完成一项完整的工作,您必须更多地担心嵌套表(需要堆栈来重置和恢复全局计数器)和\multicolumn
(需要将列计数器推进适当的量)
\documentclass{article}
\usepackage{array}% http://ctan.org/pkg/array
\makeatletter
\def\insert@column{%
\the@toks \the \@tempcnta
\global\advance\c@tabcol\@ne
\ignorespaces \@sharp \unskip
\the@toks \the \count@ \relax}
\let\old@arraycr\@arraycr
\def\@arraycr{\global\c@tabcol\z@\global\advance\c@tabrow\@ne\old@arraycr}
\let\old@tabarray\@tabarray
\def\@tabarray{\global\c@tabrow\@ne\global\c@tabcol\z@\old@tabarray}
\makeatother
\newcounter{tabcol}\newcounter{tabrow}
\begin{document}
\[
\begin{array}{ccc}
(\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) \\
(\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) \\
(\thetabrow,\thetabcol) & (\thetabrow,\thetabcol) & (\thetabrow,\thetabcol)
\end{array}
\]
\end{document}
答案2
{NiceArray}
的环境与经典的(包的)nicematrix
类似,但(除其他功能外)具有内置的 LaTeX 计数器和行和列。{array}
array
iRow
jCol
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[
\begin{NiceArray}{ccc}
(\arabic{iRow},\arabic{jCol}) & (\arabic{iRow},\arabic{jCol}) & (\arabic{iRow},\arabic{jCol}) \\
(\arabic{iRow},\arabic{jCol}) & (\arabic{iRow},\arabic{jCol}) & (\arabic{iRow},\arabic{jCol}) \\
(\arabic{iRow},\arabic{jCol}) & (\arabic{iRow},\arabic{jCol}) & (\arabic{iRow},\arabic{jCol})
\end{NiceArray}
\]
\end{document}
事实上,nicematrix
还有一个\AutoNiceMatrix
从模式构建矩阵的命令。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\[\AutoNiceMatrix{6-6}{(\arabic{iRow},\arabic{jCol})}\]
\end{document}