您好,我对 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\\}}}
\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}