检查剩余的代币数量是否足够

检查剩余的代币数量是否足够

我想使用一个需要大量参数的命令,可能比输入流中剩下的还多。

\def\consumeseven#1#2#3#4#5#6#7{}
\consumeseven
\space

在这种情况下\consumeseven将看到\space它的第一个参数,然后抱怨“文件在扫描使用 \consumeseven 时结束”。

能做些什么来解决这个问题吗?有没有办法检查输入流中是否还留有足够数量的参数?


我是怎么想到这个的?(用例)

我正在尝试\obeylines扫描主文档的源代码以进行缩进。为此,我想用\def ^^M(换行符)检查一行的前几个标记。但是,当处理最后一个活动换行符时,这会导致失败,因为此行只有一个标记,\end。我知道我可以将整个文档扫描为一个由分隔的单个参数,\end并在其中附加一些伪标记,或者逐行扫描文件。但我考虑是否可以选择使用宏来防止文件结尾,因此提出了这个问题。

答案1

仅用三个论点来说明这个想法。

在此处输入图片描述

逐一阅读论点。

\def\consumethree#1{%
\def\arga{?}\def\argb{?}\def\argc{?}%
\ifx\end#1%
\message{stopping}\consume\expandafter\end
\else
\def\arga{#1}
\expandafter\consumetwo
\fi
}

\def\consumetwo#1{%
\ifx\end#1%
\message{stopping}\consume\expandafter\end
\else
\def\argb{#1}
\expandafter\consumeone
\fi
}

\def\consumeone#1{%
\ifx\end#1%
\message{stopping}\consume\expandafter\end
\else
\def\argc{#1}
\expandafter\consume
\fi
}

\def\consume{[\arga][\argb][\argc]}

\consumethree a b c

\consumethree a
\end

相关内容