diff --git a/.vscode/settings.json b/.vscode/settings.json index e66cbb6..7274b9c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,5 +1,6 @@ { "latex-workshop.latex.recipe.default": "latexmk (xelatex)", "tinymist.formatterPrintWidth": 80, - "tinymist.typstExtraArgs": ["--package-path=./lib/typst"] + "tinymist.typstExtraArgs": ["--package-path=./lib/typst"], + "tinymist.formatterMode": "typstyle" } diff --git a/README.md b/README.md new file mode 100644 index 0000000..2b28065 --- /dev/null +++ b/README.md @@ -0,0 +1,111 @@ +[tinymist]: https://marketplace.visualstudio.com/items?itemName=myriad-dreamin.tinymist +[latex-workshop]: https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop +[CC BY-NC-SA 4.0]: https://creativecommons.org/licenses/by-nc-sa/4.0 +[betalupi.com/handouts]: https://static.betalupi.com/ormc +[ORMC]: https://circles.math.ucla.edu/circles/ +[Overleaf]: https://overleaf.com +[Typst.app]: https://typst.app +[vscode]: https://code.visualstudio.com +[vscodium]: https://vscodium.com + +# Mark's Handout Library +This is a collection of math circle handouts that I (and many others) have written. \ +They are used regularly at the [ORMC]. + +For more information, visit [betalupi.com/handouts]. \ +The latest version of each handout is available at that page. + + +## License +Unless otherwise stated, all documents in this repository are licensed under [CC BY-NC-SA 4.0]. \ +Each document has its own authors. See `meta.toml` in each project directory for details. + +By submitting or editing a handout in this repository, you agree to release it under this license. + + + + +## 🛠️ Contributing +If you want to use one of these handouts for a class, see [`betalupi.com/handouts`](https://betalupi.com/handouts). \ +You only need to read this section if you want to edit these handouts. + +Use git to clone this repository, then open the root folder in [vscode] or [vscodium]. \ +We use the [latex-workshop] and [tinymist] extensions to write these handouts, install them before continuing. \ +[`./vscode/settings.json`](./vscode/settings.json) will automatically configure them to work with this repository. + - All handouts are in [`./src`](./src) \ + Every handout is stored in its own directory, even if it only consists of one file. \ + Handouts are organized by group (see [betalupi.com/handouts] for details). + + - Packages are stored in [`./lib`](./lib) \ + You shouldn't need to modify any library files, but you may want to read them to see how they work. \ + + - [`./tools`](./tools) contains build scripts, [`./.github`](./.github) configures automation. \ + You can ignore everything in these directories. + +All handouts in this repository are based on `ormc_handout.cls` or `handout@0.1.0`. \ +If you're using LaTeX, read [`docs-latex.md`](./docs-latex.md). \ +If you're using Typst (preferred), read [`docs-typst.md`](./docs-typst.md) +### Metadata +Every handout directory should contain a file called `meta.toml` with the following contents: +```toml +# This is a sample `meta.toml`. +# A copy of this file should exist in every handout directory. +# All keys are required. + +[metadata] +title = "title of this handout" + + +[publish] +# Should we publish this handout? +# If `false`, no part of this handout is published. +handout = true + +# Should we publish an "instructor's" version of this handout? +# This key has no effect if `publish.handout` is false. +# +# If `true`, publish a second version of this handout with solutions. +# Set this to `false` if solutions haven't been written. +solutions = true +``` + + +## 💾 Out-of-band compilation +If you want to compile these handouts _without_ this repository (e.g, on [Overleaf] or [Typst.app]), do the following: \ +_(I do not recommend this. The default toolchain makes it easier to share improvements to these handouts.)_ + +### For LaTeX: +1. Get the handout's directory (i.e, download the whole repo as a zip and extract the folder you want.) +2. Download [`./resources/ormc_handout.cls`](./resources/ormc_handout.cls) +3. Put this `ormc_handout.cls` in the same directory as the handout. +4. Fix the include path at the top of `main.tex`: + +You'll need to replace + +```latex +\documentclass[ + ... +]{../../../lib/tex/ormc_handout} +``` + +with + +```latex +\documentclass[ + ... +]{ormc_handout} +``` +5. Make a new overleaf project with the resulting directory. +6. **Do not use pdflatex**, it misbehaves with `ormc_handout`. Tell Overleaf to use XeLaTeX. + + +### For Typst: +Out-of-band typst compilation isn't supported. Clone the repository and use vscode. \ +This is because typst can't import packages from a relative path. + +If you _really_ want it, standalone typst compilation _is_ possible. \ +Follow the LaTeX instructions, but fix `handout@0.1.0` instead of `ormc_handout`. \ +You'll figure it out. + + + diff --git a/docs-latex.md b/docs-latex.md new file mode 100644 index 0000000..c713def --- /dev/null +++ b/docs-latex.md @@ -0,0 +1,85 @@ +# LaTeX documentation + +All LaTeX handouts are based on [`ormc_handout.cls`](./lib/tex/ormc_handout.cls). \ +This class is based on `article.cls`, and should work with most LaTeX packages. + +The best way to start a new document is to make a copy of an existing one. +- [Advanced/Cryptography](./src/Advanced/Cryptography) is a good example of a simple handout. +- [Advanced/DFAs](./src/Advanced/DFAs) is a good example of a handout with graphs. +- [Advanced/Geometric Optimization](./src/Advanced/Geometric%20Optimization) is a good example of a handout with geometry. + + +## Notes +- Compile your handouts with XeLaTeX. \ + `pdflatex` is known to misbehave with `ormc_handout.cls`. \ + This will happen by default if you use vscode. \ + If you use Overleaf, you'll have to configure it manually (see document settings). + +## Document Options + +Document options are passed to `\documentclass`, as follows: +```latex +\documentclass[ + % Show solutions is `solutions` is provided, + % hide them if `nosolutions` is provided. + % + % You should set only ONE of these flags at a time. + % Solutions are shown by default. + % All handouts are stored with `solutions` enabled. + solutions, + nosolutions, + + % Enable this option if you need more space on the handout's first page. + % We use a long warning by default. + shortwarning, + + % If present, hide page numbers. + % This should only be used for single-page handouts + % (e.g, warm-ups) + nopagenumber +]{ormc_handout} +``` + +Use `geometry` to change margins and page dimensions. US letter is the default. + + +## Utilities +- `\say{text}`: Puts text in quotes, handling details like period spacing. Courtesy of `dirtytalk`. +- `\note[Type]{text}`: Makes a note. +- `\hint{text}`: Shorthand for `\note[Hint]{text}` + +## Sections + +The usual LaTeX title-customization techniques *WILL NOT WORK* with this class. \ +Don't even try to load `titlesec`. + +`ormc_handout.cls` supports two levels of sections: +- `\section`, for large parts of the handout +- `\definition`, `\theorem`, `\proposition`, `\example`, `\remark`, `\problem`, and `\problempart` + +All these macros have the following syntax: `\problem{title}