Resume/README.md

3.8 KiB

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.

Build

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:

python3 render_tex.py --level=full --output=foo.tex
python3 render_odt.py --level=short --output=foo.odt

Required system packages (Debian/Ubuntu):

sudo apt install texlive-latex-recommended texlive-latex-extra texlive-fonts-extra
sudo apt install libreoffice                  # for the .docx output
sudo apt install python3-yaml                 # for the renderers (usually pre-installed)

Editing

Open resume.yaml. The schema:

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:

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.