在逐字块内累积文本

在逐字块内累积文本

有没有办法将块内的所有文本累积verbatim到外部文件中?

我知道这个包extract,但它似乎正在积累环境\begin{verbatim}\end{verbatim}语句以及内容,这是我想避免的。

我也尝试过关注这个问题这里并写了这段代码

\def\mycode{}

\let\oldverbatim\verbatim
\let\oldendverbatim\endverbatim

\RenewEnviron{verbatim}{%
\def\xBODY{\expandonce\BODY}%
\xappto\mycode{\xBODY^^J}
\oldverbatim
\BODY
\oldendverbatim}

但它给了我太多Undefined control sequence我不太明白的错误。

答案1

这是一个使用该包的简单解决方案filecontentsdef

我们定义一个新环境,它首先使用collectverb将环境主体读入宏。然后将内容写入输出文件,之后打印在文档中。对于代码的排版,使用标准环境的内部宏,因此结果应该与您当前的输出相同。\collectverb@tl\filecontentsdefmacro\collectverb@outverbatim

完整示例:

\documentclass{article}
\usepackage{filecontentsdef}

\makeatletter

\newwrite\collectverb@out
\immediate\openout\collectverb@out=\jobname-verb.tex

\newenvironment{collectverb}{%
    \begingroup
    \filecontentsdefmacro\collectverb@tl
}{%
    \endfilecontentsdefmacro
    \endgroup
    \immediate\write\collectverb@out{\collectverb@tl}%
%
    \let\@xverbatim=\relax
    \@verbatim
    \begingroup
    \lccode`\~=`\ %
    \lowercase{\endgroup\def~}{\ }%
    \collectverb@tl
    \endverbatim
}

\AtEndDocument{\immediate\closeout\collectverb@out}

\makeatother

\begin{document}
Some text ...
\begin{collectverb}
\documentclass{article}
\usepackage{xcolor}
\end{collectverb}
... more text ...
\begin{collectverb}
\begin{document}
  \textcolor{blue}{Hello world!}
\end{document
\end{collectverb}
... and even more text.
\end{document}

创建文件

\documentclass{article}
\usepackage{xcolor}

\begin{document}
  \textcolor{blue}{Hello world!}
\end{document

和印刷品

在此处输入图片描述

答案2

利用该scontents包您可以用非常简单的方式完成此操作:

\documentclass{article}
\usepackage[store-env=collectverb]{scontents}
\begin{document}
Some text ...
\begin{scontents}[write-env=file.txt]
\documentclass{article}
\usepackage{xcolor}
\end{scontents}
\typestored[1]{collectverb}
... more text ...
\begin{scontents}[write-env=file2.txt]
\begin{document}
  \textcolor{blue}{Hello world!}
\end{document}
\end{scontents}
\typestored[2]{collectverb}
... and even more text.
\end{document}

输出

相关内容