Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/lquenti/ankiding

Generate Anki Decks from Markdown Notes!
https://github.com/lquenti/ankiding

anki latex markdown rust standalone

Last synced: 2 days ago
JSON representation

Generate Anki Decks from Markdown Notes!

Awesome Lists containing this project

README

        

# Ankiding - Markdown Notes to Anki Decks!

The documentation is still work in progress. Just open an issue in case you get stuck anywhere.

## Table of Contents

- [What exactly is this?](#what-exactly-is-this)
- [Installation](#installation)
- [Quickstart](#quickstart)
- [Automated CI Anki Deck Builds](#automated-ci-anki-deck-builds)
- [Contribution](#contribution)

## What exactly is this?

This tool allows to convert your Markdown Notes to Ankidecks! It also supports Images as well as LaTeX formulas. It has full mobile support, including mobile LaTeX support.

It is created in the same spirit as Jupyter Notebooks and literate programming in general. This means, you can just embed your flash cards within your notes and it will extract them

Furthermore, we have pre-built templates for both GitHub and GitLab CIs so that, on every commit to your Markdown knowledge base repository, a new `.apkg` package is being built.

## Installation

For now, a full LaTeX suite is required in order to pre-render all LaTeX formula as the mobile apps do not support on demand formula rendering. On Debian/Ubuntu based systems:

```bash
# Everything else that has pdflatex and dvisvgm should probably suffice
sudo apt install texlive-full
```

Until we have automated builds, you also need the following build dependencies:
```bash
sudo apt install git build-essential pkg-config libssl-dev
```
as well as a Rust compiler, which I recommend installing in userspace using [`rustup`](https://rustup.rs/).

Then, just clone and build it with
```bash
git clone https://github.com/lquenti/ankiding.git
cd ankiding
cargo build --release
cd ..
```

Your binary can then be found at `./ankiding/target/release/ankiding`.

## Quickstart

Create a folder that should represent your deck name, for example
```bash
mkdir programming
```

Then, for example, create the `./programming/python.anki.md` file with your casual notes, with flash cards interjected as you see fit:

```markdown
# Python

Python is a **great** programming language because
- One can easily start programming
- It has awesome tooling
- The Jupyter support is a gamechanger for interdisciplinary work
- It has libraries for everything

> Q: Why do people use Python a lot for scripting?
>
> A: Because it has a libraries for everything
> For example:
> - subprocess for process spawning
> - os for OS integration
> - json as a json parser

Python is also used a lot in different domains such as ML or backend programming

> Q: What is the most important Python web framework
> A: Django

> Q: What are some important Python micro web frameworks?
> A: Flask and bottlepy

> Q: With which Python library would one use for modern APIs?
> A: FastAPI
```

You can also link other local or remote files as images and split it into multiple `.anki.md` files. All files with other extensions just get ignored.

Once you are done, just run ankiding with `ankiding ./programming`.

Lastly, import the `output.apkg` into your Anki and you are done!

## Automated CI Anki Deck Builds

We understand that
- Many Anki users are non technical
- Having a full LaTeX instalation is a big hastle

Furthermore, Anki decks are notoriously awful to collaboratively work on while Markdown with its simplicity is perfect for any kind of versioning. Thus, we have created fully automated CI workflows **for both GitHub and GitLab**:

1. Clone template ([GitHub](https://github.com/lquenti/ankiding-ci-github), [GitLab](https://gitlab.gwdg.de/lars.quentin/ankiding-ci-gitlab))
2. Add `.anki.md` files into the `./assets` folder
3. Commit
4. Download created Artifacts

## Contribution

I am happy for any kind of help, but for now I am still experimenting with everything. So while I am happy for any kind of help, for big changes/ideas please reach out to me first to make sure that it fits the broader vision.

Once everything is documented and formally specified and a bit more stable I am happy to change this :)