使用命令在全局表中添加内容

使用命令在全局表中添加内容

您好,我对 Latex 还不太熟悉。我现在还不明白如何创建一个命令,该命令允许您使用您使用的命令的输入中指定的内容填充表格(之前创建的)。假设您有两个命令:\inMyTable\createMyTable。它们是我想要创建的命令。

\inMyTable{1}{Books}{10/14/16}
some other text here
\inMyTable{2}{Magazines}{10/15/16}
\inMyTable{3}{Computers}{10/16/16}
\createMyTable

将创建一个包含以下内容的表:

1 | Books     | 10/14/16
2 | Magazines | 10/15/16
3 | Computers | 10/16/16

我知道如何创建简单的命令以及如何使用它们。但这似乎需要其他东西,例如数据结构,否则我就不知道了。遗憾的是,我不知道在网上搜索什么,我找不到任何有用的关键字来解决这个问题。

有人能帮助我了解如何创建一个简单的命令来实现这个目标吗?

答案1

在此处输入图片描述

\documentclass{article}

\newcommand\startMyTable{\def\MyTable{\begin{tabular}{|l|l|l|}}}

\newcommand\inMyTable[3]{%
 \edef\MyTable{%
   \expandafter\unexpanded\expandafter{\MyTable#1&#2&#3\\}}}

\newcommand\createMyTable{\begin{center}\MyTable\end{tabular}\end{center}}
\begin{document}



\startMyTable   


\inMyTable{1}{Books}{10/14/16}
some other text here
\inMyTable{2}{Magazines}{10/15/16}
\inMyTable{3}{Computers}{10/16/16}
\createMyTable

\end{document}

答案2

由于 OP 明确提供了行索引作为 的第一个参数\inMyTable,我认为这意味着行可能无序输入。否则,就不需要传递行索引,而是使用递增计数器来推进行。

考虑到这一点,这里有一个基于标记的版本,允许以任何顺序输入行,并且在输入行时(通过间接寻址)按列 1 索引排序。

\documentclass{article}
\usepackage{ifthen}
\newcounter{rowindex}
\newtoks\mytabtoks
\newcommand{\AddToToks}[2]{#1\expandafter{\the#1#2}}
\newcommand{\XAddToToks}[2]{\expandafter\AddToToks\expandafter#1\expandafter{#2}}
\newcommand\inMyTable[3]{%
  \expandafter\def\csname itr[#1,1]\endcsname{#2}%
  \expandafter\def\csname itr[#1,2]\endcsname{#3}%
  \ifnum#1>0\csname MyTabRows\endcsname\relax\def\MyTabRows{#1}\fi%
}
\newcommand\createMyTable{%
  \setcounter{rowindex}{0}%
  \whiledo{\value{rowindex}<\MyTabRows}{%
    \ifnum\therowindex>0\relax\AddToToks\mytabtoks{\\}\fi%
    \stepcounter{rowindex}%
    \edef\colA{\therowindex&
     \csname itr[\therowindex,1]\endcsname &
    \csname itr[\therowindex,2]\endcsname}%
    \XAddToToks\mytabtoks{\colA}%
  }%
  \begin{tabular}{|r|l|r|}
  \the\mytabtoks
  \end{tabular}%
}
\newcommand\resetMyTable{%
  \setcounter{rowindex}{0}%
  \whiledo{\value{rowindex}<\MyTabRows}{%
    \stepcounter{rowindex}%
    \expandafter\let\csname itr[\therowindex,1]\endcsname\relax%
    \expandafter\let\csname itr[\therowindex,2]\endcsname\relax%
  }%
  \def\MyTabRows{0}%
  \mytabtoks{}%
}
\begin{document}
\inMyTable{4}{Computers}{10/16/16}
\inMyTable{1}{Books}{10/14/16}
some other text here
\inMyTable{2}{Magazines}{10/15/16}

\createMyTable
\bigskip

\resetMyTable
\inMyTable{3}{Magazines}{10/15/16}
some other text here
\inMyTable{1}{Books}{10/14/16}

\createMyTable
\end{document}

在此处输入图片描述

相关内容