diff --git a/.claude/skills/job-application-assistant/05-cv-templates.md b/.claude/skills/job-application-assistant/05-cv-templates.md index 0c66a70..c046aa4 100644 --- a/.claude/skills/job-application-assistant/05-cv-templates.md +++ b/.claude/skills/job-application-assistant/05-cv-templates.md @@ -1,5 +1,5 @@ --- -framework_version: 1.4.0 +framework_version: 1.4.1 --- # CV Templates and Tailoring Guide @@ -29,28 +29,42 @@ Expected output: `Output written on main__.pdf (2 pages, ...)`. A \moderncvstyle{banking} \moderncvcolor{blue} -% Force both first and last name AND section headings to render in moderncv -% blue (color1). Default banking on lualatex+MiKTeX leaves these black, which -% looks inconsistent with the rest of the blue accent scheme. -\renewcommand*{\firstnamestyle}[1]{{\fontsize{34}{36}\bfseries\upshape\color{color1}#1}} -\renewcommand*{\lastnamestyle}[1]{{\fontsize{34}{36}\bfseries\upshape\color{color1}#1}} +% Force the name and section headings to render in moderncv blue (color1). +% Default banking leaves them black: moderncvstylebanking.sty's \colorlet +% copies (not aliases) the pre-scheme accent colour, so the name colours are +% frozen before \moderncvcolor runs. Re-let them after. \namefont is the hook +% every name-style macro routes through, so this also works on moderncv 2.3.1 +% (Debian/Ubuntu apt), which has no \firstnamestyle/\lastnamestyle at all. +\renewcommand*{\namefont}{\fontsize{34}{36}\bfseries\upshape} +\colorlet{firstnamecolor}{color1} +\colorlet{lastnamecolor}{color1} +\colorlet{namecolor}{color1} \renewcommand*{\sectionstyle}[1]{{\sectionfont\color{color1}#1}} \usepackage[utf8]{inputenc} -\usepackage{hyperref} -\hypersetup{ +% moderncv loads hyperref itself in an \AtEndPreamble hook, so \hypersetup +% must go in an \AtEndPreamble of our own: on moderncv < 2.4 a top-level +% \usepackage{hyperref} clashes with the class's own +% \RequirePackage[unicode]{hyperref}. From 2.4.0 the class passes its options +% through \PassOptionsToPackage instead, which is what removes that clash. +\AtEndPreamble{\hypersetup{ colorlinks=true, linkcolor=blue, filecolor=magenta, urlcolor=blue, pdftitle={[YOUR_NAME] - CV}, - pdfpagemode=FullScreen, -} + % Keep pdfpagemode=UseNone: this block runs after moderncv's own + % \AtEndPreamble (moderncv.cls sets pdfpagemode there), so a FullScreen + % value here would win and open every CV in fullscreen presentation mode. + pdfpagemode=UseNone, +}} \usepackage[scale=0.77]{geometry} \usepackage{import} % Personal data \name{[FIRST_NAME]}{[LAST_NAME]} +% If you have no address to list, DELETE this whole line. \address{}{}{} fails +% with "There's no line here to end" on every moderncv version. \address{[YOUR_ADDRESS]}{}{} \phone[mobile]{[YOUR_PHONE]} \email{[YOUR_EMAIL]} @@ -72,7 +86,7 @@ Expected output: `Output written on main__.pdf (2 pages, ...)`. A ### Color overrides -The three `\renewcommand*` lines in the preamble are required on lualatex+MiKTeX. Without them the firstname, lastname, and section headings render in black even though `\moderncvcolor{blue}` is set, which looks inconsistent with the rest of the blue accent scheme (links, bullet markers, contact icons). The override forces all three to use `color1` (moderncv's accent colour, which becomes blue under `\moderncvcolor{blue}`). Both names render bold; if you prefer the firstname in regular weight, change the firstnamestyle override from `\bfseries` to `\mdseries`. Don't drop the override - on most modern installs the defaults render visibly wrong. +The `\renewcommand*` on `\namefont` and the three `\colorlet` lines in the preamble are required on lualatex+MiKTeX. Without them the name and section headings render in black even though `\moderncvcolor{blue}` is set, which looks inconsistent with the rest of the blue accent scheme (links, bullet markers, contact icons). The cause: `moderncvstylebanking.sty` defines the name colours with `\colorlet`, which *copies* the accent colour as it is before the scheme is applied, so the name colours are frozen to the pre-scheme value; re-assigning them with `\colorlet` after `\moderncvcolor{blue}` (as the preamble does) re-pins them to `color1`. `\namefont` is the shared hook every name-style macro routes through, so the block is version-agnostic - including moderncv 2.3.1 from Debian/Ubuntu apt, which has no `\firstnamestyle`/`\lastnamestyle` at all. Both names render bold; if you prefer regular weight, change `\bfseries` to `\mdseries` in the `\namefont` line (the weight now lives there, so it applies to the whole name). Don't drop the overrides - on most modern installs the defaults render visibly wrong. ### Spacing inside itemize lists (important) diff --git a/CHANGELOG.md b/CHANGELOG.md index be7b59a..35facf6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,6 +33,21 @@ per-file diff commands. between (e.g. `60.000,50`, `108,5`) keep parsing exactly as before. Pinned by `tests/test_convert_salary_excel.py`. +- **`main_example.tex` compiles on apt-packaged moderncv** (#242) - the banking template + set its name styling through `\firstnamestyle`/`\lastnamestyle`, which moderncv 2.3.1 + (Debian/Ubuntu apt) does not have, so a fresh fork could not compile its own example CV + on that toolchain. Name styling now routes through `\namefont`, the hook every name-style + macro shares: a true no-op on moderncv 2.4+ (where head iii typesets via + `\firstnamestyle`/`\lastnamestyle` and never calls `\namefont`'s replacements), and the + only option on 2.3.1 where those macros do not exist. Two review follow-ups landed in the + same change: the `\hypersetup` comment now names the real clash mechanism + (`\RequirePackage[unicode]{hyperref}` on < 2.4; `\PassOptionsToPackage`, introduced in + 2.4.0, is what removes the clash), and the metadata block sets `pdfpagemode=UseNone` - a + `FullScreen` value there would win over the class's own `\AtEndPreamble` default and make + every CV open in fullscreen presentation mode. `05-cv-templates.md`'s preamble copy stays + in lockstep (framework_version 1.4.0 -> 1.4.1). Verified on moderncv 2.5.1: exit 0, + exactly 2 pages, rendering unchanged. + ## [1.5.0] - 2026-08-12 ### Added diff --git a/cv/main_example.tex b/cv/main_example.tex index e4818d3..7070979 100644 --- a/cv/main_example.tex +++ b/cv/main_example.tex @@ -10,28 +10,42 @@ \moderncvstyle{banking} \moderncvcolor{blue} -% Force both first and last name AND section headings to render in moderncv -% blue (color1). Default banking on lualatex+MiKTeX leaves these black, which -% looks inconsistent with the rest of the blue accent scheme. -\renewcommand*{\firstnamestyle}[1]{{\fontsize{34}{36}\bfseries\upshape\color{color1}#1}} -\renewcommand*{\lastnamestyle}[1]{{\fontsize{34}{36}\bfseries\upshape\color{color1}#1}} +% Force the name and section headings to render in moderncv blue (color1). +% Default banking leaves them black: moderncvstylebanking.sty's \colorlet +% copies (not aliases) the pre-scheme accent colour, so the name colours are +% frozen before \moderncvcolor runs. Re-let them after. \namefont is the hook +% every name-style macro routes through, so this also works on moderncv 2.3.1 +% (Debian/Ubuntu apt), which has no \firstnamestyle/\lastnamestyle at all. +\renewcommand*{\namefont}{\fontsize{34}{36}\bfseries\upshape} +\colorlet{firstnamecolor}{color1} +\colorlet{lastnamecolor}{color1} +\colorlet{namecolor}{color1} \renewcommand*{\sectionstyle}[1]{{\sectionfont\color{color1}#1}} \usepackage[utf8]{inputenc} -\usepackage{hyperref} -\hypersetup{ +% moderncv loads hyperref itself in an \AtEndPreamble hook, so \hypersetup +% must go in an \AtEndPreamble of our own: on moderncv < 2.4 a top-level +% \usepackage{hyperref} clashes with the class's own +% \RequirePackage[unicode]{hyperref}. From 2.4.0 the class passes its options +% through \PassOptionsToPackage instead, which is what removes that clash. +\AtEndPreamble{\hypersetup{ colorlinks=true, linkcolor=blue, filecolor=magenta, urlcolor=blue, pdftitle={[YOUR_NAME] - CV}, - pdfpagemode=FullScreen, -} + % Keep pdfpagemode=UseNone: this block runs after moderncv's own + % \AtEndPreamble (moderncv.cls sets pdfpagemode there), so a FullScreen + % value here would win and open every CV in fullscreen presentation mode. + pdfpagemode=UseNone, +}} \usepackage[scale=0.80]{geometry} \usepackage{import} % personal data \name{[First]}{[Last]} +% If you have no address to list, DELETE this whole line. \address{}{}{} fails +% with "There's no line here to end" on every moderncv version. \address{[Your Address, City, Country]}{}{} \phone[mobile]{[+XX XXXXXXXXXX]} \email{[your.email@example.com]}