如何将页面内容吸收到变量中?

如何将页面内容吸收到变量中?

这就是我想做的事情:

\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

不确定这应该做什么,但你可以做

\documentclass{article}

\newcommand{\start}{}% just for safety
\newcommand{\print}{}% just for safety
\long\def\start#1\stop{\def\print{#1}\print}

\begin{document}

\start
Hello, world!
\stop

\print

\end{document}

在此处输入图片描述

答案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}

相关内容