Как разделить шаблон отчета и определения в R.rsp? - PullRequest
2 голосов
/ 30 января 2012

R.rsp - это мощный шаблонизатор, позволяющий легко смешивать R и латексный код.

RSP-файл будет выглядеть примерно так:

<% myTemplate <- function(n, ...) { %>
The sum of $x=<%=hpaste(1:n, abbreviate="\\ldots")%>$ is <%=sum(1:n)%>.<%----%>
<% } %>

\begin{document}

\begin{itemize}
<% for (ii in c(3,5,10,100)) { %>
\item <% myTemplate(n=ii) %>
<% } %>

\end{itemize}

\end{document}

Теперь я хотел бы сохранить определения функций и фактический шаблон отчета в двух отдельных файлах, чтобы разные отчеты могли использовать одни и те же функции.Легко переместить определение myTemplate() в новый файл, но из-за неэкранированного латексного кода source() нельзя использовать для импорта содержимого файла.

Кто-нибудь может предложить или обойти эту проблему?

Ответы [ 2 ]

1 голос
/ 09 февраля 2012

Я считаю, что лучшим решением для шаблонизации отчетов LaTeX в R является комбинация brew + tools::texi2dvi.

Пакет brew, похоже, делает то же самое, что и этот R.rsp.Он заменяет выражения в текстовый файл выводом из R.

Пример:

\begin{document}
The result of $2 + 2$ is <%= 2+2 %>.
\end{document}

Аналогично, он может использовать функции, созданные пользователем:

crazy.function <- function(x) {
    (x + 2) * sqrt(x)
}

Вы просто должны использовать его в своем шаблоне:

\begin{document}
The result of my crazy function for 3 is <%= crazy.function(3) %>.
\end{document}

И определить его перед использованием функции brew:

# Defining the function
crazy.function <- function(x) {
    (x + 2) * sqrt(x)
}
# When we use the brew function, the template.brew
# is evaluated and a template.tex is created
brew("template.brew", "template.tex")

Тогда нам нужно скомпилировать *Файл 1020 * с использованием функции tools::texi2dvi:

tools::texi2dvi("template.tex")

Следовательно, вам нужно определить все необходимые вам функции.Используйте это в своих шаблонах.А затем превратить шаблоны в текстовые файлы.

EDITED

Просто для дополнения ответа, если вы хотите сохранить определения функций и шаблон в двух разных файлах,вам просто нужно поместить определение функции в файл function-definition.R и получить его перед вызовом функции brew.Определение шаблона будет в файле template.brew.

source("function-definition.R")
brew("template.brew","template.tex")
0 голосов
/ 14 января 2014

Просто наткнулся на эту ветку / отвечаю, если кто-то найдет это позже / лучше позже, чем никогда:

Для этого предназначена директива <%@include file="<pathname>"%> предварительной обработки в RSP, например: предположим, что у вас есть шаблоны RSP в файле templates.tex.rsp:

<% myTemplate <- function(n, ...) { %>
The sum of $x=<%=hpaste(1:n, abbreviate="\\ldots")%>$ is <%=sum(1:n)%>.<%----%>
<% } %>

Затем вы можете включить его в основной документ RSP как:

<%@include file="templates.tex.rsp"%>

\begin{document}

\begin{itemize}
<% for (ii in c(3,5,10,100)) { %>
\item <% myTemplate(n=ii) %>
<% } %>

\end{itemize}

\end{document}

Директива <%include ...%> описана в основной R.rsp vignette .

/ Henrik (автор R.rsp)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...