You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Document CV build system architecture and file structure
- Explain custom LaTeX-to-HTML parser functionality
- List key functions in extract_cv.py with descriptions
- Document cv.css stylesheet features
- Explain GitHub Actions workflow triggers
- Document test coverage (61 tests)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+119-2Lines changed: 119 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,7 +25,9 @@ contextlab.github.io/
25
25
│ ├── publications/ # Publication thumbnails
26
26
│ └── software/ # Software project images
27
27
├── documents/
28
-
│ └── JRM_CV.pdf # Jeremy Manning's CV
28
+
│ ├── JRM_CV.tex # CV LaTeX source (edit this!)
29
+
│ ├── JRM_CV.pdf # Generated PDF (auto-built)
30
+
│ └── JRM_CV.html # Generated HTML (auto-built)
29
31
├── data/ # Content source files (edit these!)
30
32
│ ├── publications.xlsx
31
33
│ ├── people.xlsx
@@ -35,7 +37,9 @@ contextlab.github.io/
35
37
│ ├── people.html
36
38
│ └── software.html
37
39
├── scripts/ # Build and validation scripts
38
-
│ ├── build.py
40
+
│ ├── build.py # Content page builder
41
+
│ ├── build_cv.py # CV build orchestration
42
+
│ ├── extract_cv.py # LaTeX-to-HTML parser
39
43
│ └── ...
40
44
└── tests/ # Automated tests
41
45
└── ...
@@ -274,6 +278,119 @@ You can also manually trigger a build from the [Actions tab](https://github.com/
274
278
275
279
---
276
280
281
+
## CV Auto-Generation
282
+
283
+
Jeremy Manning's CV is automatically compiled from LaTeX source into both PDF and HTML formats. The HTML version matches the PDF styling and includes a download button.
|`extract_header_info()`| Extract name and contact information |
349
+
|`extract_sections()`| Split document into sections/subsections |
350
+
|`render_section_content()`| Convert section content based on type |
351
+
|`generate_html()`| Assemble complete HTML document |
352
+
353
+
### CV Stylesheet (cv.css)
354
+
355
+
The stylesheet provides:
356
+
357
+
-**Dartmouth Ruzicka font** via `@font-face` declarations
358
+
-**Dartmouth green** color scheme: `rgb(0, 105, 62)`
359
+
-**Sticky download bar** at top of page
360
+
-**Responsive design** for tablet and mobile
361
+
-**Print styles** that match PDF appearance
362
+
-**Reverse-numbered lists** using native `<ol reversed>` support
363
+
364
+
### Automatic Builds (GitHub Actions)
365
+
366
+
The `build-cv.yml` workflow triggers when you push changes to:
367
+
-`documents/JRM_CV.tex`
368
+
-`scripts/build_cv.py` or `scripts/extract_cv.py`
369
+
-`css/cv.css`
370
+
-`.github/workflows/build-cv.yml`
371
+
372
+
The workflow:
373
+
1. Installs TeX Live and Dartmouth Ruzicka fonts
374
+
2. Compiles LaTeX to PDF using XeLaTeX
375
+
3. Converts LaTeX to HTML using the custom parser
376
+
4. Runs 61 automated tests
377
+
5. Commits and pushes the generated files
378
+
379
+
### Testing
380
+
381
+
The test suite (`tests/test_build_cv.py`) includes 61 tests covering:
382
+
383
+
- LaTeX formatting conversion
384
+
- Balanced brace parsing
385
+
- Section extraction
386
+
- HTML generation
387
+
- PDF compilation
388
+
- Content validation
389
+
- Link validation
390
+
- Edge cases
391
+
392
+
---
393
+
277
394
## Adding Content (Legacy/Manual Method)
278
395
279
396
> **Note:** For publications, people, and software pages, use the spreadsheet method above. The manual method below is for other pages or special cases.
0 commit comments