用于数组/表格单元格的计数器

用于数组/表格单元格的计数器

以下实际例子

\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}​

输出行和列索引:

在此处输入图片描述

受到以下建筑的启发:自动生成带有大量 + 和 - 的表格什么是最灵活的方式来实现上述适合标准tabulararray环境的行/列索引系统没有是否需要干预列规范?

例如,混合lcr(和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}arrayiRowjCol

\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}​

第二段代码的输出

相关内容