Если вы используете Emacs, вы сможете ответить на эту часть.Если нет, перейдите к последней части ниже.
Если мы разделим наш файл Rnw
на несколько файлов, можно ли создать документ целом , используя knitr и LaTeX вEmacs, нажав M-n e
на дочернем файле?
Полагаю, что описанный выше процесс должен быть возможен, возможно, с помощью Emacs файловые переменные для указания родителя дочернего файла.
В настоящее время я должен сменить буфер на дочернийк родителю, чтобы скомпилировать весь документ, используя M-n e
(или мне нужно использовать Makefile --- что я и делаю), но я хочу нажать M-n e
на любом из дочерних файлов с указанным родителем и получитьвесь документ скомпилирован.
Я использую ESS, polymode и poly-R в Emacs, как предписано в этом ответе .
Приведенный выше сценарий вдохновленрабочим процессом создания документов с использованием LaTeX в Emacs plus AUCTeX.В этой настройке документ создается нажатием того же сочетания клавиш (C-c C-a
) в основном файле tex
или в любом другом файле tex
, который в основном файле include
d.Это избавляет от необходимости менять буфер на основной файл перед нажатием C-c C-a
.
Если вы не используете Emacs, вы можете ответить на это part
В качестве связанной, но далеко не желаемой опции, knitr позволяет компилировать только дочерний элемент, указав основной файл в качестве родительского.Это делается путем добавления строки, такой как \Sexpr{set_parent('main-document.Rnw')}
, к дочернему элементу (см. автономный режим ).Но проблема в том, что не создает весь документ, а только часть, включенную в дочерний файл.
В качестве минимального примера это основной (родительский) файл с именем main.Rnw
:
\documentclass{article}
\begin{document}
This is the main file.
<<>>=
2^10
@
Now we include a child file.
<<chld, child = "chld.Rnw">>=
@
Back to the main.
\end{document}
, который включает следующий дочерний файл с именем chld.Rnw
:
<<chld-set-parent, echo = FALSE, cache = FALSE>>=
set_parent("main.Rnw")
@
% instead of the above we could say \Sexpr{set_parent("main.Rnw")}
This is the contents of the child document.
<<>>=
3^6
@
End of child.
Здесь, вязание main.Rnw
с использованием следующего bash
script
R -q -e "library(knitr); knit2pdf('main.Rnw')"
создает весь документ при вязании chld.Rnw
:
R -q -e "library(knitr); knit2pdf('chld.Rnw')"
создает документ, который содержит только содержимое дочернего файла.Это может быть полезно для некоторых, но я думаю, что гораздо полезнее иметь возможность вызывать команду knit для chld.Rnw
, и весь документ создается, потому что мы явно указали для его родительского файла main.Rnw
.