~kris/dots

srice

ref: 2dc7c2f7e39f562e3603676ef50c2df0a4723c19 srice/.local/bin/init-all-courses.py -rw-r--r-- 1.8 KiB
2dc7c2f7 — Kris Yotam update nvim plan9 theme, add hosts file, misc updates 6 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
"""
===============================================================
 Script: init-all-courses.py
 Author: Kris Yotam (aka. khr1st)
 Date:   2025-09-29
 License: MIT License
 Description:
   Initializes LaTeX note-taking course directories by
   creating `master.tex`, `master.tex.latexmain`, and
   ensuring `figures/` exists for each course.

 Inspiration:
   Adapted and extended from Gilles Castel's lecture note workflow.
===============================================================
"""

from courses import Courses


def build_master_content(course_title: str) -> str:
    """
    Return the LaTeX master.tex skeleton as a single string.
    """
    lines = [
        r'\documentclass[a4paper]{article}',
        r'\input{../preamble.tex}',
        fr'\title{{{course_title}}}',
        r'\begin{document}',
        r'    \maketitle',
        r'    \tableofcontents',
        r'    % start lectures',
        r'    % end lectures',
        r'\end{document}',
    ]
    return '\n'.join(lines)


def init_course(course):
    """
    Initialize one course directory with master.tex,
    .latexmain marker, and figures/ folder.
    """
    lectures = course.lectures
    course_title = lectures.course.info["title"]

    # Write master.tex with minimal skeleton
    lectures.master_file.touch(exist_ok=True)
    lectures.master_file.write_text(build_master_content(course_title))

    # Touch helper file for latexmk integration
    (lectures.root / 'master.tex.latexmain').touch(exist_ok=True)

    # Ensure figures directory exists
    (lectures.root / 'figures').mkdir(exist_ok=True)

    print(f"[ok] Initialized {course_title}")


def main():
    """
    Iterate over all courses and initialize them.
    """
    for course in Courses():
        init_course(course)


if __name__ == "__main__":
    main()