我正在尝试在 latex 中创建一个环境,该环境将 \begin{environment} 和 \end{environment} 之间的行逐字写入 TeX 文件中。
我已经尝试了 fancyvrb 包,它可以工作,但是如果我在源文件中指定了几个 \begin{environment},则只有最后一行写入输出文件(我猜 VerbatimOut 每次都会重新创建输出文件,并且不会附加到它)。
有人对此有线索吗?谢谢!
我遇到了同样的问题,并按如下方式解决了它。
文件逐字追加.tex(请注意,LaTeX 写入的文件不再是参数,因为它在逐字写入环境中,而是在 \verbatimFile 中定义):
documentclass{article}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{moreverb}
makeatletter
defverbatimappend{% inspired by moreverb.sty (verbatimwrite)
@bsphack
letdo@makeotherdospecials
catcode`^^Mactive catcode`^^I=12
defverbatim@processline{%
immediatewriteverbatimFile%
{theverbatim@line}}%
verbatim@start}
defendverbatimappend{%
@esphack%
}
makeatother
begin{document}
newwriteverbatimFile
immediateopenoutverbatimFile=verbatimFile.txtrelax%
begin{verbatimappend}
Hello, world!
end{verbatimappend}
input{random_chars.tex}
begin{verbatimappend}
Bye, world!
end{verbatimappend}
immediatecloseoutverbatimFile
end{document}
我进行了如下压力测试。文件random_chars.pl:
#! /usr/bin/perl
use warnings;
use strict;
binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";
my @ords = (32..126, 160..255); # usable latin-1/latin-9 codepoints
my $N = scalar @ords;
my @lines = ( );
sub choose_random_char {
my $ord = int(rand($N));
return chr($ords[$ord]);
}
while ((scalar @lines) < 10000) {
my $line = join('', map { choose_random_char() } (1..78));
next if $line =~ m/\end{verbatimappend}/sx; # probably very unlikely!
next if $line =~ m/s+$/sx; # final spaces do not get output -> false positive
push @lines, $line;
}
print join("n", @lines, '');
print STDERR join("nn",
(map { "Paragraphnn\begin{verbatimappend}n$_n\end{verbatimappend}" } @lines), '');
要使用它们:
$ perl random_chars.pl > random_chars.txt 2> random_chars.tex
$ latex verbatimappend.tex
$ diff random_chars.txt verbatimFile.txt
请注意random_chars.pl中排除的特定情况:
next if $line =~ m/\end{verbatimappend}/sx; # probably very unlikely!
next if $line =~ m/s+$/sx; # final spaces do not get output -> false positive
不确定如何/是否可以/应该将其发送到https://www.ctan.org/pkg/moreverb包作者,因为包似乎未维护。
呵呵。
稍微间接的答案,但Victor Eijkhout的comment
包做了类似的事情,从某种意义上说,它以与LaTeX相同的方式处理"逐字"块。 如果没有,那么它的实现建议如何手动执行此操作(也就是说,这个包是我自己不得不复制的)。
如果做不到这一点,你可能想在TeX Stackexchange网站上提问。