这就是我尝试使用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}