tokcycle的缓冲区该如何处理?

tokcycle的缓冲区该如何处理?

这就是我尝试使用tokcycle包实现的目标:

\documentclass{article}
\usepackage{tokcycle}
\newcommand\flush{..} % close the buffer, print it, and open a new one
\newcommand\click{..} % print the buffer and don't close it
\begin{document}
\tokencyclexpress
First
\click
Second
\flush
Third
\endtokencyclexpress
\end{document}

我期望看到:

First
First Second
Third

答案1

默认情况下,tokencycle 将其输入流累积在 token 列表 中\cytoks。但是,在这里,宏\click\flush被拦截,并在发现时在消化输入流的过程中执行。宏\click输出当前已消化的输入流(后跟\par)并继续消化,而\flush执行\click但随后清除输入流中已消化的内容。

在令牌循环结束时,消化后的输入缓冲区中剩余的内容将被输出。

\documentclass{article}
\usepackage{tokcycle}
\Macrodirective{\ifx\click#1\click\else\ifx\flush#1\flush\else
  \addcytoks{#1}\fi\fi}
\newcommand\flush{\click\cytoks{}} % print the buffer and reset it
\newcommand\click{\the\cytoks\par} % print the buffer and don't close it
\begin{document}
\tokencyclexpress
First
\click
Second
\flush
Third
\endtokencyclexpress
\end{document}

在此处输入图片描述

相关内容