Задача состоит из двух частей:
- собственно создание документации к функции, скрипту или пакету R;
- преобразование созданных документов в формат LaTeX.
Документация к R оформляется в виде файлов .Rd
на специальном языке, синтаксис которого похож на LaTeX.
Файлы .Rd можно создавать вручную. Но существует пакет roxygen2, который создаёт их автоматически, на основе сделанных в коде комментариев.
Выглядят эти комментарии примерно так:
#' Add together two numbers
#'
#' @param x A number
#' @param y A number
#' @return The sum of \code{x} and \code{y}
#' @examples
#' add(1, 1)
#' add(10, 1)
add <- function(x, y) {
x + y
}
Для того, чтобы создать Rd-документацию к этому файлу (назовём его add.R) нужно
- создать пакет R и поместить в него add.R (несмотря на то, что это отдельный файл, а вовсе не пакет);
- выполнить команду:
devtools::document()
Проще всего сделать это в RStudio, где создать пакет можно при помощи меню.
Другие варианты:
package.skeleton()
позволяет создать "скелет" пакета — его основные каталоги и файлы;devtools::create("path/to/package/pkgname")
После трансляции командой document()
в папке man
только что созданного пакета появится файл add.Rd:
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/simple.R
\name{add}
\alias{add}
\title{Add together two numbers}
\usage{
add(x, y)
}
\arguments{
\item{x}{A number}
\item{y}{A number}
}
\value{
The sum of \code{x} and \code{y}
}
\description{
Add together two numbers
}
\examples{
add(1, 1)
add(10, 1)
}
На этом первую задачу можно считать решённой. Подробности ищите в документации к пакету roxygen2.
Документы формата .Rd конвертируются в LaTeX при помощи функции Rd2latex
из пакета tools
(входит в базовый набор R)
Rd <- file.path("man/add.Rd")
tools::Rd2latex(Rd, out = "add.tex")
Сама функция Rd2latex
генерирует только содержимое документа, но не его преамбулу:
\HeaderA{add}{Add together two numbers}{add}
%
\begin{Description}\relax
Add together two numbers
\end{Description}
%
\begin{Usage}
\begin{verbatim}
add(x, y)
\end{verbatim}
\end{Usage}
%
\begin{Arguments}
\begin{ldescription}
\item[\code{x}] A number
\item[\code{y}] A number
\end{ldescription}
\end{Arguments}
%
\begin{Value}
The sum of \code{x} and \code{y}
\end{Value}
%
\begin{Examples}
\begin{ExampleCode}
add(1, 1)
add(10, 1)
\end{ExampleCode}
\end{Examples}
Стиль оформления латеховского документа хранится в файле Rd.sty в каталоге, где установлен R. Проще всего скопировать этот файл в каталог с add.tex. Не забудьте указать пакет Rd
в преамбуле документа:
\documentclass{article}
\usepackage{Rd}
\begin{document}
\input{add.tex} % файл, полученный из R
\end{document}
(естественно, если в документах нужен русский язык, то добавляем ответственные за него пакеты).
После трансляции LaTeX-ом получим:
Кроме того, существует пакет Rd2roxygen для преобразования уже имеющейся Rd-документации в формат roxygen2.
Проблема с devtools::document()
Во время работы над пакетом у меня сформировался набор вспомогательных скриптов, в частности, для создания документации. Сами эти скрипты в пакет не входили, но до поры до времени хранились в общей папке со скриптами пакета (my_package/R
). Один из таких скриптов содержал вызов devtools::document()
.
В результате, когда я запускал devtools::document()
возникал бесконечный цикл из сообщений об ошибках
Updating my_package documentation
Loading my_package
...
По-видимому, запущенный мной devtools::document()
считывал скрипты, находил там devtools::document()
, тот в свою очередь запускался и т.д.
Пришлось организовать отдельную папку для вспомогательных скриптов за пределами пакета. Там devtools::document()
никому в пакете не мешает.
Вставка формул
Математические формулы в формате LaTeX можно вставить в документ при помощи команд:
\eqn{latex}
— для формул, размещаемых в строке (как TeX-овские$…$
);\deqn{latex}
— для выключных формул (как TeX-овские$$…$$
).
Вместо latex
записывается LaTeX-овская формула без символов окружения, таких как $
, $$
и т.п.
Формулы можно также записывать в виде: \eqn{latex}{ascii}
(и, аналогично, для \deqn
). ascii
— текстовая запись формулы, которая используется в текстовой версии справки.
Комментарии
comments powered by Disqus