这就是我想做的事情:
\documentclass{article}
\begin{document}
\start
Hello, world!
\stop
\print % here!
\end{document}
我期望Hello, world!
打印两次。第二次由\print
命令打印。我想\start
开始监听正在打印的所有内容,然后\stop
停止它并将所有内容放入变量/命令中\print
。
答案1
教学循环使用替代语法来实现这一点。如果您需要 digest #
-style 参数,则需要更多。
在这种情况下,多变的存储环境的是令牌列表\cytoks
。
\documentclass{article}
\usepackage{tokcycle}
\begin{document}
\tokencyclexpress
Hello, world!
\endtokencyclexpress
\the\cytoks % here!
\end{document}
如果你想要精确的语法在 OP 的问题中描述,并且想要消化# 样式的参数,那么这个扩展的tokcycle 环境就可以做到。
此外,这个 MWE 表明环境不仅仅存储执行环境的结果,还存储组成它的令牌。我们看到,改变 的值\ifmymode
会改变 的输出\print
。
\documentclass{article}
\usepackage{tokcycle}
\xtokcycleenvironment\start
{\whennotprocessingparameter##1{\addcytoks{##1}}}
{\processtoks{##1}}
{\addcytoks{##1}}
{\addcytoks{##1}}
{\let\stop\endstart}
{\tcafterenv{\def\print{\the\cytoks}}}
\newif\ifmymode
\begin{document}
\mymodefalse
\start
\newcommand\z[1]{\ifmymode This is it: #1\else Fuggedaboutit!\fi}
Testing ``\z{Hi Mom}''
\stop
\mymodetrue
\print % here!
\end{document}
当然,真正的强大之处tokcycle
不只是收集标记,还在于提供在输入流中操纵它们的能力。例如,除了所有先前的内容之外,还可以设置环境以将所有i
标记更改为I
(假设这种更改不会破坏任何宏):
\documentclass{article}
\usepackage{tokcycle}
\xtokcycleenvironment\start
{\whennotprocessingparameter##1{\ifx i##1\addcytoks{I}\else
\addcytoks{##1}\fi}}
{\processtoks{##1}}
{\addcytoks{##1}}
{\addcytoks{##1}}
{\let\stop\endstart}
{\tcafterenv{\def\print{\the\cytoks}}}
\newif\ifmymode
\begin{document}
\mymodefalse
\start
\newcommand\z[1]{\ifmymode This is it: #1\else Fuggedaboutit!\fi}
Testing ``\z{Hi Mom}''
\stop
\mymodetrue
\print % here!
\end{document}
答案2
答案3
监听是环境实际上对输入流所做的事情。
如果我们定义一个环境将其拥有的所有内容存储到全局变量中(并且该环境还打印其拥有的所有内容),那么我们可以根据需要从全局变量中重新打印多次。
和可以用类似和 的\begin{listen}
包装\end{listen}
命令代替。\startlistening
\stoplistening
tokcycles
专为操纵如果需要的话,输入流因此比单纯的复制更强大。
平均能量损失
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
%=====
\tl_new:N \l_mytemp_tl
%=====
\NewDocumentCommand { \clearlisten } { } {
\tl_clear:N \l_mytemp_tl
}
\NewDocumentCommand { \printlisten } { } {
% \tl_show:N \l_mytemp_tl
\tl_use:N \l_mytemp_tl
}
\NewDocumentEnvironment { listen } { +b } {
\tl_gset:Nn \l_mytemp_tl { #1 }
\tl_use:N \l_mytemp_tl
} { }
\ExplSyntaxOff
\begin{document}
\begin{listen}
Hello, world!
The cat sat on the mat. \begin{tabular}[b]{||c||}\hline\hline fox\\\hline\hline dog\\\hline\hline \end{tabular}.
\end{listen}
\printlisten \printlisten
\end{document}