为每个元素添加一个数字

为每个元素添加一个数字

我有一张表,其条目是一个或多个数字的列表。现在,我需要将表中的所有数字增加 1。例如,我有一张表:

\documentclass{article}

\begin{document}
    \begin{table}
        \begin{tabular}{|l|l|l|}
            \hline
            1, 2, 4  & 2, 3, 4 & 5, 0, 1 \\ \hline
            1, 2 & 3 & 2, 5, 7 \\  \hline
        \end{tabular}
    \end{table}
\end{document}

我希望第一行第一列的条目为2, 3, 5,... 等等。我该怎么做?

更新

非常感谢@egreg以获得此快速解决方案。我只需要知道一件事:我怎样才能保持某些单元格原样。假设我的表格如下:

\documentclass{article}

\begin{document}
    \begin{table}
        \begin{tabular}{|l|l|l|}
            \hline
            1, 2, 4  & None & 5, 0, 1 \\ \hline
            1, 2 & 3 & None \\  \hline
        \end{tabular}
    \end{table}
\end{document}

我可以保持None完整吗?

答案1

就是这个!collcell我们将单元格的内容传递给宏\increment进行处理。

\documentclass{article}
\usepackage{xparse,collcell,booktabs}

\ExplSyntaxOn
\NewDocumentCommand{\increment}{m}
 {
  \pushpen_increment_cell:n { #1 }
 }

\seq_new:N \l_pushpen_cell_seq
\seq_new:N \l_pushpen_cell_incr_seq

\cs_new_protected:Npn \pushpen_increment_cell:n #1
 {
  % split the cell contents into a sequence
  \seq_set_split:Nnn \l_pushpen_cell_seq { , } { #1 }
  % map the sequence into another incrementing each item
  \seq_set_map:NNn \l_pushpen_cell_incr_seq \l_pushpen_cell_seq { \int_eval:n { ##1 + 1 } }
  % produce the sequence, items are separated by “comma and space”
  \seq_use:Nn \l_pushpen_cell_incr_seq { ,~ }
 }
\ExplSyntaxOff

\newcommand{\None}{\multicolumn{1}{l}{None}}

\begin{document}

\begin{tabular}{ *{3}{>{\collectcell\increment}l<{\endcollectcell}} }
\toprule
1, 2, 4  & 2, 3, 4 & 5, 0, 1 \\
\midrule
1, 2 & 3 & 2, 5, 7 \\
\midrule
1, 2 & 3 & \None \\
\bottomrule
\end{tabular}

\end{document}

在此处输入图片描述

相同,但代码更加笨拙:

\documentclass{article}
\usepackage{etoolbox,collcell}

\newcounter{liststep}
\newrobustcmd\increment[1]{%
  \setcounter{liststep}{0}%
  \forcsvlist{\addone}{#1}%
}
\newcommand\addone[1]{%
  \ifnum\value{liststep}>0 , \fi
  \number\numexpr#1+1\relax
  \stepcounter{liststep}%
}

\begin{document}

\begin{tabular}{| *{3}{>{\collectcell\increment}l<{\endcollectcell}|} }
\hline
1, 2, 4  & 2, 3, 4 & 5, 0, 1 \\ \hline
1, 2 & 3 & 2, 5, 7 \\  \hline
\end{tabular}

\end{document}

相关内容