自动开始和结束表格\在重复宏的第一个实例之前和最后一个实例之后运行代码

自动开始和结束表格\在重复宏的第一个实例之前和最后一个实例之后运行代码

我正在为一个文档编写一个类,该类将许多简单段落格式化为表格。我知道,所有表格都有固定的列数,但行数可变。我想要做的是编写一个宏,如果发出一次,则创建一个单行表,如果发出 n 次,则创建一个 n 行表。我对一个通用解决方案感兴趣,它允许在宏的第一个实例之前和最后一个(但不在中间)重复调用同一个宏之后插入任何代码。以下是我想要实现的输出的一个最小示例:

\documentclass[a4paper]{scrarticle}

\usepackage{tabularx}

\begin{document}

One row example: 

\begin{tabular}{|c|c|}
\hline
Some & Text\\
\hline
\end{tabular}

Two row example:

\begin{tabular}{|c|c|}
\hline
Some & Text\\
\hline
Other & Line\\
\hline
\end{tabular}


\end{document}

我想要一个命令,让我只写表格行,其他的都会自动添加。因此,使用一个假设的命令,autotable上面的示例将如下所示:

[...]
\begin{document}
One row example: 

\autotable{Some}{Text}

Two row example:

\autotable{Some}{Text}
\autotable{Other}{Line}

\end{document}

简洁的答案解释为什么这是不可能的(如果是这样)也会很有帮助,因为如果需要,我可以使用 python/jinja 来实现类似的功能。并非完全不相关的问题:提前查看标记流?宏:根据模式进行不同扩展?

编辑

这是从 David 接受的解决方案中获取的代码,并添加了以下内容,\hlines因此创建的输出与初始最小示例的精确输出相匹配:

\documentclass[a4paper]{scrarticle}

\makeatletter

\def\autotable{\par\begin{tabular}{|c|c|}
\hline
\autotable@row}

\def\autotable@row#1#2{%
#1&#2
\@ifnextchar\autotable\autotable@gobble{\\\hline\end{tabular}\par}}

\def\autotable@gobble#1{\\\hline\autotable@row}

\makeatother
\begin{document}

One row example: 

\autotable{Some}{Text}

Two row example:

\autotable{Some}{Text}
\autotable{Other}{Line}


\end{document}

答案1

您可以使用\@ifnextchar向前看,跳过行尾的空白

\documentclass[a4paper]{scrarticle}

\makeatletter

\def\autotable{\par\begin{tabular}{|c|c|}\autotable@row}

\def\autotable@row#1#2{%
#1&#2%
\@ifnextchar\autotable\autotable@gobble{\end{tabular}\par}}

\def\autotable@gobble#1{\\\autotable@row}

\makeatother
\begin{document}

One row example: 

\autotable{Some}{Text}

Two row example:

\autotable{Some}{Text}
\autotable{Other}{Line}


\end{document}

在此处输入图片描述

相关内容