如何在命令中使用 \tokencyclexpress?

如何在命令中使用 \tokencyclexpress?

这段代码有什么问题(它无法编译):

\documentclass{article}
\usepackage{tokcycle}
\newcommand\flush{\endtokencyclexpress\par\tokencyclexpress}
\begin{document}
\tokencyclexpress
First
\flush
Second
\endtokencyclexpress
\end{document}

如果我将正文放入\flush文档中,则一切都正常。

答案1

正如我所评论的,错误在于必须在输入流中找到实际的\endtokencyclexpress(或合适的等价物\endtokcycraw)才能终止它。\def它的 'ed 版本是不够的。

也许这就是你要找的。虽然令牌循环通常会累积令牌,但宏\flush是在输入流中遇到时唯一真正执行的宏。

每次\flush遇到 时,它都会输出\the\cytoks\par,它会全局累积\cytoks\cumtoks,并重置\cytoks。这有点像结束循环并开始新的循环,但并不完全相同。

我还没有调查过如果你\flush从一个组内部调用会发生什么,但不用说,你不应该这样做。

\documentclass{article}
\usepackage{tokcycle}
\newtoks\cumtoks

\xtokcycleenvironment\accumstart
  {\whennotprocessingparameter##1{\addcytoks{##1}}}
  {\processtoks{##1}}
  {\tctestifx{\flush##1}{\flush}{\addcytoks{##1}}}
  {\addcytoks{##1}}
  {\let\stop\endaccumstart}
  {\tcafterenv{\cumtoks\expandafter\expandafter\expandafter{%
    \expandafter\the\expandafter\cumtoks\the\cytoks}%
   \def\print{\the\cumtoks}}}

\newcommand\flush{\the\cytoks\par
  \global\cumtoks\expandafter\expandafter\expandafter{%
    \expandafter\the\expandafter\cumtoks\the\cytoks}%
  \cytoks{}%
}
%\newcommand\flush{\endtokencyclexpress\par\tokencyclexpress}
\begin{document}
\accumstart 
First
\flush
Second
\flush
Third
\stop

\print
\end{document}

在此处输入图片描述

相关内容