LaTeX:将逐字行附加到输出文件



我正在尝试在 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网站上提问。

相关内容

  • 没有找到相关文章

最新更新