The TA’s Survival Guide: Grading LaTeX for a 150-Student Class
If you are a teaching assistant for a discrete maths or CS course, you know the Sunday night dread: 150 emails, 150 zip files, and half of them do not compile because the student used a package that only exists on their laptop. The fix is to grade in one build environment, from projects shared with you early, that all started from the same template. This guide sets that up step by step and lists the errors you will triage every week.
Where the grading hours actually go
Checking a proof takes minutes. Getting the PDF to exist can take an evening. The old workflow looks like this:
- Download
student_final_v2.zipand unzip it. - Open
main.texand press Compile. - Error:
tikz-cd.stynot found, or a figure that will not load. - Email the student and wait a day.
The causes repeat. The student’s TeX installation has a package yours lacks, or an older version of one. A figure is called Graph.PNG on disk and graph.png in the source, which works on a case-insensitive laptop and fails anywhere else. A file the document pulls in with \input was never added to the zip. Each of these is a problem with the machine, not with the mathematics, and none of them is what you are paid to grade.
Step 1: give everyone the same starting project
Start every student from one template with a fixed preamble. Pick one from the assignment templates, such as the problem set, CS assignment or lab report; each student starts their own copy from the template page in one click. For your own template, put it in a public GitHub repository and share an Open in LetX link: each student who clicks it gets their own copy, ready to compile.
Keep the template small, load the packages the course needs, and tell students which lines they may change. A minimal starter:
\documentclass[11pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{amsmath,amssymb,amsthm}
% Students edit these two lines and nothing else in the preamble.
\newcommand{\studentname}{Your Name}
\newcommand{\studentid}{Student ID}
\newtheorem{problem}{Problem}
\newenvironment{solution}{\begin{proof}[Solution]}{\end{proof}}
\title{CS 101: Problem Set 3}
\author{\studentname\ (\studentid)}
\date{}
\begin{document}
\maketitle
\begin{problem}\label{prob:sum}
Prove that $\sum_{i=1}^{n} i = \frac{n(n+1)}{2}$ for every $n \geq 1$.
\end{problem}
\begin{solution}
By induction on $n$. For $n = 1$ both sides equal $1$.
Assume the formula holds for $n$. Then
\[
\sum_{i=1}^{n+1} i = \frac{n(n+1)}{2} + (n+1) = \frac{(n+1)(n+2)}{2}.
\]
\end{solution}
\begin{problem}
Use the result of Problem~\ref{prob:sum} to find $\sum_{i=1}^{100} i$.
\end{problem}
\begin{solution}
$\frac{100 \cdot 101}{2} = 5050$.
\end{solution}
\end{document}
The \label and \ref pair at the end is deliberate. Students who learn cross-references in week one stop typing “Problem 1” by hand, and you stop seeing references that point at the wrong problem after someone reorders them.
Step 2: get projects shared in week one, not on the deadline
Ask each student to share their project with the course staff as soon as they create it. On LetX they invite you by email or send a share link, and the project appears in your Shared with me list. Collaborators are free on every plan, Free included, so a student can add the professor and every TA without paying anything. Ask for a naming convention such as CS101-PS3-Surname so the list sorts itself.
Choose the role on purpose. Commenter lets a TA leave notes beside the source without being able to change it, which protects you from an accidental edit in a student’s work. Editor lets you fix things directly, which suits office hours. Because editing is real time, a shared project always shows its current state: you can spot the student stuck on day two instead of discovering it on day seven. Students only share what they choose to; you cannot browse anyone’s projects otherwise.
Step 3: make “it compiles in the course editor” the rule
Every LetX build runs latexmk on the same full TeX Live 2025 on the build servers, not on the student’s laptop. If it compiles for them, it compiles for you, so the rule can be simple: a submission that does not build in the course’s editor is not submitted. Students then download the PDF and hand it in through your course’s usual system, and you keep the shared project for the source. A student who works locally can still follow the rule by uploading the project before the deadline and checking that it builds.
Step 4: triage the errors you will see every week
The same handful of errors fill a TA’s inbox. Point students at the guide before they email you:
| What the student sees | Usual cause in coursework | Guide |
|---|---|---|
| Missing $ inserted | An underscore or caret in ordinary text, often in a variable name | Fix |
| Undefined control sequence | A typo in a command, or a command from a package the template does not load | Fix |
| Figure missing or file not found | The image was not uploaded, sits in another folder, or differs in capital letters | Fix |
| ?? in place of a number | A \ref to a label that does not exist, often a misspelling | Fix |
| Too many }’s | An unbalanced brace somewhere above the line reported | Fix |
| Misplaced alignment tab character & | An & outside a table or align environment, such as in “R&D” | Fix |
On LetX the ?? case is narrower than it looks: latexmk already runs the extra passes that resolve references, so a ?? that survives a build almost always means a wrong label, not a missing compile. The editor’s log lists each error with its file and line, and clicking one opens that line. Each entry also has an Explain button that asks Lexi, the built-in assistant, what went wrong in plain language; free accounts get a few runs. The LaTeX problems guides and the free LaTeX course are worth linking from the syllabus.
Step 5: grade the PDF, comment on the source
Open the shared project and read the PDF in the preview. When something on page three is wrong, click it: SyncTeX puts the cursor on the source line that produced it, even when the student split the work into several files. Leave a comment on that line, so the note sits beside the code it is about rather than in a separate document. The student replies in the thread and you resolve it when the fix is in. Grade the mathematics and the argument; if typesetting counts, say so in the rubric and make it specific, for example “equations are in math mode and numbered with equation”.
Checking for copied work
PDFs are hard to compare; source is easy. Download Source gives you each project as a zip of plain LaTeX, so ordinary tools work. git diff --no-index --word-diff a.tex b.tex compares two files word by word without a repository. Diff each submission against the starting template first, or every student will look like a copy of every other. What stands out after that is the unusual: the same invented macro name, the same typo in a comment, the same odd spacing command. Treat a match as a reason to talk to the student, not as proof.
When some students need more than the free plan
The free plan has unlimited projects and collaborators and 40 compiles a day, which covers most coursework. A thesis project or a heavy lab course can outgrow it. A teacher can then buy Team seats for just the students who need Pro, $20 per seat a month for 2 to 50 people, give them out for the term and take them back when the course ends. Verified students can also pay half price on Academic Pro themselves, and a department with more than 50 people can use an Institution plan. See pricing, LaTeX for classes, and what breaks when 150 students share one LaTeX editor.
Frequently asked questions
How do you manage 150+ students writing LaTeX?
Give everyone the same starting template, ask each student to share their project with the course staff in week one, and make "it compiles in the course editor" the submission rule. On LetX, collaborators are free on every plan, so sharing with the teacher and every TA costs nothing, and every build runs on the same TeX Live, so no student is blocked by a broken local install.
Why do standard LaTeX workflows struggle at class scale?
Desktop tools need every student to install and maintain TeX Live or MiKTeX, so each laptop builds a little differently, and emailed zip files arrive with missing figures and packages. A browser editor removes the installs and keeps every submission in one build environment.
Can a TA see a student’s project without being invited?
No. Projects are private by default. A student invites you by email or with a share link, and the project then appears under Shared with me. Ask for Commenter access if you only want to annotate, or Editor if you will fix things directly.
Can teaching assistants grade LaTeX submissions efficiently?
Yes, once the build is not their problem. A TA opens the shared project, reads the PDF, clicks any spot in it to jump to the source line that produced it, and leaves a comment on that line, without downloading or compiling anything locally.
Keep reading
Ready to try LetX?
Join researchers and students focusing on their work, not the tools.
Get Started Free
Written by Shihab Shahriar Antor , AI Engineer & Founder of Shahriar Labs. Builder of LetX (collaborative LaTeX) and offSchool (SSC science and maths, learned through simulations).