我正在使用该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
。