2012-08-11 8 views
10

Mi sono imbattuto nel (curioso) problema che quando si inviava un manoscritto (pdf) LaTeX ad un altro giornale Elsevier i nomi dei file delle figure dovevano essere completi per trovata da loro costruzione pdf e syste controllo, vale a dire:Make Sweave o knitr put suffisso grafica in ` includegraphics {}`

\includegraphics{picture.pdf} 

c'è un modo facile e conveniente per dire Sweave o knitr per farlo?

Edit:

  • ho familiarità con l'opzione di sweave include=FALSE
  • mi sento anche perfettamente in grado di rattoppare utils:::RweaveLatexRuncode

Tuttavia, per il momento sto sperando che ci sia qualcosa di più comodo ed elegante.

Si tratta anche di distribuire i file .Rnw come materiale supplementare o vignette. Da un punto di vista didattico non mi piacciono queste modifiche che rendono il codice sorgente molto più complicato per i nuovi utenti di cui spero lo leggano.

(che è anche il motivo per cui apprezzo molto il recentemente introdotto print=TRUE in Sweave)

+0

intendi 'stampa = TRUE' o' split = TRUE'? –

+1

@Yihui: intendevo 'print = TRUE' perché i comandi di griglia (lattice, ggplot2) nella vignetta sembrano come se li digiti. Lascia solo la trappola" perché non funziona in un ciclo for ".. Ma la gente non si domanda perché la vignetta abbia 'print (xyplot (...))'. – cbeleites

+1

Capisco. Probabilmente già sai che 'knitr' non richiede' print (xyplot (...)) '. –

risposta

3

È possibile modificare il gancio plot un po 'in knitr per aggiungere l'estensione del file:

<<>>= 
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}') 
}) 
@ 

Vedi 033-file-extension.Rnw per un esempio completo. Per capire cosa sta succedendo dietro la scena, vedere lo source code of the default LaTeX hooks in knitr.

+0

Questo sarà per me un gancio importante ... Fino ad ora sono rimasto con "Sweave" per tutto ciò che potrei condividere con gli altri ('Roba di roba in cui non condivido il .Rnw) ma suppongo che passerò completamente a knitr prima o poi :-). Grazie mille per il pacchetto, Yihui! – cbeleites

3

Una soluzione di forza bruta è quello di creare in modo esplicito i file da soli nel frammento R. Imposta l'opzione per la grafica ecc su falso ma fai in modo che il codice venga valutato in modo che il file sia creato, e poi chiamalo in lattice con la stessa chiamata \includegraphics{} che mostri.

Ho utilizzato schemi simili per il caching semplice: se il file di destinazione esiste, salta la creazione del codice.

+0

Grazie a Dirk, ho approfondito un po 'i motivi per cui mi piacerebbe trovare una soluzione "più bella". '<< include = FALSE >> =' è quello che faccio ... – cbeleites