107 lines
4.2 KiB
Markdown
107 lines
4.2 KiB
Markdown
# Mike Eberlein — Resume
|
|
|
|
Single-page resume for Mike Eberlein (Engineering Manager — automotive infotainment / software-defined vehicles).
|
|
|
|
**Single content source: `resume.yaml`.** Two renderers (LaTeX and ODT) read the YAML and emit format-specific files. DOCX is produced by converting the ODT with LibreOffice. Edit `resume.yaml`; the generated `.tex` should not be edited by hand.
|
|
|
|
Two flavors are produced from the same YAML:
|
|
|
|
- **Short** — condensed single-page resume. Outputs: `MikeEberlein_Resume.{tex,pdf,odt,docx}`.
|
|
- **Detailed** — longer version with extra bullets / roles / jobs. Outputs: `MikeEberlein_Resume_Detailed.{tex,pdf,odt,docx}`.
|
|
|
|
## Files
|
|
|
|
| File | Purpose |
|
|
| --- | --- |
|
|
| `resume.yaml` | **Source of truth.** Edit this. |
|
|
| `render_tex.py` | YAML → `MikeEberlein_Resume.tex`. LaTeX preamble lives inline. |
|
|
| `render_odt.py` | YAML → `MikeEberlein_Resume.odt`. ODT styles live inline. |
|
|
| `MikeEberlein_Resume.tex` | Generated. Do not edit by hand. |
|
|
| `MikeEberlein_Resume.pdf` | Built from `.tex` via `pdflatex`. |
|
|
| `MikeEberlein_Resume.odt` | Built from YAML via `render_odt.py`. |
|
|
| `MikeEberlein_Resume.docx` | Built from `.odt` via LibreOffice. |
|
|
| `Makefile` | Build orchestration. |
|
|
| `fonts/` | Official Google Roboto font repo. Variable fonts at the top level; individual weights under `fonts/static/`. License in `fonts/OFL.txt`. **Used by both build paths**: lualatex loads from `fonts/static/`; the ODT renderer embeds these `.ttf` files inside the ODT zip. |
|
|
|
|
## Build
|
|
|
|
```bash
|
|
make # short PDF (default)
|
|
make odt # short ODT
|
|
make docx # short DOCX
|
|
make short # short PDF + ODT + DOCX
|
|
make detailed # detailed PDF + ODT + DOCX
|
|
make all # both flavors, every format
|
|
make clean # remove TeX aux files
|
|
make distclean # also remove generated PDF/ODT/DOCX/TEX
|
|
```
|
|
|
|
Run the renderers directly if you want a custom output path:
|
|
|
|
```bash
|
|
python3 render_tex.py --level=full --output=foo.tex
|
|
python3 render_odt.py --level=short --output=foo.odt
|
|
```
|
|
|
|
Required system packages (Debian/Ubuntu):
|
|
|
|
```bash
|
|
sudo apt install texlive-latex-recommended texlive-latex-extra texlive-luatex
|
|
sudo apt install libreoffice # for the .docx output
|
|
sudo apt install python3-yaml # for the renderers (usually pre-installed)
|
|
```
|
|
|
|
The PDF build uses **lualatex** with `fontspec`, loading Roboto directly from `fonts/static/`. No dependency on TeX Live's `roboto` package or any system-installed Roboto. The ODT/DOCX outputs embed the Roboto faces inside the document zip, so the resume looks correct even on a machine with no Roboto installed.
|
|
|
|
## Editing
|
|
|
|
Open `resume.yaml`. The schema:
|
|
|
|
```yaml
|
|
header: { name, tagline, email }
|
|
summary: <paragraph>
|
|
experience:
|
|
- company, dates
|
|
roles:
|
|
- title, dates
|
|
# either:
|
|
bullets: [ ... ]
|
|
# or, for nested sub-roles (used for one role with concurrent focus areas):
|
|
subroles:
|
|
- title, dates
|
|
bullets: [ ... ]
|
|
education:
|
|
- school, dates, bullets
|
|
certifications: [ ... ]
|
|
```
|
|
|
|
### Short vs. Detailed
|
|
|
|
Any list field above can have a sibling list with the `_full` suffix. The base list always renders. The `_full` list is appended only in `--level=full`. Examples:
|
|
|
|
```yaml
|
|
bullets: # always shown
|
|
- Short bullet.
|
|
bullets_full: # appended in detailed only
|
|
- Extra detail bullet.
|
|
|
|
subroles:
|
|
- { title: Always-shown sub-role, ... }
|
|
subroles_full:
|
|
- { title: Detailed-only sub-role, ... }
|
|
|
|
experience: [ ... ]
|
|
experience_full: # an entire extra job, only in detailed
|
|
- { company: ..., dates: ..., roles: [ ... ] }
|
|
```
|
|
|
|
Same convention works on `roles_full`, `education_full`, `certifications_full`.
|
|
|
|
After editing, `make all` rebuilds both flavors in every format from the same YAML.
|
|
|
|
## Layout / styling
|
|
|
|
Both renderers contain their own styling code (LaTeX preamble in `render_tex.py`, ODT XML styles in `render_odt.py`). Tweak typography, colors, spacing, etc. there. The two renderers aim for visual parity but are not byte-identical — pdflatex and LibreOffice differ on font metrics and line breaking.
|
|
|
|
The DOCX is produced from the ODT (LibreOffice's ODT→DOCX conversion is essentially lossless because the formats are siblings). DOCX fidelity is therefore nearly identical to ODT.
|