Входной Tex-файл в файл knitr

Входной Tex-файл в файл knitr

Я привожу здесь простой пример, чтобы просто сформулировать вопрос.

\documentclass{article}

\begin{document}

<<>>=
library('ggplot2')
dataset <- diamonds
@

\begin{table}[htbp]
  \centering
  \begin{tabular}{c|c|c|c}
  \textbf{Name} & \textbf{Columns} \\\hline \hline
  dataset & \Sexpr{length(colnames(dataset))} \\
  \end{tabular}
  \caption{Repeated table}
\end{table}

\end{document}

Теперь я повторяю эту таблицу (точную таблицу) несколько раз в файле. (Представьте себе замену набора данных другим набором перед вызовом этой таблицы).

\documentclass{article}

\begin{document}

<<>>=
library('ggplot2')
dataset <- diamonds;
@

\input{table-file.tex}

\end{document}

Я помещаю всю табличную часть в этот файл, а затем ввожу ее в несколько мест. Но я не могу заставить это работать. Мне было интересно, возможно ли это? Есть ли лучшие подходы, чтобы сделать эту таблицу "модульной".

Спасибо

решение1

Ниже приведен пример использования процесса создания дочернего файла knitr в соответствии с документацией knitr yihui.name/knitr/demo/child.

Сначала новый основной файл, который я назвал «knitr01.Rnw»

\documentclass{article}

\begin{document}

<<>>=
library('ggplot2')
dataset <- diamonds
@

<<child='child-knitr01.Rnw'>>=
@

<<>>=
dataset<-mtcars
@

<<child='child-knitr01.Rnw'>>=
@
\end{document}

Обратите внимание, что я ввел данные о ребенке дважды, каждый раз с разным набором данных.

И дочерний файл, который я назвал «child-knitr01.Rnw».

\begin{table}[htbp]
  \centering
  \begin{tabular}{c|c|c|c}
  \textbf{Name} & \textbf{Columns} \\\hline \hline
  dataset & \Sexpr{length(colnames(dataset))} \\
  \end{tabular}
  \caption{Repeated table}
\end{table}

При запуске сначала через «knit», а затем через «pdflatex» получается

введите описание изображения здесь

Чтобы продолжить демонстрацию для полноты картины, это также позволяет дочерним файлам вводить внуков.

knitr01.Rnw изменяется следующим образом.

\documentclass{article}
\begin{document}
<<>>=
library('ggplot2')
dataset <- diamonds
title="These are diamonds"
@

<<child='child-knitr01.Rnw'>>=
@

<<>>=
dataset<-mtcars
title="These are cars"
@

<<child='child-knitr01.Rnw'>>=
@

\end{document}

Вот исправленный файл «child-knitr01.Rnw»

\begin{table}[htbp]
  \centering
  \begin{tabular}{c|c|c|c}
  \textbf{Name} & \textbf{Columns} \\\hline \hline
  dataset & \Sexpr{length(colnames(dataset))} \\
  \end{tabular}
  \caption{\Sexpr{paste(substr(capture.output(print(title)),5,50))}}
  % The 5 is to remove some leading R stuff (try with 1 to see why)
  % The 50 is chosen to be longer than the string
\end{table}

<<child='grand-child-knitr01.Rnw'>>=
@

А вот файл 'grand-child-knitr01.Rnw'

Demonstration that you can call on 'grandchildren' files with knitr.

<<>>=
names(dataset)  
@

И вот что получается: введите описание изображения здесь

Связанный контент