New blog
New blog blog org emacs
I've decided that I don't like my Wordpress blog (it has adverts, it's hard to edit because I need to use the Wordpress content-management system, I need to write "latex" inside dollar signs to generate LaTeX,…) and I am going to try using Org-mode in Emacs to generate my blog from now on. The current configuration is extremely basic; I will add more functionality later.
To remind me how this works, here is the basic setup of the blog:
- I have a directory called web which contains a Lisp script called
org-publish.el and has subdirectories:
- aux, containing auxiliary files like style.css
- html, containing the html output produced by org
- org, containing org source files
- In particular, web/org contains a file called index.org which is an
org file containing summaries of all my posts as top-level
headings, each linked to the full article (another org file). This
file looks something like the following:
#+TITLE: Blog * New blog :blog:org:emacs: [2017-09-12 Tue] I've decided that I don't like my old blog and I'm setting up a new blog using org-mode. [[new-blog.org][Read on to find out how]].
…and here are the steps used to update the blog:
- Open up index.org in Emacs.
- Load the file org-publish, by typing
ALT-x load-file web/org-publish.el
- Edit index.org and the main file for the given blog article by adding a new heading above the others, together with relevant tags and a timestamp (using the command CTRL-c !) and writing the blog entry.
- Publish by typing:
ALT-x org-publish-current-project
- This generates the HTML files which I can then upload via ftp.
The all-important file in the background is org-publish.el:
(defvar web-head
"<meta name='viewport' content='width=device-width,
initial-scale=1.0'> <meta name='keywords' content='Jonny Evans,
mathematics, geometry, UCL'> <meta name='description'
content='Blog of the UCL-based mathematician Jonny Evans'>
<meta name='author' content='Jonny Evans'>
<link rel='stylesheet' type='text/css' href='../aux/style.css'/>")
(defvar web-preamble
"<div class='banner'>
<a href='index.html'>Blog index</a> |
<a href='https://www.homepages.ucl.ac.uk/~ucahjde'>Homepage</a></div>")
(defvar web-postamble
"<div class='bottomblock'><a class='cc' href='https://creativecommons.org/licenses/by-sa/4.0/legalcode'>CC-BY-SA</a>, Jonny Evans 2017</div>")
(let ((proj-base (file-name-directory load-file-name)))
(setq org-publish-project-alist
`(("website"
:base-directory ,(concat proj-base "./org/")
:recursive t
:section-numbers nil
:with-toc nil
:exclude "head.org"
:html-head ,web-head
:html-postamble ,web-postamble
:html-preamble ,web-preamble
:base-extension "org"
:publishing-directory ,(concat proj-base "./html")
:publishing-function org-html-publish-to-html))))
The following sites were useful in helping me to figure out what I was doing:
- https://nicolas.petton.fr/blog/blogging-with-org-mode.html
- https://jgkamat.github.io/blog/website1.html
The main features I would like to add to this set-up are:
- tag-searching (I should be able to create pages associated to different tags just using org-mode, though I may also need to use some background bash scripts if I can't figure out how to do this).
- tikz figures (doesn't work with MathJax at the moment, but maybe this can be solved within org-mode).