Daylight is the software package I use to produce research notebooks, research papers, presentations, and essays in HTML5 and PDF. I use it for pretty much all my documents, but it's especially suited for open-notebook science, hence its name: it casts research into the harsh glare of public scrutiny. It's implemented as an export backend for Org mode. The Emacs Lisp code is supplemented with pre- and post-processors written in Python 3 and a little bit of Hy and R for helping with Hy and R code blocks.
The features that Daylight provides over plain Org include (see
example/slideshow.org for a demonstration):
- Automatically generated APA-style bibliographies, with linked inline citations and COinS
- APA-style table and figure references, when the table or figure has a caption
- Production of APA-style manuscripts as PDFs
- Production of slideshows as PDFs (without TeX or an office program)
- Simplification of LaTeX fragments to other Org constructs (when this is possible, and translation to MathML otherwise)
- Hy support
org-babel-execute:hyetc. in lieu of a real
- Encapsulation of evaluated code
- Pretty-printing of objects from dictionaries to numpy arrays to pandas DataFrames
- Easy creation of matplotlib graphics from code blocks (just specify the
- New features for R
- R code blocks evaluated with
:results silentwill not print huge assigned objects to the echo area
:results graphicsis implied by
- R code blocks evaluated with
- Linkable labels to figures, generated based on the file name
- Custom postprocessors written in Python
- Shortcut link types for the English Wikipedia and DOIs
- Mid-paragraph comments
- Named instead of numbered
ids for sections and footnotes (which ought to be a lot more future-proof)
- Headers with creation and modification dates
- License footers
- More meta tags
There's also a variety of tweaks to existing features, from how R objects are represented as Org tables to wording (e.g., "Table of Contents" is replaced with "Contents").
I've published Daylight more for the sake of making my research reproducible than because I expect other people to use it for their own work. For this reason, no hooks or Custom variables are provided. If you want to change anything, you'll have to edit the code directly. That said, I encourage you to get in contact with me if you're thinking of doing something with Daylight. Then, perhaps, we can make something more generally useful out of it together.
The inclusion of special features for both R and Hy is a reflection of how I used R extensively for data analysis from 2011 to 2014 and have switched over to Hy for new projects starting in 2015.
Installation and use
Warning: Don't export untrusted Daylight files. At least one feature (POSTPROC blocks) allows arbitrary code execution.
Oh boy, I hope you packed a lunch.
You'll need Emacs and Org. For Hy, you'll need Hy (hy-mode is nice but not really required). For R code, you'll need R and Emacs Speaks Statistics (ESS). Here's a known-good combination of versions:
- GNU Emacs 25.2.2
- Org ed0c8cb995329c05058739b98d68e879b1db7e95
- hy 0.14.0+68.g308196d
- R 3.4.2
- ESS 16.10-1
Make sure Python 3 can find the
daylightpackage in Daylight's
python3-libdirectory, and make sure Hy can find the
daylight_hypackage in Daylight's
hy-libdirectory. Also get Kodhy and make sure Hy can find the
Download http://arfer.net/daylight/kodi-bibliography.yaml. Move it to
$HOME/.daylight/bibliographies/arfer.net:daylight:kodi-bibliography.yaml. (Daylight identifies bibliographies by URL, but I haven't implemented automatic retrieval of them.)
Create the directory
Install quickbib and citematic_coins (from Citematic; the Perl parts of Citematic are not required by Daylight).
Install Kodi.R (you must set the R option
Kodi.R.pathso R can find it, presumably in your .Rprofile).
In your .emacs, write:
(require 'daylight) ; And make sure Emacs can find daylight.el. (setq daylight-ess t)
Also, add R to
You should now be able to export a Daylight buffer to HTML with
To produce a PDF in APA style, say
(daylight-export-to-file "/tmp/daylight-output.html" (list :daylight-apa t)), open the resulting HTML page in Firefox, and print it to a file. Yes, this system is a little silly considering that Org also supports LaTeX and OpenDocument export. But, having used both LaTeX and LibreOffice's scripting interface extensively in the past, I can attest that the combination of Firefox, HTML, and CSS is much pleasanter to work with.
Similarly, if a Daylight buffer has
daylight_slideshow:t in its
daylight-export-to-file will produce an HTML file suitable for printing to a file to create a slideshow. Daylight expects the paper size for slideshows to be 10 inches wide by 7½ inches tall.
example directory contains various informal tests. A few tests of R encapsulation can be run by doing
tests.R. As for
document.org, try exporting it or evaluating code blocks in it after
setup.R. If you disable syntax highlighting [with, say,
(daylight-aliasing 'org-html-fontify-code (lambda (code lang) (org-html-encode-plain-text code)) '(daylight-export-to-file "/tmp/daylight-output.html"))] and ensure your filesystem's modification date for
document.org is set appropriately, the result of exporting
document.org should be identical to
This program is copyright 2013–2018 Kodi Arfer.
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.