nie widzę prostą rozwiązanie do odroczenia oceny \Sexpr
po ocena fragmentów kodu, ale nadal jest łatwe w użyciu \Sexp
z wartościami zdefiniowanymi dalej, na przykład w streszczeniu: użyj osobnego pliku (myabstract.Rnw
) do streszczenia, dodaj \input{myabstract}
, gdzie streszczenie jest suppo sed być włączone i knit
myabstract.Rnw
na samym końcu głównej dokumentu:
document.Rnw
:
\documentclass{article}
\begin{document}
\begin{abstract}
\input{myabstract}
\end{abstract}
Main text.
<<>>=
answer <- 42
@
\end{document}
<<include = FALSE>>=
knit("myabstract.Rnw")
@
myabstract.Rnw
:
The answer is \Sexpr{answer}.
kluczem do zrozumienia, jak działa to jest sobie sprawę, że knitr
przetwarza dokument przed LaTeX. Dlatego nie ma znaczenia, że komenda LaTeX \input{myabstract}
zawiera myabstract.tex
"przed" (nie odnosząc się do czasu, ale odnosząc się do numeru wiersza), knit("myabstract.Rnw")
generuje myabstract.tex
.
Dla bardziej złożonych scenariuszy, oceny i wyjścia mogą być rozdzielone: Czy wszystkie obliczenia na początku kawałki i wydrukować wyniki, do której należą. Aby wyświetlić kod źródłowy, reuse porcje (ustawienie eval = FALSE
). Korzystając z przykładu z góry, to znaczy:
\documentclass{article}
\begin{document}
<<calculation, include = FALSE>>=
answer <- 42
@
\begin{abstract}
The answer is \Sexpr{answer}.
\end{abstract}
Main text.
<<calculation, eval = FALSE>>=
@
\end{document}
prawdopodobnie będziesz musiał uruchomić dwie przełęcze w dokumencie, zapisz rzeczy cię z późniejszych obliczeń i wczytaj go z powrotem na początku. –
To normalne. W pierwszym przykładzie zdefiniowałeś "wartość" przed wywołaniem w \ Sexpr {}; więc istnieje w twojej przestrzeni roboczej i można ją nazwać. W drugim przykładzie nazywacie nieistniejącą zmienną; więc musisz go najpierw zdefiniować lub załadować przestrzeń roboczą tam, gdzie ona istnieje. –