diff --git a/DESCRIPTION b/DESCRIPTION new file mode 100644 index 0000000..42562f0 --- /dev/null +++ b/DESCRIPTION @@ -0,0 +1,15 @@ +Package: linl +Type: Package +Title: 'linl' is not 'PNAS' +Version: 0.0.1 +Date: 2017-10-15 +Author: Dirk Eddelbuettel and Aaron Wolen +Maintainer: Dirk Eddelbuettel +Description: A LaTeX Letter for 'rmarkdown', using the 'pandoc-letter' + template adapted for use with 'markdown'. +URL: http://dirk.eddelbuettel.com/code/linl.html +BugReports: https://github.com/eddelbuettel/linl/issues +Imports: rmarkdown, knitr +VignetteBuilder: knitr +License: GPL-3 +RoxygenNote: 6.0.1 diff --git a/NAMESPACE b/NAMESPACE new file mode 100644 index 0000000..374938f --- /dev/null +++ b/NAMESPACE @@ -0,0 +1,3 @@ +export(linl) +import(knitr) +import(rmarkdown) diff --git a/R/linl.R b/R/linl.R new file mode 100644 index 0000000..bfbe5fa --- /dev/null +++ b/R/linl.R @@ -0,0 +1,61 @@ +#' LaTeX Letter format +#' +#' A format suitable for standard letters, along a with a number of +#' helpful extensions +#' +#' @inheritParams rmarkdown::pdf_document +#' @param ... Additional arguments to \code{rmarkdown::pdf_document} +#' @param keep_tex A boolean toggle to select whether intermediate +#' LaTeX files are to be kept, defaults to \code{TRUE} +#' @return R Markdown output format to pass to +#' \code{\link[rmarkdown:render]{render}} +#' +#' @examples +#' \dontrun{ +#' rmarkdown::draft("MyLetter.Rmd", template = "pdf", package = "linl") +#' rmarkdown::render("MyLetter.Rmd") +#' } +#' +#' @seealso +#' \code{\link[pinp]{pinp}} +#' @references +#' JJ Allaire, R Foundation, Hadley Wickham, Journal of Statistical Software, Yihui Xie, Ramnath +#' Vaidyanathan, Association for Computing Machinery, Carl Boettiger, Elsevier, Karl Broman, +#' Kirill Mueller, Bastiaan Quast, Randall Pruim, Ben Marwick, Charlotte Wickham, Oliver Keyes +#' and Miao Yu (2017). rticles: Article Formats for R Markdown. R package version 0.4.1. +#' \url{https://CRAN.R-project.org/package=rticles} +#' +#' JJ Allaire, Joe Cheng, Yihui Xie, Jonathan McPherson, Winston Chang, Jeff Allen, Hadley +#' Wickham, Aron Atkins, Rob Hyndman and Ruben Arslan (2017). rmarkdown: Dynamic Documents for R. +#' R package version 1.6. \url{https://CRAN.R-project.org/package=rmarkdown} +#' +#' Yihui Xie (2017). knitr: A General-Purpose Package for Dynamic Report Generation in R. R +#' package version 1.17. +#' +#' Aaron Wolen (2017). pandoc-letter. GitHub Repository. \url{https://github.com/aaronwolen/pandoc-letter} +linl <- function(..., keep_tex = TRUE) { + + template <- system.file("rmarkdown", "templates", "pdf", "resources", "template.tex", + package="linl") + base <- inherit_pdf_document(..., template = template, keep_tex = keep_tex) + + base$knitr$opts_chunk$prompt <- FALSE # changed from TRUE + base$knitr$opts_chunk$comment <- '# ' # default to one hashmark + base$knitr$opts_chunk$highlight <- TRUE # changed as well + + base +} + + +# Call rmarkdown::pdf_documet and mark the return value as inheriting pdf_document +inherit_pdf_document <- function(...) { + fmt <- rmarkdown::pdf_document(...) + fmt$inherits <- "pdf_document" + fmt +} + +knitr_fun <- function(name) utils::getFromNamespace(name, 'knitr') + +output_asis <- knitr_fun('output_asis') + + diff --git a/cleanup b/cleanup new file mode 100755 index 0000000..5cca55e --- /dev/null +++ b/cleanup @@ -0,0 +1,5 @@ +#!/bin/sh + +(cd vignettes && \ + rm -rf jss.bst linl.bbl linl.bib linl.cls linl.pdf linl.tex linl.xwm linl_files/ && \ + cd ..) diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd new file mode 100644 index 0000000..312b7f8 --- /dev/null +++ b/inst/NEWS.Rd @@ -0,0 +1,10 @@ +\name{NEWS} +\title{News for Package \pkg{linl}} +\newcommand{\ghpr}{\href{https://github.com/eddelbuettel/linl/pull/#1}{##1}} +\newcommand{\ghit}{\href{https://github.com/eddelbuettel/linl/issues/#1}{##1}} + +\section{Changes in tint version 0.0.1 (2017-10-15)}{ + \itemize{ + \item Initial CRAN release + } +} diff --git a/inst/rmarkdown/templates/pdf/resources/template.tex b/inst/rmarkdown/templates/pdf/resources/template.tex new file mode 100755 index 0000000..360d07b --- /dev/null +++ b/inst/rmarkdown/templates/pdf/resources/template.tex @@ -0,0 +1,291 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{letter} +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex + \ifxetex + \usepackage{mathspec} + \else + \usepackage{fontspec} + \fi + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(euro)$ + \newcommand{\euro}{€} +$endif$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$if(CJKmainfont)$ + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +\usepackage[unicode=true]{hyperref} +$if(colorlinks)$ +\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(lang)$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{long table}}{} +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ + +% set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +$if(signature)$ +\usepackage{graphicx,grffile} +\signature{$if(signature-before)$\vspace*{$signature-before$}$endif$\includegraphics{$signature$}$if(author)$\\$if(signature-after)$\vspace*{$signature-after$}$endif$$for(author)$$author$$sep$\\$endfor$$endif$} +$else$ +$if(author)$ +\signature{$for(author)$$author$$sep$\\$endfor$} +$endif$ +$endif$ + +$if(date)$ +\date{$date$} +$endif$ + +$for(header-includes)$ +$header-includes$ +$endfor$ +\address{$for(return-address)$$return-address$$sep$\\$endfor$} + +$if(blockquote)$ +\usepackage{mdframed} % color is loaded by mdframed +\definecolor{greyborder}{RGB}{221,221,221} +\definecolor{greytext}{RGB}{119,119,119} +\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=greyborder,skipabove=\parskip]{blockquote} +\renewenvironment{quote}{\begin{blockquote}\list{}{\rightmargin=0em\leftmargin=0em}% +\item\relax\color{greytext}\ignorespaces}{\unskip\unskip\endlist\end{blockquote}} +$endif$ + +$if(letterhead)$ +\usepackage[dvipsnames]{color} +\usepackage{wallpaper} +\ThisULCornerWallPaper{1}{$letterhead$} +$endif$ + +\begin{document} + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ + +\begin{letter}{$for(address)$$address$$sep$\\$endfor$} +\opening{$opening$} + +$body$ + +$if(closing)$ +$if(closing-indentation)$ +\longindentation=$closing-indentation$ +$endif$ +\closing{$closing$} +$endif$ +$if(encl)$ +\encl{$for(encl)$$encl$$sep$\\$endfor$} +$endif$ +$if(cc)$ +\cc{$for(cc)$$cc$$sep$\\$endfor$} +$endif$ +$if(ps)$ +\ps{$ps$} +$endif$ + +\end{letter} + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/inst/rmarkdown/templates/pdf/skeleton/skeleton.Rmd b/inst/rmarkdown/templates/pdf/skeleton/skeleton.Rmd new file mode 100644 index 0000000..902b3f8 --- /dev/null +++ b/inst/rmarkdown/templates/pdf/skeleton/skeleton.Rmd @@ -0,0 +1,31 @@ +--- +author: +- Aaron Wolen +- Some Organization +opening: Dear Dirk, +closing: Sincerely, +date: 12 December 2020 +address: +- Dirk Eddelbuettel +- 123 Street Rd +- Chicago, IL +return-address: +- My Home +- 456 Road St. +- New York, NY +cc: +- Recipient +encl: +- Enclosure +fontfamily: mathpazo +fontsize: 11pt +geometry: margin=1in +blockquote: true +output: linl::linl +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin mollis dolor vitae tristique eleifend. Quisque non ipsum sit amet velit malesuada consectetur. Praesent vel facilisis leo. Sed facilisis varius orci, ut aliquam lorem malesuada in. Morbi nec purus at nisi fringilla varius non ut dui. Pellentesque bibendum sapien velit. Nulla purus justo, congue eget enim a, elementum sollicitudin eros. Cras porta augue ligula, vel adipiscing odio ullamcorper eu. In tincidunt nisi sit amet tincidunt tincidunt. Maecenas elementum neque eget dolor [egestas fringilla](http://example.com): + +> Nullam eget dapibus quam, sit amet sagittis magna. Nam tincidunt, orci ac imperdiet ultricies, neque metus ultrices quam, id gravida augue lacus ac leo. + +Vestibulum id sodales lectus, sed scelerisque quam. Nullam auctor mi et feugiat commodo. Duis interdum imperdiet nulla, vitae bibendum eros placerat non. Cras ornare, risus in faucibus malesuada, libero sem fringilla quam, ut luctus enim sapien eget dolor. diff --git a/inst/rmarkdown/templates/pdf/template.yaml b/inst/rmarkdown/templates/pdf/template.yaml new file mode 100644 index 0000000..f03c5b4 --- /dev/null +++ b/inst/rmarkdown/templates/pdf/template.yaml @@ -0,0 +1,4 @@ +name: Linl Is Not Letter (PDF) +description: > + A wrapper for the LaTeX Latter class +create_dir: false diff --git a/man/linl.Rd b/man/linl.Rd new file mode 100644 index 0000000..6b3460f --- /dev/null +++ b/man/linl.Rd @@ -0,0 +1,48 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/linl.R +\name{linl} +\alias{linl} +\title{LaTeX Letter format} +\usage{ +linl(..., keep_tex = TRUE) +} +\arguments{ +\item{...}{Additional arguments to \code{rmarkdown::pdf_document}} + +\item{keep_tex}{A boolean toggle to select whether intermediate +LaTeX files are to be kept, defaults to \code{TRUE}} +} +\value{ +R Markdown output format to pass to +\code{\link[rmarkdown:render]{render}} +} +\description{ +A format suitable for standard letters, along a with a number of +helpful extensions +} +\examples{ +\dontrun{ +rmarkdown::draft("MyLetter.Rmd", template = "pdf", package = "linl") +rmarkdown::render("MyLetter.Rmd") +} + +} +\references{ +JJ Allaire, R Foundation, Hadley Wickham, Journal of Statistical Software, Yihui Xie, Ramnath +Vaidyanathan, Association for Computing Machinery, Carl Boettiger, Elsevier, Karl Broman, +Kirill Mueller, Bastiaan Quast, Randall Pruim, Ben Marwick, Charlotte Wickham, Oliver Keyes +and Miao Yu (2017). rticles: Article Formats for R Markdown. R package version 0.4.1. +\url{https://CRAN.R-project.org/package=rticles} + +JJ Allaire, Joe Cheng, Yihui Xie, Jonathan McPherson, Winston Chang, Jeff Allen, Hadley +Wickham, Aron Atkins, Rob Hyndman and Ruben Arslan (2017). rmarkdown: Dynamic Documents for R. +R package version 1.6. \url{https://CRAN.R-project.org/package=rmarkdown} + +Yihui Xie (2017). knitr: A General-Purpose Package for Dynamic Report Generation in R. R +package version 1.17. + +Aaron Wolen (2017). pandoc-letter. GitHub Repository. \url{https://github.com/aaronwolen/pandoc-letter} +} +\seealso{ +\code{\link[pinp]{pinp}} +} diff --git a/vignettes/examples/letterhead.pdf b/vignettes/examples/letterhead.pdf new file mode 100644 index 0000000..429676e Binary files /dev/null and b/vignettes/examples/letterhead.pdf differ diff --git a/vignettes/examples/signature.pdf b/vignettes/examples/signature.pdf new file mode 100644 index 0000000..11a17c3 Binary files /dev/null and b/vignettes/examples/signature.pdf differ diff --git a/vignettes/linl.Rmd b/vignettes/linl.Rmd new file mode 100755 index 0000000..395a879 --- /dev/null +++ b/vignettes/linl.Rmd @@ -0,0 +1,48 @@ +--- +author: +- Aaron Wolen +- Your Organization +opening: To whom it may concern, +closing: Sincerely, +date: 12 December 2020 +address: +- 123 Street Rd +- Chicago, IL +return-address: +- My Home +- 456 Road St. +- New York, NY +cc: +- Recipient 1 +- Recipient 2 +encl: +- Enclosure 1 +- Enclosure 2 +ps: | + PS Lorem ipsum dolor sit amet, *consectetur* adipiscing elit. +fontfamily: mathpazo +fontsize: 12pt +geometry: margin=1in +blockquote: true +letterhead: examples/letterhead.pdf +signature: examples/signature.pdf +signature-before: -8ex +signature-after: 0ex +closing-indentation: 0pt +links-as-notes: true +colorlinks: true + +output: linl::linl + +vignette: > + %\VignetteIndexEntry{linl} + %\VignetteKeywords{linl,vignette} + %\VignettePackage{linl} + %\VignetteEngine{knitr::rmarkdown} +--- + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin mollis dolor vitae tristique eleifend. Quisque non ipsum sit amet velit malesuada consectetur. Praesent vel facilisis leo. Sed facilisis varius orci, ut aliquam lorem malesuada in. Morbi nec purus at nisi fringilla varius non ut dui. Pellentesque bibendum sapien velit. Nulla purus justo, congue eget enim a, elementum sollicitudin eros. Cras porta augue ligula, vel adipiscing odio ullamcorper eu. In tincidunt nisi sit amet tincidunt tincidunt. Maecenas elementum neque eget dolor [egestas fringilla](http://example.com): + +> Nullam eget dapibus quam, sit amet sagittis magna. Nam tincidunt, orci ac imperdiet ultricies, neque metus ultrices quam, id gravida augue lacus ac leo. + +Vestibulum id sodales lectus, sed scelerisque quam. Nullam auctor mi et feugiat commodo. Duis interdum imperdiet nulla, vitae bibendum eros placerat non. Cras ornare, risus in faucibus malesuada, libero sem fringilla quam, ut luctus enim sapien eget dolor.