将逐字材料附加到文件

将逐字材料附加到文件

我正在使用该fancyvrb软件包。我想创建一个类似 verbatim 的环境,它可以执行以下两件事:

1) 将逐字材料按原样附加到已打开的文件中。 2) 像UseVerbatim将要做的那样输出逐字材料。

我尝试过重新使用SaveVerbatim环境并输出材料,\immediate\write\FILE{\UseVerbatim{VERB}}但这并没有什么用,因为\UseVerbatim需要的不仅仅是扩展。\protect在前面添加\UseVerbatim也没有帮助。

A不工作示例如下:

\documentclass{article}
\usepackage{fancyvrb}
\newwrite\FILE
\immediate\openout\FILE=\jobname.out

\newenvironment{chunk}{%
    \VerbatimEnvironment{chunk}\begin{SaveVerbatim}[gobble=2,commentchar=\%,commandchars=\\\{\}]{VERB}%
}{%
  \end{SaveVerbatim}%
  \UseVerbatim{VERB}%
  \immediate\write\FILE{\UseVerbatim{VERB}}%
}

\begin{document}

\begin{chunk}
  First line.
  \texttt{Second} line.
\end{chunk}

\end{document}

答案1

你这样做是为了进行文学编程吗?如果是这样,那么也许你想要一个专门的文学编程工具?

是的,你显然可以通过重新实现来实现这一点fancyvrb.sty。只需调整包含以下内容的行:\openout\closeout,或者甚至添加写入任意句柄的能力,而不是\FV@OutFile。但这不是最简单或最强大的解决方案。

相反,我有一个名为的 Perl 脚本cat_latex_env,它使用 Perl 触发器运算..符来执行此操作:

#!/usr/bin/perl
use strict;
use warnings;

sub usage { die "Usage: cat_latex_env enviroment_name [filename]\n"; }
usage if ($#ARGV < 0);

my $env = shift;
my $begin = quotemeta "\\begin{$env}";
my $end = quotemeta "\\end{$env}";
while (<>) {
        if (/$begin/../$end/) {
                next if /$begin/ || /$end/;
                print;
        }
}

cat_latex_env chunk file1.tex > file2.tex只需在你的中运行Makefile

相关内容