2011-11-09 12 views
7

Powiedzmy, że mam plik .Rnw zawierający zwykły LaTex wymieszany z fragmentami kodu R. (Jestem szczególnie zainteresowany konwersją dokumentu slajdu .Rnw, ale to pytanie dotyczy dowolnego dokumentu .Rnw). Teraz chcę przekonwertować to do pliku, który zawiera cały kod R, plus cały tekst, który normalnie byłby generowany przez LaTex, jako R komentarze. Innymi słowy, ta funkcja, którą chcę, jest podobna do tej, którą robię, ale chcę też, aby cała tekstowa część LaTexa została przekształcona na zwykły tekst, który został skomentowany w wynikowym pliku .R.Sweave, R, Beamer: Jak przekonwertować tekst LaTex w pliku RNW na R komentarzy?

Byłby to bardzo wygodny sposób automatycznego generowania skomentowanego pliku R, który łatwo jest przejrzeć w swoim ulubionym edytorze podświetlania składni (np. Emacs). To może nie brzmieć jak świetny pomysł na dokument Sweave, który jest długim artykułem z tylko odrobiną kodu R, ale zaczyna wyglądać interesująco, kiedy dokument .Rnw jest w rzeczywistości prezentacją slajdów (np. Przy użyciu beamer) - wtedy część tekstowa na slajdach byłoby doskonałe komentarze do kodu R.

Ktoś ma jakieś pomysły, jak to zrobić? Z góry dziękuję.

Odpowiedz

8

Oto jedno z podejść z użyciem regex. Pozostają jeszcze pewne problemy, a ja utrzymam listę, która będzie aktualizowana rezolucjami.

# READ LINES FROM RNW FILE 
lines <- readLines('http://users.stat.umn.edu/~charlie/Sweave/foo.Rnw') 

# DETECT CODE LINES USING SWEAVE CHUNK DEFINITIONS 
start_chunk <- grep("^<<.*=$", lines) 
end_chunk <- grep("^@" , lines) 
r_lines  <- unlist(mapply(seq, start_chunk + 1, end_chunk - 1)) 

# COMMENT OUT NON CODE LINES AND WRITE TO FILE 
lines[-r_lines] <- paste("##", lines[-r_lines]) 
writeLines(lines, con='codefile.R') 

kwestii pozostających:

  1. dobrze radzi sobie nie poradzić sobie z kawałkami zwanych wewnątrz innych fragmentów wykorzystujących <<chunk_name>>
+0

Możesz zdefiniować bardziej złożone regex naprawić kawałek nazewnictwa problem, jak: '"^<<.*>> =? $ "' Dla porcji początkowej. Ale i tak jest to bardzo fajne podejście ... przyjemne użycie 'mapply'. – aL3xa

+0

To schludne podejście i tak, przyjemne użycie 'mapply'. Jeszcze jedna rzecz, która byłaby miła to pozbycie się wszystkich znaczników LaTeX (takich jak '\ begin {frame}', '\ frametitle', ...) w celu tworzenia czystych, czysto tekstowych komentarzy - przynajmniej pozbycie się wszystkich słów kluczowych LaTeX byłoby początkiem. Przypuszczam, że można napisać wyrażenie 'regex', zastępujące wszystkie słowa zarezerwowane w LaTeX pustymi ciągami. To byłby początek, ale mam nadzieję, że istnieje sposób na wykorzystanie parsera LaTeX i jakoś uchwycić * tekst *, który wygenerowałby lateks. –

+0

Łączenie pomysłu @ Ramnatha z jednym z rozwiązań LaTeX-to-text z innego pytania SO (http://stackoverflow.com/questions/530121/how-do-i-concon-latex-to-plain-text-ascii) może dostać mi to, czego chcę. –

Powiązane problemy