# Running Klammertext on a Mac (Apple Silicon) This guide gets Klammertext running on your Mac in a few minutes. You do **not** need to install TeX Live, Python, or any programming tools — everything, including the TeX Live system that makes PDFs, is packaged inside a single downloadable image. You install Apple's `container` runtime once, and then Klammertext works like a normal command. This guide is for **Apple Silicon Macs (M1/M2/M3/M4/M5) running macOS 26 or later**, which is what Apple's `container` runtime requires. (Support for older Intel Macs can be provided separately if needed.) ## Step 1 — Install Apple's `container` runtime `container` is Apple's own tool for running Linux container images natively on Apple Silicon. It's free. 1. Go to and download the latest installer package (the `.pkg` file). **Do not** use Homebrew — the Homebrew `container` formula is a different, unrelated tool. 2. Double-click the downloaded `.pkg` and follow the installer. 3. Open the **Terminal** app (Applications → Utilities → Terminal) and start the `container` background service (accept the recommended default if prompted): ```sh container system start ``` You only do this once. You can check the service any time with `container system status`. ## Step 2 — Download Klammertext In Terminal, paste this and press Return: ```sh container image pull akopra/klammertext:latest ``` This downloads Klammertext and its built-in TeX Live. It's a few hundred megabytes, so it takes a minute the first time. Because the image is multi-arch, `container` fetches the native Apple Silicon (arm64) build. You won't need to do this again unless you're updating. ## Step 3 — Add the Klammertext commands This step makes `ktext` (and its helpers) available as ordinary commands. 1. In Terminal, create the wrapper file by pasting this whole block and pressing Return: ```sh cat > ~/klammertext.zsh <<'EOF' # Klammertext via Apple's `container` runtime (native arm64 image; no Rosetta). KLAMMERTEXT_IMAGE="${KLAMMERTEXT_IMAGE:-akopra/klammertext:latest}" _klammertext_run() { local cmd="$1"; shift container run --rm \ -v "$PWD:/work" -w /work \ "$KLAMMERTEXT_IMAGE" "$cmd" "$@" } ktext() { _klammertext_run ktext "$@"; } kdesc() { _klammertext_run kdesc "$@"; } kdiag() { _klammertext_run kdiag "$@"; } klammertext-update() { container image delete "$KLAMMERTEXT_IMAGE" 2>/dev/null container image pull "$KLAMMERTEXT_IMAGE" } EOF ``` 2. Tell your shell to load it, by pasting this and pressing Return: ```sh echo 'source ~/klammertext.zsh' >> ~/.zshrc ``` 3. **Close Terminal and open a new window** so the change takes effect. You now have three commands — `ktext`, `kdesc`, `kdiag` — that run Klammertext inside a container while reading and writing files in whatever folder you're working in. ## Step 4 — Make your first document In Terminal, go to a folder you want to work in (for example your Desktop) and create a test file: ```sh cd ~/Desktop cat > hello.kt <<'EOF' @document :structure article :title Hello :text @s1 Hello, Klammertext @ This document was produced on macOS with no TeX Live installed — just Apple's `container` runtime and the Klammertext image. @ EOF ``` Now produce a web page and a PDF from it: ```sh ktext hello.kt -t html # makes hello/index.html ktext hello.kt -t pdf # makes hello.pdf ``` Open the results: ```sh open hello.pdf open hello/index.html ``` That's it — you're running Klammertext. ## Good to know - **Work inside one folder.** Klammertext can only see files in (or below) the folder you run the command from. Keep a document and the files it uses together, and run `ktext` from that folder. - **Runs natively.** On Apple Silicon, `container` runs the native arm64 image with no Rosetta translation. - **Fonts.** The default fonts (Crimson Pro, Open Sans, Inconsolata, and others) are built in, so PDFs work with no internet connection. Font resolution is entirely offline: asking for a font that isn't installed lists the available fonts, and additional fonts are installed from font files you already have with `kdesc --font install ` (`kdesc --font help` explains). - **Updating later.** When a new version is announced, run `klammertext-update` in Terminal. - **If you also build Klammertext from source on this Mac.** Most people don't — the whole point of the container is that you don't need a source build. But if this machine *also* has a native source build on its `PATH` (so `which ktext` shows a path like `.../K/com/ktext`), the wrapper's `ktext` function would shadow that native command. To keep both, give the container wrappers their own names by using `ktextc` / `kdescc` / `kdiagc` (trailing `c` = container) in place of `ktext` / `kdesc` / `kdiag` in the Step 3 file. Then plain `ktext` still runs your source build and `ktextc` runs the container. - **Quitting.** Klammertext only runs while you're using it; there's nothing left running afterward. If you want to stop the `container` service entirely, run `container system stop`; start it again with `container system start` next time. ## Editor support (Emacs, Sublime Text) Editing Klammertext is nicer with editor support: syntax highlighting, delimiter matching, indentation, table alignment, and diagnostics for Emacs, Sublime Text, Vim, and Visual Studio Code. It is not inside the container image — it belongs on your Mac, next to your editor. Download it from either place: - — unpacks to `emacs/`, `sublime/`, `vim/`, and `vscode/` folders, each self-contained - the Klammertext source repository, , directory `doc/edit/` Each package's README explains its installation. ## If something goes wrong - **`command not found: ktext`** — you didn't open a new Terminal window after Step 3, or the `source` line didn't get added. Re-run the Step 3 commands and open a fresh Terminal. - **`container: command not found`** — the `container` runtime isn't installed (Step 1), or the Terminal window predates the install (open a new one). - **A command hangs or won't connect** — the `container` service isn't running. Run `container system start` (check with `container system status`), then try again. - **A run aborted and now seems stuck** — `container run --rm` can leave the container behind after an error. Clear leftovers with: ```sh for id in $(container list -a -q); do container kill "$id"; container delete "$id"; done ```