A LaTeX workspace for writing books and papers the way you want to write them. Not a framework, not magic — just organized components and a build system that stays out of the way.
- Keeps LaTeX components modular so you can swap or extend anything
- Builds PDFs with a single
makecommand - Lets you override only what you need, without touching the rest
- Handles versioning from git tags
- Ships GitHub Actions workflows for publishing releases
- TeX Live (full) or MiKTeX
- Bash 4+, Make, Git
- Python 3 + PyYAML (
pip install pyyaml)
mkdir my-book && cd my-book
git init
git submodule add https://github.com/papyrxis/workspace.git
bash workspace/src/init.shThat's it. The script asks a few questions and sets up everything.
make # build
make watch # auto-rebuild when you save
make clean # remove build artifacts
make sync # re-sync .pxis/ after editing workspace.ymlmy-book/
├── workspace/ ← submodule (this repo)
├── workspace.yml ← your configuration
├── main.tex ← document entry point
├── Makefile
├── parts/ ← book chapters (books only)
├── frontmatter/ ← title, preface, copyright
├── backmatter/
├── sections/ ← article sections (articles only)
├── figures/
├── references/
│ └── main.bib
├── configs/ ← your component overrides
└── .pxis/ ← auto-generated, don't edit
Everything lives in workspace.yml. Key settings:
project:
type: book # book | article
title: "My Title"
author: "Your Name"
url: "https://github.com/you/repo"
build:
source: main.tex # which .tex file to compile
engine: pdflatexRun make sync after any change to workspace.yml.
See examples/workspace.config.yml for all options.
Put your .tex files in configs/. Any file whose name matches a component
replaces that component. mode: extend appends your file after the default instead.
overrides:
dir: "configs"
mode: replace # or: extendExample: to customize colors, create configs/colors.tex. Done.
make part ARGS='-n 1 -t "Part One"'
make chapter ARGS='-p 1 -c 1 -t "Getting Started"'Default style is authoryear with footnote citations.
Use \autocite{key} for footnotes, \textcite{key} for "Author (year)" in text.
\printbibliography goes at the end.
For numeric citations, override bibliography.tex in your configs/.
After make sync (with .pxis/ committed), tag and push:
git tag v1.0.0
git push --tagsThe included workflow builds your PDF and publishes a GitHub Release automatically.
A rolling pre-release draft is also built on every push to main.
See .github/workflows/ in your project after init.