{"id":16573365,"url":"https://github.com/zoomoid/assignments","last_synced_at":"2025-07-06T18:35:28.986Z","repository":{"id":37419920,"uuid":"498360994","full_name":"zoomoid/assignments","owner":"zoomoid","description":"Tooling and source code for doing Uni assignments in LaTeX","archived":false,"fork":false,"pushed_at":"2024-09-09T08:23:18.000Z","size":6717,"stargazers_count":4,"open_issues_count":1,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-09-09T10:07:57.698Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zoomoid.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-05-31T14:02:42.000Z","updated_at":"2024-09-09T08:23:22.000Z","dependencies_parsed_at":"2024-06-20T00:11:45.031Z","dependency_job_id":"3dc21a99-1f7b-4efc-9f2a-ea4601dafee9","html_url":"https://github.com/zoomoid/assignments","commit_stats":{"total_commits":156,"total_committers":1,"mean_commits":156.0,"dds":0.0,"last_synced_commit":"f25a2f1ad24382b52d264f22b271d1fafd7fc6a5"},"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fassignments","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fassignments/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fassignments/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zoomoid%2Fassignments/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zoomoid","download_url":"https://codeload.github.com/zoomoid/assignments/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219858508,"owners_count":16556043,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-11T21:41:59.706Z","updated_at":"2024-10-11T21:42:00.422Z","avatar_url":"https://github.com/zoomoid.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zoomoid/assignments\n\n## Preamble\n\nHand-in assignments are a common thing among computer science courses at\nUniversity. So much so, that there's enough pain with academia using LaTeX for\nanything and everything and the creation of third-party tooling for making\nworking with LaTeX a little bit less painful is justified.\n\nOver the course of several semesters, I've written a lot of LaTeX code and read\neven more documentation and had my fair share of experience with building more\nand more complex things, foremost a library of LaTeX document classes and\npackages for all sorts of stuff: \u003chttps://github.com/zoomoid/alphabetclasses\u003e.\n\nSeveral of these macros and packages only ever experienced one iteration, and\nwhere immediately superseeded by another class or package. Finally, after years\nof iterating over which macros where essential and designing a layout for\nassignments that was generally accepted, `csassignments` was created.\n\n## csassigments.cls\n\n`csassignments` brings several macros for working on at least Computer Science\nassignments, but you can always add more functionality. For more details,\nconsider the classes' documentation, either from source ([TeXDoc](./tex/latex/csassignments/csassignments.dtx)) or\nonline on CTAN (\u003chttps://www.ctan.org/pkg/csassignments\u003e).\n\nUse it either in the document's root directory, or add it to your personal texmf\ndirectory:\n\n```latex\n\\documentclass{csassignments}\n\n\\course{} % course will replace title in maketitle\n\\sheet{} % adds a sheet identifier, automatically prefixed with \"Exercise Sheet\"\n\\group{} % group works like a subtitle\n\\member[]{} % members are like authors, but with a separation into ID, name, and surname\n\\due{} % add a due date, automatically prefixed with \"Handed in on\"\n\n\\begin{document}\n\\maketitle % makes the documents header\n\\gradingtable % adds a grading table between title and exercises\n\n\\exercise[\u003cpoints\u003e]{\u003ctitle\u003e} % add an exercise\n\n\\subexercise[\u003cpoints\u003e]{\u003csubtitle\u003e} % add a subexercise\n% (points are ignored, only top-level exercise points are added up to sum in grading table)\n\n\\end{document}\n```\n\n## Prerequisites for LaTeX\n\nTo compile your assignments, you'll have to have access to your local LaTeX installation to install packages.\nDepending on your TeX distribution and operating system, this varies, also whether you install packages locally\nor system-wide.\n\nTo reduce comlexity for all those different deployment methods, we push installing the LaTeX class down to your\nTeX distro:\n\n1. **MikTeX**: You won't need to do anything, MikTeX will download the class from your closest CTAN mirror. You might have to confirm installing the class\n2. **TeXLive**: If something different to `texlive-full` is installed on your system, run `tlmgr install csassignments` to install the class for your user's TeX installation\n3. **Other distros**: Follow a guide on how to install packages.\n\nIf you don't require building the assignments (simply because you can flawlessly write TeX code) or chose to run LaTeX in a container (e.g. `miktex/miktex`), the installation is either the same as if you run from the host system, _or_ you use\nthe container image provided from this repository:\n\n\u003e Depending on your container runtime, you might have to adjust some of the command's arguments\n\n```bash\n# Run a bash inside the container to build your assignments with LaTeX directly\n#\n# On UNIX\n$ docker run -ti -v $(pwd):/work ghcr.io/zoomoid/assignments bash\n# In PowerShell for Windows users\n$ docker run -ti -v ${PWD}:/work ghcr.io/zoomoid/assignments bash\n```\n\nThe image is Ubuntu-based, and installs the most recent version of MikTeX available. MikTeX will then install the `csassignments` class on-demand.\n\nIf you'd like to cache the installed packages for later use again, provide an additional (anonymous) volume for the\ninstallation path of MikTeX: `-v miktex:/miktex/.miktex`.\n\n## Installation and Usage of `assignmentctl`\n\nTo learn more about the CLI that accompanies this project's LaTeX class, see [./cli](./cli/README.md).\n\nFor information about the older version of this tool, see [./pyassignmentctl](./pyassignmentctl/README.md).\n\n## Usage with CI Pipelines\n\nFor details on how to use this project in Continuous Integration pipelines, see [./ci](./ci/README.md).\n\n## Epilogue: The \"Why\" of assignmentctl\n\nTo make collaboration easier and enable templating and automation of as much as\npossible, in particular considering a weekly/bi-weekly schedule of assignments\nper-course, we built several tools for helping with that.\n\n1. CI pipelines: Leveraging the advantages of CI in the context of building\n   assignment PDFs from source seemed only logical: It introduces\n   reproducability and also, not everyone needs to install a fully-blown TeX\n   toolchain into their system. Rather, with things such as containers, we can\n   delegate building entirely to disposable containers, that run the build and\n   export the PDF as artifacts from the pipeline (One might even say that the\n   _only_ purpose of all this effort was alleviating the need for a TeX\n   toolchain on my personal system entirely).\n2. Easily template repeating code: The scaffolding essentially is required every week\n   again. Instead of copying the source files\n   and manually adjusting the parameters to fit the current assignment, having\n   tools that generate the source files automatically reduces friction and\n   mistakes that occur from copy-pasting over and over again. A single command\n   is ideally all you need to start on a new assignment. Also it allows us to\n   enforce a repeating structure for the directories of the assignments. Further\n   downstream, we can then leverage the repeating structure to run further\n   automation\n3. Automatic bundling of assignment and additional files: If an assignment requires more\n   than just a single PDF, e.g., code, using the fixed structure of the file system allows\n   for bundling, again, with a single command. With `assignmentctl`, we automatically create\n   archives from the CLI and can immediately upload these to the submission platform.\n4. Integration into Git/VCS workflow: We can leverage versioning systems such as tags\n   to mark exercises as being done and trigger particular actions on the final iteration output.\n\nThis resulted in building the first CLI for handling assignment templating, building, and bundling.\nIt was written in Python, as a singular script.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoomoid%2Fassignments","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzoomoid%2Fassignments","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzoomoid%2Fassignments/lists"}