Roland's homepage

My random knot in the Web

Building an epub from a single ReStructuredText file

To build an epub with sphinx, we need two directories, a source and an output. The source directory should contain at least two files; conf.py containing the settings for the epub conversion, and index.rst containing the main text.

We start in the directory where the ReStructuredText files are stored. Text between angle brackets are placeholders.

First we create the directory structure:

TMPDIR=`mktemp -d`
mkdir -p ${TMPDIR}/source
mkdir -p ${TMPDIR}/output/_static

Then we create the configuration file:

CONF=${TMPDIR}/source/conf.py
echo "author = '<surname, given-name>'" > ${CONF}
echo "copyright = '© 2021, <author>'" >> ${CONF}
echo "epub_title = '"`head -n 1 <foo.rst>`"'" >> ${CONF}
echo "epub_use_index = False" >> ${CONF}
echo "epub_publisher = 'https://<foo.bar.org>/'" >> ${CONF}
echo "epub_uid = 'pub-id'" >> ${CONF}
echo "epub_identifier = 'sha256:"`sha256 -q <foo.rst>`"'" >> ${CONF}
echo "project = '<foo>'" >> ${CONF}

For the unique identifier (epub_identifier) we use the SHA256 checksum of the source document.

Copy the source file, build the epub and clean up:

cp <foo.rst> ${TMPDIR}/source/index.rst
sphinx-build -b epub ${TMPDIR}/source ${TMPDIR}/output && \
mv ${TMPDIR}/output/*.epub . && rm -rf ${TMPDIR}

For comments, please send me an e-mail.


Related articles


←  Testing compression speed and ratio Decoding temperature data logger files  →