2012-08-11 15 views
10

Po prostu napotkam (ciekawy) problem, że po przesłaniu manuskryptu LaTeX (pdf) do jakiegoś dziennika Elsevier, nazwy plików liczbowych muszą być kompletne, aby znaleziony przez ich budynku pdf oraz sprawdzanie st, tjMake Sweave lub knitr umieścić sufiks grafiki w ` includegraphics {}`

\includegraphics{picture.pdf} 

czy istnieje jakiś prosty i wygodny sposób, aby powiedzieć Sweave lub knitr to zrobić?

Edit:

  • Znam include=FALSE opcji sweave za
  • czuję też całkiem zdolny załatać utils:::RweaveLatexRuncode

Jednak w tej chwili mam nadzieję, że coś więcej wygodny i elegancki.

Chodzi także o rozdawanie plików .Rnw jako materiałów uzupełniających lub winiet. Z dydaktycznego punktu widzenia nie podoba mi się te poprawki, które powodują, że kod źródłowy jest dużo bardziej skomplikowany dla nowych użytkowników, których mam nadzieję, że go przeczytali.

(który jest również dlaczego ja naprawdę docenić niedawno wprowadzony print=TRUE w Sweave)

+0

masz na myśli 'print = TRUE' lub' split = TRUE'? –

+1

@Yihui: Miałem na myśli 'print = TRUE', ponieważ wtedy komendy graficzne siatki (kratownicy, ggplot2) w Vignette wyglądają tak, jak je wpisujesz. Po prostu zostawia pułapkę" dlaczego nie działa w pętli for ".. Ale ludzie nie zastanawiają się, dlaczego winieta ma "print (xyplot (...))". – cbeleites

+1

Rozumiem. Prawdopodobnie już wiesz, że 'knitr' nie wymaga' print (xyplot (...)) '. –

Odpowiedz

3

Można modyfikować haka plot trochę w knitr dodać rozszerzenie pliku:

<<>>= 
knit_hooks$set(plot = function(x, options) { 
    x = paste(x, collapse = '.') # x is file.ext now instead of c(file, ext) 
    paste0('\\end{kframe}', hook_plot_tex(x, options), '\\begin{kframe}') 
}) 
@ 

Zobacz 033-file-extension.Rnw dla kompletnego przykładu. Aby zrozumieć, co dzieje się za sceną, zobacz source code of the default LaTeX hooks w knitr.

+0

Ten będzie dla mnie ważnym haczykiem ... Do tej pory pozostałem z prostym 'Sweave' dla wszystkiego, co mogę podzielić się z innymi ("rzeczy dzianinowe, w których nie dzielę się .Rnw), ale myślę, że wcześniej czy później zmienię na knitr :-). Wielkie dzięki za pakiet, Yihui! – cbeleites

3

brute force rozwiązanie jest jawnie utworzyć pliki siebie we fragmencie R. Ustaw dla opcji graphics etc wartość false, ale kod jest oceniany, aby plik został utworzony, a następnie wywołaj je za pomocą wywołania \includegraphics{}.

Użyłem podobnych schematów dla prostego buforowania: jeśli plik docelowy istnieje, pomiń tworzenie kodu.

+0

Dziękuję Dirkowi, trochę wyjaśniłem powody, dla których chciałbym znaleźć "ładniejsze" rozwiązanie. '<< include = FALSE >> =' to jest to, co robię ... – cbeleites