Skip to main content

Creates a pdf notebook/journal out of your digital notes, using latex + python

Project description

Journalmk

Creates a pdf notebook/journal out of journal/xournal/xournalpp/... notes, using python, latex and the pdf export capabilities of the respective note taking app.

While it was designed to layout xournalpp notes (*.xopp) well-arranged in a pdf document, it can be used with all sorts of digital content/notes which can be converted to a pdf document, like

  • pictures (*.jpg, *.png, ...)
  • office documents (*.odt, *.doc, *.xls, ...)
  • ipynb jupyter notebooks (*.ipynb).
  • markup content (*.html, *.svg, ...)

Quickstart

To build a pdf journal out of your digital notes, just

  • create a empty directory (the build directory) with a name you like
  • place an empty json file, with the name journalmkrc.json in this directory
  • add the following lines to this json file
{
    "root_directory": [".."],
    "notes_directory_names": ["_notes"],
    "notes_pdf_export_commands": {
        "xopp": "xournalpp {xopp} -p {pdf}"
    },
    "journal_type": "chronological",
    "datetime_journal_format": "%d. %B %Y -- %H:%M",
}

The root directory of the journal

The directory where journalmk is searching notes (the root directory) can be specified under the root_directory key in the configuration file journalmkrc.json. The build directory can lay inside or outside of the root directory. Relative paths, as in the example, are relative to the build directory.

The directory name(s) for the notes

Under the key notes_directory_names, all directory names can be speciefied, in which notes can be located. Usally, this list is not to long, since in most cases a user has only one default identifier (for example _notes) which is used system wide, to specify the location where notes can be found.

If no directory name is given, all files under the root directory are considered as notes.

The filename format(s) of the notes

The timestamp of a single note will be parsed from the filename. If this fails, the timestamp will be grabbed from the creation time of the file. While the latter works fine as long you are always on the same device with the same os, issues may occur if you switch the one or the other, so it is not recommended for long time use cases. Timestamp formats can be provided in the journalmkrc.json, e.g.:

"datetime_filename_formats": ["%Y-%m-%d-Note-%H-%M", "Note--%Y-%m-%d--%H-%M"]

A pdf conversation command

For each notes file type a pdf export/conversation command has to be provided. For xournalpp note, for example, one has to add the respective command in the following format to the journalmkrc.json:

"notes_pdf_export_commands": {
  "xopp": "xournalpp {xopp} -p {pdf}"
}

The conversation commands for other types of files can be added to this list:

"notes_pdf_export_commands": {
  "xopp": "xournalpp {xopp} -p {pdf}",
  "ipynb": "jupyter nbconvert {ipynb} --to pdf --output {pdf}",
  "jpg": "convert {jpg} {pdf}"
}

The above placeholder {xopp}, {jpg}, {ipynb} will then be replaced with the respective filename (full path) of the note and {pdf} will be replaced the pdf filename (full path), to be export.

A pdf in-place conversation command

For some types of notes no command exists where the full path of the pdf file can be specified (for example odt files). Instead the respective commands provide inplace conversation, only. Thes commands has to be provided in the seperat list:

"notes_pdf_inplace_export_commands": {
    "odt": "libreoffice --convert-to pdf {odt}"
},

In this list also a output directory can be specified (if necessary):

"notes_pdf_inplace_export_commands": {
    "odt": "libreoffice --convert-to pdf {odt} --outdir {outdir}"
},

The string "{pdf}" should not appear in notes_pdf_inplace_export_commands entries and the string "{outdir}" should not appear in notes_pdf_export_commands entries, since they will not be replaced in these scenarios.

Notes from a certain period of time

To build a journal with notes from a cetain period of time, this period can be specified by start and end time, as follows

"journal_period": ["2019-03-01--16-30", "2020-03-01--16-30"],

or by a time span given in minutes, for example for all notes from the last half year:

"journal_period": [262800]

Ignore files and folders

Directories can be ignored by specifying there full paths, for example

"exclude_directories": [
  ["/", "home", "user", "Projects", "journalmk", "journalmk", "example"]
],

and notes can be ignored by specifying there endings, for example

"exclude_note_endings": ["autosave.xopp"]

The resulting pdf file

Hyperlink to the note

At the end of the first page of each note, included in the journal.pdf, a hyperlink to the original source file can be found. By clicking on this hyperlink the file can be directly opened with the appropriate note taking application. Therefore, depending on the os, some further system configuration may be neceessary.

Journal type

By default the notes will be aligned chronological in the resulting journal.pdf file. To order the notes by topic one can add the following line to the journalmkrc.json:

"journal_type": "topological"

Therefore, in each notes directory, a additional journalmk.json can be placed to provide the name of the topic (part), subtopic (chapter) and subsubtopic (section), for example:

{
  "part": "Writing",
  "chapter": "Novels",
  "section": "Working title"
}

or

{
  "part": "Housebuilding",
  "chapter": "Living room",
  "section": "Windows and lightning"
}

Date and time format

The format of timestamps in the resulting pdf document/journal can be defined in the journalmkrc.json. Default:

  • "datetime_journal_format": "%d. %B %Y -- %H:%M"
  • "week_number_format": "Week %W"
  • "month_year_journal_format": "%B"
  • "year_journal_format": "%Y"

Global journalmkrc.json

All configurations which apply user-wide to (almost) all journalmk projects can be placed in the .journalmkrc.json file, located in the users home directory. These settings will then be loaded for all projects by default and overwritten with the settings from the project-specific journalmkrc.json file. To ignore this user-wide configuration file in certain cases, the following line can be added to the project-specific journalmkrc.json:

"ignore_user_home_journalmkrc": true

Installation

Journalmk is actually just a python script, but also packaged and available on the python package index (PyPI). It can be used without any installation as python script from the command line, or it can be installed with a package installer, like pip:

  • most recent release from PyPI (recommended)

pip install journalmk

  • most recent commit from the master branch

pip install git+https://github.com/riemarc/journalmk.git

Requirements

  • Python >= 3.8
  • LaTex (with packages: latexmk, koma-script, minitoc, pdfpages, graphics, datetime, hyperref)

Without installation

The command journalmk is only available when the package is installed. If you want to use journalmk without installation, place journalmk.py in the build directory and execute python journalmk.py.

Notes

  • Tested under Ubuntu 20.04 with Texlive 2019 and Python 3.8.
  • Designed to be cross-platform, but only tested under Linux.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

journalmk-2022.3.tar.gz (12.1 kB view hashes)

Uploaded Source

Built Distribution

journalmk-2022.3-py3-none-any.whl (10.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page