2015-06-19 1 views
0

Я пытаюсь создать среду в латексе, которая записывает строки, которые находятся между версиями \ begin {environment} и \ end {environment} в TeX-файле.LaTeX: добавление строгих строк в выходной файл

Я пробовал пакет fancyvrb, он работает, но если я укажу несколько \ begin {environment} в моем исходном файле, только последние строки будут записаны в outfile (я предполагаю, что VerbatimOut каждый раз воссоздает outfile, и не прилагается к нему).

Есть ли у кого-нибудь лидерство в этом вопросе? Благодаря!

ответ

0

Это немного косвенный ответ, но пакет comment Виктора Эйджута делает что-то подобное, в том смысле, что он обрабатывает «дословные» блоки так же, как и LaTeX. Если это не так, то его реализация предполагает, как это сделать вручную (т. Е. Этот пакет - это то, что я скопировал, когда я это сделал сам).

В противном случае вы можете задать вопрос по телефону TeX Stackexchange site.

1

Я столкнулся с той же проблемой и решил ее следующим образом. не

verbatimappend.tex файла (обратите внимание, что файл LaTeX пишет больше не является аргументом, поскольку это в verbatimwrite среде, но определенные в \ verbatimFile):

\documentclass{article} 
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage{moreverb} 

\makeatletter 
\def\verbatimappend{% inspired by moreverb.sty (verbatimwrite) 
    \@bsphack 
    \let\do\@makeother\dospecials 
    \catcode`\^^M\active \catcode`\^^I=12 
    \def\[email protected]{% 
    \immediate\write\verbatimFile% 
     {\the\[email protected]}}% 
    \[email protected]} 
\def\endverbatimappend{% 
    \@esphack% 
} 
\makeatother 

\begin{document} 

\newwrite\verbatimFile 
\immediate\openout\verbatimFile=verbatimFile.txt\relax% 

\begin{verbatimappend} 
Hello, world! 
\end{verbatimappend} 

\input{random_chars.tex} 

\begin{verbatimappend} 
Bye, world! 
\end{verbatimappend} 

\immediate\closeout\verbatimFile 

\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("\n\n", 
    (map { "Paragraph\n\n\\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 , так как пакет выглядит невосстановленным.

HTH.