Compare commits
10 Commits
a40fecfd22
...
main
Author | SHA1 | Date | |
---|---|---|---|
121780df6c | |||
99344f9aed | |||
095c4b314c | |||
c29f0d25c7
|
|||
871a02bb1d
|
|||
b5ccf95a8b
|
|||
563dd990a5 | |||
6681724804 | |||
8d49154277 | |||
acf57ceab6 |
18
README.md
@ -1,7 +1,7 @@
|
|||||||
[tinymist]: https://marketplace.visualstudio.com/items?itemName=myriad-dreamin.tinymist
|
[tinymist]: https://marketplace.visualstudio.com/items?itemName=myriad-dreamin.tinymist
|
||||||
[latex-workshop]: https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop
|
[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
|
[CC BY-NC-SA 4.0]: https://creativecommons.org/licenses/by-nc-sa/4.0
|
||||||
[betalupi.com/handouts]: https://static.betalupi.com/ormc
|
[betalupi.com/handouts]: https://betalupi.com/handouts
|
||||||
[ORMC]: https://circles.math.ucla.edu/circles/
|
[ORMC]: https://circles.math.ucla.edu/circles/
|
||||||
[Overleaf]: https://overleaf.com
|
[Overleaf]: https://overleaf.com
|
||||||
[Typst.app]: https://typst.app
|
[Typst.app]: https://typst.app
|
||||||
@ -26,7 +26,7 @@ By submitting or editing a handout in this repository, you agree to release it u
|
|||||||
|
|
||||||
## 🛠️ Contributing
|
## 🛠️ Contributing
|
||||||
|
|
||||||
If you want to use one of these handouts for a class, see [`betalupi.com/handouts`](https://betalupi.com/handouts). \
|
If you want to use one of these handouts for a class, see [betalupi.com/handouts]. \
|
||||||
You only need to read this section if you want to edit these handouts.
|
You only need to read this section if you want to edit these handouts.
|
||||||
|
|
||||||
### Setup
|
### Setup
|
||||||
@ -56,7 +56,7 @@ This repository is organized as follows:
|
|||||||
- [`./tools`](./tools) contains build scripts, [`./.github`](./.github) configures automation. \
|
- [`./tools`](./tools) contains build scripts, [`./.github`](./.github) configures automation. \
|
||||||
You can ignore everything in these directories.
|
You can ignore everything in these directories.
|
||||||
|
|
||||||
All handouts in this repository are based on `ormc_handout.cls` or `handout@0.1.0`.
|
All handouts in this repository are based on `handout.cls` or `handout@0.1.0`.
|
||||||
|
|
||||||
- If you're using Typst (preferred), read [`docs-typst.md`](./docs-typst.md)
|
- If you're using Typst (preferred), read [`docs-typst.md`](./docs-typst.md)
|
||||||
- If you're still using LaTeX, read [`docs-latex.md`](./docs-latex.md).
|
- If you're still using LaTeX, read [`docs-latex.md`](./docs-latex.md).
|
||||||
@ -95,8 +95,8 @@ _(I do not recommend this. The default toolchain makes it easier to share improv
|
|||||||
### For LaTeX:
|
### For LaTeX:
|
||||||
|
|
||||||
1. Get the handout's directory (i.e, download the whole repo as a zip and extract the folder you want.)
|
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)
|
2. Download [`./resources/handout.cls`](./resources/handout.cls)
|
||||||
3. Put this `ormc_handout.cls` in the same directory as the handout.
|
3. Put this `handout.cls` in the same directory as the handout.
|
||||||
4. Fix the include path at the top of `main.tex`:
|
4. Fix the include path at the top of `main.tex`:
|
||||||
|
|
||||||
You'll need to replace
|
You'll need to replace
|
||||||
@ -104,7 +104,7 @@ You'll need to replace
|
|||||||
```latex
|
```latex
|
||||||
\documentclass[
|
\documentclass[
|
||||||
...
|
...
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
```
|
```
|
||||||
|
|
||||||
with
|
with
|
||||||
@ -112,11 +112,11 @@ with
|
|||||||
```latex
|
```latex
|
||||||
\documentclass[
|
\documentclass[
|
||||||
...
|
...
|
||||||
]{ormc_handout}
|
]{handout}
|
||||||
```
|
```
|
||||||
|
|
||||||
5. Make a new overleaf project with the resulting directory.
|
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.
|
6. **Do not use pdflatex**, it misbehaves with `handout`. Tell Overleaf to use XeLaTeX.
|
||||||
|
|
||||||
### For Typst:
|
### For Typst:
|
||||||
|
|
||||||
@ -124,5 +124,5 @@ Out-of-band typst compilation isn't supported. Clone the repository and use vsco
|
|||||||
This is because typst can't import packages from a relative path.
|
This is because typst can't import packages from a relative path.
|
||||||
|
|
||||||
If you _really_ want it, standalone typst compilation _is_ possible. \
|
If you _really_ want it, standalone typst compilation _is_ possible. \
|
||||||
Follow the LaTeX instructions, but fix `handout@0.1.0` instead of `ormc_handout`. \
|
Follow the LaTeX instructions, but fix `handout@0.1.0` instead of `handout`. \
|
||||||
You'll figure it out.
|
You'll figure it out.
|
||||||
|
@ -1,23 +1,25 @@
|
|||||||
# LaTeX documentation
|
# LaTeX documentation
|
||||||
|
|
||||||
All LaTeX handouts are based on [`ormc_handout.cls`](./lib/tex/ormc_handout.cls). \
|
All LaTeX handouts are based on [`handout.cls`](./lib/tex/handout.cls). \
|
||||||
This class is based on `article.cls`, and should work with most LaTeX packages.
|
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.
|
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.
|
|
||||||
|
|
||||||
|
- [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
|
## Notes
|
||||||
- Compile your handouts with XeLaTeX. \
|
|
||||||
`pdflatex` is known to misbehave with `ormc_handout.cls`. \
|
- Compile your handouts with XeLaTeX. \
|
||||||
This will happen by default if you use vscode. \
|
`pdflatex` is known to misbehave with `handout.cls`. \
|
||||||
If you use Overleaf, you'll have to configure it manually (see document settings).
|
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
|
||||||
|
|
||||||
Document options are passed to `\documentclass`, as follows:
|
Document options are passed to `\documentclass`, as follows:
|
||||||
|
|
||||||
```latex
|
```latex
|
||||||
\documentclass[
|
\documentclass[
|
||||||
% Show solutions is `solutions` is provided,
|
% Show solutions is `solutions` is provided,
|
||||||
@ -37,49 +39,52 @@ Document options are passed to `\documentclass`, as follows:
|
|||||||
% This should only be used for single-page handouts
|
% This should only be used for single-page handouts
|
||||||
% (e.g, warm-ups)
|
% (e.g, warm-ups)
|
||||||
nopagenumber
|
nopagenumber
|
||||||
]{ormc_handout}
|
]{handout}
|
||||||
```
|
```
|
||||||
|
|
||||||
Use `geometry` to change margins and page dimensions. US letter is the default.
|
Use `geometry` to change margins and page dimensions. US letter is the default.
|
||||||
|
|
||||||
|
|
||||||
## Utilities
|
## Utilities
|
||||||
- `\say{text}`: Puts text in quotes, handling details like period spacing. Courtesy of `dirtytalk`.
|
|
||||||
- `\note[Type]{text}`: Makes a note.
|
- `\say{text}`: Puts text in quotes, handling details like period spacing. Courtesy of `dirtytalk`.
|
||||||
- `\hint{text}`: Shorthand for `\note[Hint]{text}`
|
- `\note[Type]{text}`: Makes a note.
|
||||||
|
- `\hint{text}`: Shorthand for `\note[Hint]{text}`
|
||||||
|
|
||||||
## Sections
|
## Sections
|
||||||
|
|
||||||
The usual LaTeX title-customization techniques *WILL NOT WORK* with this class. \
|
The usual LaTeX title-customization techniques _WILL NOT WORK_ with this class. \
|
||||||
Don't even try to load `titlesec`.
|
Don't even try to load `titlesec`.
|
||||||
|
|
||||||
`ormc_handout.cls` supports two levels of sections:
|
`handout.cls` supports two levels of sections:
|
||||||
- `\section`, for large parts of the handout
|
|
||||||
- `\definition`, `\theorem`, `\proposition`, `\example`, `\remark`, `\problem`, and `\problempart`
|
- `\section`, for large parts of the handout
|
||||||
|
- `\definition`, `\theorem`, `\proposition`, `\example`, `\remark`, `\problem`, and `\problempart`
|
||||||
|
|
||||||
All these macros have the following syntax: `\problem{title}<label>`
|
All these macros have the following syntax: `\problem{title}<label>`
|
||||||
- `title` is the problem's title, and may be empty.
|
|
||||||
- `label` is the problem's label. This is optional. \
|
- `title` is the problem's title, and may be empty.
|
||||||
If a label is provided, this section may be referenced with `\ref{label}`.
|
- `label` is the problem's label. This is optional. \
|
||||||
|
If a label is provided, this section may be referenced with `\ref{label}`.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
- `\problem{}`
|
|
||||||
- `\problem{Bonus}`
|
- `\problem{}`
|
||||||
- `\problem{}<gcd>`, which may be referenced with `\ref{gcd}`
|
- `\problem{Bonus}`
|
||||||
|
- `\problem{}<gcd>`, which may be referenced with `\ref{gcd}`
|
||||||
|
|
||||||
Do **not** use `\begin{problem} ... \end{problem}`. \
|
Do **not** use `\begin{problem} ... \end{problem}`. \
|
||||||
Sections are macros, not environments.
|
Sections are macros, not environments.
|
||||||
|
|
||||||
## Environments:
|
## Environments:
|
||||||
|
|
||||||
- `\begin{solution}`: A fancy red for solutions to problems. \
|
- `\begin{solution}`: A fancy red for solutions to problems. \
|
||||||
This is hidden if the `nosolutions` is provided.
|
This is hidden if the `nosolutions` is provided.
|
||||||
- `\begin{instrutornote}`: A fancy blue box for instructor notes. \
|
- `\begin{instrutornote}`: A fancy blue box for instructor notes. \
|
||||||
This is hidden if the `nosolutions` is provided.
|
This is hidden if the `nosolutions` is provided.
|
||||||
- `\begin{examplesolution}`: A fancy gray for sample solutions. \
|
- `\begin{examplesolution}`: A fancy gray for sample solutions. \
|
||||||
This is never hidden.
|
This is never hidden.
|
||||||
|
|
||||||
All the above environments break across pages and may safely be nested.
|
All the above environments break across pages and may safely be nested.
|
||||||
|
|
||||||
Each of these environments also provides the `\linehack` macro, which draws a line across the box. \
|
Each of these environments also provides the `\linehack` macro, which draws a line across the box. \
|
||||||
This is useful for, say, solutions to multipart problems.
|
This is useful for, say, solutions to multipart problems.
|
||||||
|
@ -4,23 +4,27 @@ See [typst.app/docs](https://typst.app/docs) for typst's documentation. \
|
|||||||
All typst handouts are based on [`handout@0.1.0`](./lib/typst/local/handout/0.1.0).
|
All typst handouts are based on [`handout@0.1.0`](./lib/typst/local/handout/0.1.0).
|
||||||
|
|
||||||
The best way to start a new document is to make a copy of an existing one.
|
The best way to start a new document is to make a copy of an existing one.
|
||||||
- [Advanced/Tropical Polynomials](./src/Advanced/Tropical%20Polynomials) is a good place to start.
|
|
||||||
- [Warm-Ups/Painting](./src/Warm-Ups/Painting) is a good example of tikz-like pictures.
|
|
||||||
|
|
||||||
|
- [Advanced/Tropical Polynomials](./src/Advanced/Tropical%20Polynomials) is a good place to start.
|
||||||
|
- [Warm-Ups/Painting](./src/Warm-Ups/Painting) is a good example of tikz-like pictures.
|
||||||
|
|
||||||
## Notes
|
## Notes
|
||||||
- Typst's equivalent of tikz is cetz ([homepage](https://cetz-package.github.io), [docs](https://cetz-package.github.io/docs/api))
|
|
||||||
- Typst handouts are always compiled with solutions. \
|
- Typst's equivalent of tikz is cetz ([homepage](https://cetz-package.github.io), [docs](https://cetz-package.github.io/docs/api))
|
||||||
Handouts without solutions are automatically compiled and published at [betalupi.com/handouts](https://static.betalupi.com/ormc). \
|
- Typst handouts are always compiled with solutions. \
|
||||||
If you'd like to compile a student handout manually, run the following command in a handout directory:
|
Handouts without solutions are automatically compiled and published at [betalupi.com/handouts](https://betalupi.com/handouts). \
|
||||||
|
If you'd like to compile a student handout manually, run the following command in a handout directory:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
typst compile main.typ --package-path ../../../lib/typst --input show_solutions=false
|
typst compile main.typ --package-path ../../../lib/typst --input show_solutions=false
|
||||||
```
|
```
|
||||||
|
|
||||||
Where `package_path` is a relative path to [./lib/typst](./lib/typst).
|
Where `package_path` is a relative path to [./lib/typst](./lib/typst).
|
||||||
|
|
||||||
## Document Options
|
## Document Options
|
||||||
|
|
||||||
All typst handouts start with the following:
|
All typst handouts start with the following:
|
||||||
|
|
||||||
```typst
|
```typst
|
||||||
#show: handout.with(
|
#show: handout.with(
|
||||||
// Should match `meta.toml`
|
// Should match `meta.toml`
|
||||||
@ -38,39 +42,44 @@ All typst handouts start with the following:
|
|||||||
```
|
```
|
||||||
|
|
||||||
## Notable commands
|
## Notable commands
|
||||||
- `#v(1fr)`: Like LaTeX's `\vfill`. Creates whitespace that grows automatically. \
|
|
||||||
`fr` means "fraction". `#v(2fr)` will fill twice as much space as `#v(1fr)` on the same page.
|
- `#v(1fr)`: Like LaTeX's `\vfill`. Creates whitespace that grows automatically. \
|
||||||
|
`fr` means "fraction". `#v(2fr)` will fill twice as much space as `#v(1fr)` on the same page.
|
||||||
|
|
||||||
## Utilities
|
## Utilities
|
||||||
- `#note([content], type: "Note type")`: Makes a note. `type` is optional.
|
|
||||||
- `#hint([content])`: Shorthand for `#note([content], type: "Hint")`
|
- `#note([content], type: "Note type")`: Makes a note. `type` is optional.
|
||||||
- `#solution([content])`: A pretty box for solutions. Hidden in student handouts.
|
- `#hint([content])`: Shorthand for `#note([content], type: "Hint")`
|
||||||
- `#examplesolution([content])`: Like `#solution()`, but is never hidden.
|
- `#solution([content])`: A pretty box for solutions. Hidden in student handouts.
|
||||||
- `#if_solutions([content])`: Shows content only if we are showing solutions.
|
- `#examplesolution([content])`: Like `#solution()`, but is never hidden.
|
||||||
- `#if_no_solutions([content])`: Shows content only if we **aren't** showing solutions.
|
- `#if_solutions([content])`: Shows content only if we are showing solutions.
|
||||||
|
- `#if_no_solutions([content])`: Shows content only if we **aren't** showing solutions.
|
||||||
|
|
||||||
## Sections
|
## Sections
|
||||||
|
|
||||||
High-level sections are denoted with `=`. \
|
High-level sections are denoted with `=`. \
|
||||||
Subsections start with `==`, subsubsections with `===`, and so on. \
|
Subsections start with `==`, subsubsections with `===`, and so on. \
|
||||||
**`handout@0.1.0` is only designed to use `=`, subsections might be ugly.**
|
**`handout@0.1.0` is only designed to use `=`, subsections might be ugly.**
|
||||||
|
|
||||||
|
|
||||||
`handout@0.1.0` also provides the following commands:
|
`handout@0.1.0` also provides the following commands:
|
||||||
- `problem`
|
|
||||||
- `definition`
|
- `problem`
|
||||||
- `theorem`
|
- `definition`
|
||||||
- `example`
|
- `theorem`
|
||||||
- `remark`
|
- `example`
|
||||||
|
- `remark`
|
||||||
|
|
||||||
These all have the same syntax: `#problem("title", label: "label")`
|
These all have the same syntax: `#problem("title", label: "label")`
|
||||||
- `title` is the problem's title, and may be omitted.
|
|
||||||
- `label` is the problem's label. This is optional. \
|
- `title` is the problem's title, and may be omitted.
|
||||||
If a label is provided, this problem can be referenced with `@label`
|
- `label` is the problem's label. This is optional. \
|
||||||
|
If a label is provided, this problem can be referenced with `@label`
|
||||||
|
|
||||||
**Examples:**
|
**Examples:**
|
||||||
- `#problem()`
|
|
||||||
- `#problem("Bonus")`
|
- `#problem()`
|
||||||
- `#problem(label: "gcd")`, which may be referenced with `@gcd`
|
- `#problem("Bonus")`
|
||||||
|
- `#problem(label: "gcd")`, which may be referenced with `@gcd`
|
||||||
|
|
||||||
### Complete example:
|
### Complete example:
|
||||||
|
|
||||||
@ -91,4 +100,4 @@ Consider the polynomial $f(x) = x^3 + 1x^2 + 3x + 6$.
|
|||||||
#problem()
|
#problem()
|
||||||
Recall @imaproblem.
|
Recall @imaproblem.
|
||||||
- use this graph to find the roots of $f$
|
- use this graph to find the roots of $f$
|
||||||
```
|
```
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
\NeedsTeXFormat{LaTeX2e}
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
\ProvidesClass{../../../lib/tex/ormc_handout}[2023/05/29 2.0.2 ORMC Handout]
|
\ProvidesClass{../../../lib/tex/handout}[2025/03/02 2.0.2 Mark's handout class]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -13,7 +13,7 @@
|
|||||||
\@twocolumnfalse
|
\@twocolumnfalse
|
||||||
\@twosidefalse
|
\@twosidefalse
|
||||||
\@mparswitchfalse
|
\@mparswitchfalse
|
||||||
% ORMC-specific
|
% Handout-specific
|
||||||
\newif{\if@solutions} % If false, solutions and instructor notes are hidden.
|
\newif{\if@solutions} % If false, solutions and instructor notes are hidden.
|
||||||
\newif{\if@singlenumbering} % If true, the same counter is used for all objects.
|
\newif{\if@singlenumbering} % If true, the same counter is used for all objects.
|
||||||
\newif{\if@nopagenumber} % If true, don't number pages.
|
\newif{\if@nopagenumber} % If true, don't number pages.
|
||||||
@ -25,7 +25,7 @@
|
|||||||
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
|
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
|
||||||
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
|
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
|
||||||
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
|
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
|
||||||
% ORMC-specific options
|
% Handout-specific options
|
||||||
\DeclareOption{solutions}{\@solutionstrue}
|
\DeclareOption{solutions}{\@solutionstrue}
|
||||||
\DeclareOption{nosolutions}{\@solutionsfalse}
|
\DeclareOption{nosolutions}{\@solutionsfalse}
|
||||||
\DeclareOption{multinumbering}{\@singlenumberingfalse}
|
\DeclareOption{multinumbering}{\@singlenumberingfalse}
|
||||||
@ -37,7 +37,7 @@
|
|||||||
\DeclareOption{showwarning}{\@nowarningfalse}
|
\DeclareOption{showwarning}{\@nowarningfalse}
|
||||||
\DeclareOption{hidewarning}{\@nowarningtrue}
|
\DeclareOption{hidewarning}{\@nowarningtrue}
|
||||||
\DeclareOption{unfinished}{\@unfinishedtrue}
|
\DeclareOption{unfinished}{\@unfinishedtrue}
|
||||||
\DeclareOption*{\ClassWarning{ormc_handout}{\CurrentOption ignored}}
|
\DeclareOption*{\ClassWarning{handout}{\CurrentOption ignored}}
|
||||||
|
|
||||||
\@unfinishedfalse
|
\@unfinishedfalse
|
||||||
\ExecuteOptions{
|
\ExecuteOptions{
|
||||||
@ -629,12 +629,12 @@
|
|||||||
|
|
||||||
% Keep track of the current background color.
|
% Keep track of the current background color.
|
||||||
% Useful for transparent tikz drawings.
|
% Useful for transparent tikz drawings.
|
||||||
\def\ORMCbgcolor{white}
|
\def\bgcolor{white}
|
||||||
|
|
||||||
% Make a box environment.
|
% Make a box environment.
|
||||||
% These can safely be nested.
|
% These can safely be nested.
|
||||||
% Args: title, back color, frame color.
|
% Args: title, back color, frame color.
|
||||||
\newenvironment{ORMCbox}[3]{
|
\newenvironment{hobox}[3]{
|
||||||
% \linehack draws a line across a tcolorbox.
|
% \linehack draws a line across a tcolorbox.
|
||||||
% tcolorbox only supports two sections, but
|
% tcolorbox only supports two sections, but
|
||||||
% this hack allows us to have more.
|
% this hack allows us to have more.
|
||||||
@ -653,7 +653,7 @@
|
|||||||
|
|
||||||
% Keep track of the current background color.
|
% Keep track of the current background color.
|
||||||
% Useful for transparent tikz drawings.
|
% Useful for transparent tikz drawings.
|
||||||
\def\ORMCbgcolor{#2}
|
\def\bgcolor{#2}
|
||||||
|
|
||||||
\begin{tcolorbox}[
|
\begin{tcolorbox}[
|
||||||
enhanced,
|
enhanced,
|
||||||
@ -675,21 +675,21 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
\newenvironment{examplesolution}{
|
\newenvironment{examplesolution}{
|
||||||
\begin{ORMCbox}{Example Solution}{black!10!white}{black!65!white}
|
\begin{hobox}{Example Solution}{black!10!white}{black!65!white}
|
||||||
} {
|
} {
|
||||||
\end{ORMCbox}
|
\end{hobox}
|
||||||
}
|
}
|
||||||
|
|
||||||
\if@solutions
|
\if@solutions
|
||||||
\newenvironment{solution}{
|
\newenvironment{solution}{
|
||||||
\begin{ORMCbox}{Solution}{ored!10!white}{ored}
|
\begin{hobox}{Solution}{ored!10!white}{ored}
|
||||||
} {
|
} {
|
||||||
\end{ORMCbox}
|
\end{hobox}
|
||||||
}
|
}
|
||||||
\newenvironment{instructornote}{
|
\newenvironment{instructornote}{
|
||||||
\begin{ORMCbox}{Note for Instructors}{ocyan!10!white}{ocyan}
|
\begin{hobox}{Note for Instructors}{ocyan!10!white}{ocyan}
|
||||||
} {
|
} {
|
||||||
\end{ORMCbox}
|
\end{hobox}
|
||||||
}
|
}
|
||||||
\else
|
\else
|
||||||
\excludecomment{solution}
|
\excludecomment{solution}
|
@ -1,5 +1,5 @@
|
|||||||
\NeedsTeXFormat{LaTeX2e}
|
\NeedsTeXFormat{LaTeX2e}
|
||||||
\ProvidesPackage{../../../lib/tex/macros}[2023/10/16 ORMC Macros]
|
\ProvidesPackage{../../../lib/tex/macros}[2025/03/02 Handout macros]
|
||||||
|
|
||||||
\RequirePackage{hyperref}
|
\RequirePackage{hyperref}
|
||||||
\RequirePackage{pgf}
|
\RequirePackage{pgf}
|
||||||
|
@ -49,19 +49,28 @@
|
|||||||
// Text style
|
// Text style
|
||||||
set text(font: "New Computer Modern")
|
set text(font: "New Computer Modern")
|
||||||
set par(
|
set par(
|
||||||
leading: 0.55em,
|
leading: 0.5em,
|
||||||
first-line-indent: 0mm,
|
|
||||||
justify: true,
|
|
||||||
spacing: 0.5em,
|
spacing: 0.5em,
|
||||||
|
|
||||||
|
first-line-indent: 0mm,
|
||||||
|
hanging-indent: 0mm,
|
||||||
|
justify: true,
|
||||||
)
|
)
|
||||||
|
|
||||||
//
|
//
|
||||||
// List style
|
// List style
|
||||||
show list: set block(spacing: 0.5em, below: 1em)
|
|
||||||
set list(
|
set list(
|
||||||
tight: false,
|
indent: 4mm,
|
||||||
indent: 5mm,
|
body-indent: 1.5mm,
|
||||||
spacing: 3mm,
|
|
||||||
|
// Manually set spacing,
|
||||||
|
// `tight` has no effect.
|
||||||
|
spacing: 2mm,
|
||||||
|
)
|
||||||
|
set enum(
|
||||||
|
indent: 4mm,
|
||||||
|
body-indent: 1.5mm,
|
||||||
|
spacing: 2mm,
|
||||||
)
|
)
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -94,7 +103,9 @@
|
|||||||
// Make handout title
|
// Make handout title
|
||||||
{
|
{
|
||||||
import "header.typ": make_header, solution_warning, short_solution_warning
|
import "header.typ": make_header, solution_warning, short_solution_warning
|
||||||
import "solution.typ": show_solutions
|
import "solution.typ": solutions_state, reset_solutions
|
||||||
|
|
||||||
|
reset_solutions()
|
||||||
|
|
||||||
let url = link(
|
let url = link(
|
||||||
"https://betalupi.com/handouts",
|
"https://betalupi.com/handouts",
|
||||||
@ -109,12 +120,13 @@
|
|||||||
top_right: url,
|
top_right: url,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
context {
|
||||||
if show_solutions {
|
if solutions_state.get() {
|
||||||
if short_warning {
|
if short_warning {
|
||||||
short_solution_warning()
|
short_solution_warning()
|
||||||
} else {
|
} else {
|
||||||
solution_warning()
|
solution_warning()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,34 +1,63 @@
|
|||||||
#import "misc.typ": ored, oblue
|
#import "misc.typ": ored, oblue
|
||||||
|
|
||||||
|
|
||||||
/// If false, hide instructor info.
|
/// If false, hide instructor info.
|
||||||
///
|
/// If true, show it.
|
||||||
/// Compile with the following command to hide solutions:
|
|
||||||
/// `typst compile main.typ --input show_solutions=false`
|
|
||||||
///
|
///
|
||||||
/// Solutions are shown by default. This behavior
|
/// Solutions are shown by default. This behavior
|
||||||
/// is less surprising than hiding content by default.
|
/// is less surprising than hiding content by default.
|
||||||
#let show_solutions = {
|
#let solutions_state = state("solutions_state", true)
|
||||||
|
|
||||||
|
/// Force solutions to be hidden after this point.
|
||||||
|
///
|
||||||
|
/// This function produces content that must be
|
||||||
|
/// included in the document. If it is not included,
|
||||||
|
/// this function will have no effect.
|
||||||
|
#let hide_solutions() = {
|
||||||
|
return solutions_state.update(x => false)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Force solutions to be shown after this point.
|
||||||
|
///
|
||||||
|
/// This function produces content that must be
|
||||||
|
/// included in the document. If it is not included,
|
||||||
|
/// this function will have no effect.
|
||||||
|
#let show_solutions() = {
|
||||||
|
return solutions_state.update(x => true)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// Reset the solution flag to its default value.
|
||||||
|
/// This value is determined by compile flags:
|
||||||
|
/// Compile with the following command to hide solutions:
|
||||||
|
/// `typst compile main.typ --input show_solutions=false`
|
||||||
|
///
|
||||||
|
/// Solutions are shown by default.
|
||||||
|
///
|
||||||
|
/// This function produces content that must be
|
||||||
|
/// included in the document. If it is not included,
|
||||||
|
/// this function will have no effect.
|
||||||
|
#let reset_solutions() = {
|
||||||
if "show_solutions" in sys.inputs {
|
if "show_solutions" in sys.inputs {
|
||||||
// Show solutions unless they're explicitly disabled
|
if (
|
||||||
not (
|
|
||||||
sys.inputs.show_solutions == "false" or sys.inputs.show_solutions == "no"
|
sys.inputs.show_solutions == "false" or sys.inputs.show_solutions == "no"
|
||||||
)
|
) {
|
||||||
} else {
|
return solutions_state.update(x => false)
|
||||||
// Show solutions by default
|
}
|
||||||
true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#let if_solutions(content) = {
|
#let if_solutions(content) = context {
|
||||||
if show_solutions { content }
|
if solutions_state.get() { content }
|
||||||
}
|
}
|
||||||
|
|
||||||
#let if_no_solutions(content) = {
|
#let if_no_solutions(content) = context {
|
||||||
if not show_solutions { content }
|
if not solutions_state.get() { content }
|
||||||
}
|
}
|
||||||
|
|
||||||
#let if_solutions_else(if_yes, if_no) = {
|
#let if_solutions_else(if_yes, if_no) = context {
|
||||||
if show_solutions { if_yes } else { if_no }
|
if solutions_state.get() { if_yes } else { if_no }
|
||||||
}
|
}
|
||||||
|
|
||||||
#let solution(content) = {
|
#let solution(content) = {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\input{tikzset.tex}
|
\input{tikzset.tex}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
label/.style = {
|
label/.style = {
|
||||||
rectangle,
|
rectangle,
|
||||||
% For automatic red background in solutions
|
% For automatic red background in solutions
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
draw = none,
|
draw = none,
|
||||||
rounded corners = 0mm
|
rounded corners = 0mm
|
||||||
},
|
},
|
||||||
@ -32,7 +32,7 @@
|
|||||||
% Nodes
|
% Nodes
|
||||||
edg/.style = {
|
edg/.style = {
|
||||||
midway,
|
midway,
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
text = gray
|
text = gray
|
||||||
},
|
},
|
||||||
int/.style = {},
|
int/.style = {},
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
shortwarning,
|
shortwarning,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
unfinished
|
unfinished
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{multicol}
|
\usepackage{multicol}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
solutions,
|
solutions,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
shortwarning
|
shortwarning
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{multicol}
|
\usepackage{multicol}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\input{tikzset.tex}
|
\input{tikzset.tex}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
label/.style = {
|
label/.style = {
|
||||||
rectangle,
|
rectangle,
|
||||||
% For automatic red background in solutions
|
% For automatic red background in solutions
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
draw = none,
|
draw = none,
|
||||||
rounded corners = 0mm
|
rounded corners = 0mm
|
||||||
},
|
},
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\input{tikzset.tex}
|
\input{tikzset.tex}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
label/.style = {
|
label/.style = {
|
||||||
rectangle,
|
rectangle,
|
||||||
% For automatic red background in solutions
|
% For automatic red background in solutions
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
draw = none,
|
draw = none,
|
||||||
rounded corners = 0mm
|
rounded corners = 0mm
|
||||||
},
|
},
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
@ -16,6 +16,11 @@
|
|||||||
\title{Error-Correcting Codes}
|
\title{Error-Correcting Codes}
|
||||||
\subtitle{Prepared by Mark on \today}
|
\subtitle{Prepared by Mark on \today}
|
||||||
|
|
||||||
|
|
||||||
|
% TODO:
|
||||||
|
% ISBN section is tedious, could use some work.
|
||||||
|
% Check problem 5
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
\maketitle
|
\maketitle
|
||||||
|
@ -131,7 +131,7 @@ Take a valid ISBN-13 and swap two adjacent digits. When will the result be a val
|
|||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
\problem{}<isbn-nocorrect>
|
\problem{}<isbnnocorrect>
|
||||||
\texttt{978-008-2066-466} was a valid ISBN until I changed a single digit. \par
|
\texttt{978-008-2066-466} was a valid ISBN until I changed a single digit. \par
|
||||||
Can you find the digit I changed? Can you recover the original ISBN?
|
Can you find the digit I changed? Can you recover the original ISBN?
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
\section{Error Correction}
|
\section{Error Correction}
|
||||||
|
|
||||||
As we saw in \ref{isbn-nocorrect}, the ISBN check-digit scheme does not allow us to correct errors. \par
|
As we saw in \ref{isbnnocorrect}, the ISBN check-digit scheme does not allow us to correct errors. \par
|
||||||
QR codes feature a system that does. \par
|
QR codes feature a system that does. \par
|
||||||
|
|
||||||
\vspace{1mm}
|
\vspace{1mm}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
nosolutions,
|
nosolutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
solutions,
|
solutions,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
nopagenumber
|
nopagenumber
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\uptitlel{Advanced 2}
|
\uptitlel{Advanced 2}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[
|
\documentclass[
|
||||||
solutions
|
solutions
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\uptitlel{Advanced 2}
|
\uptitlel{Advanced 2}
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
solutions,
|
solutions,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
shortwarning
|
shortwarning
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{tikz}
|
\usepackage{tikz}
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[
|
\documentclass[
|
||||||
solutions
|
solutions
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\input{tikxset}
|
\input{tikxset}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
label/.style = {
|
label/.style = {
|
||||||
circle,
|
circle,
|
||||||
% For automatic red background in solutions
|
% For automatic red background in solutions
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
draw = none
|
draw = none
|
||||||
},
|
},
|
||||||
%
|
%
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
nosolutions,
|
nosolutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
\usepackage{units}
|
\usepackage{units}
|
||||||
\input{src/tikzset}
|
\input{src/tikzset}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../../lib/tex/ormc_handout}
|
]{../../../../lib/tex/handout}
|
||||||
\usepackage{../../../../lib/tex/macros}
|
\usepackage{../../../../lib/tex/macros}
|
||||||
\usepackage{units}
|
\usepackage{units}
|
||||||
\input{tikzset}
|
\input{tikzset}
|
||||||
|
@ -462,7 +462,7 @@ Thus,
|
|||||||
\end{equation*}
|
\end{equation*}
|
||||||
|
|
||||||
|
|
||||||
\begin{ORMCbox}{Review: Multiplying Vectors by Matrices}{black!10!white}{black!65!white}
|
\begin{hobox}{Review: Multiplying Vectors by Matrices}{black!10!white}{black!65!white}
|
||||||
\begin{equation*}
|
\begin{equation*}
|
||||||
Av =
|
Av =
|
||||||
\begin{bmatrix}
|
\begin{bmatrix}
|
||||||
@ -480,7 +480,7 @@ Thus,
|
|||||||
\end{equation*}
|
\end{equation*}
|
||||||
|
|
||||||
Note that each element of $Av$ is the dot product of a row in $A$ and a column in $v$.
|
Note that each element of $Av$ is the dot product of a row in $A$ and a column in $v$.
|
||||||
\end{ORMCbox}
|
\end{hobox}
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
Compute the following product:
|
Compute the following product:
|
||||||
|
@ -154,7 +154,7 @@ The \textit{Hadamard Gate} is given by the following matrix: \par
|
|||||||
\end{equation*}
|
\end{equation*}
|
||||||
\note{Note that we divide by $\sqrt{2}$, since $H$ must be orthonormal.}
|
\note{Note that we divide by $\sqrt{2}$, since $H$ must be orthonormal.}
|
||||||
|
|
||||||
\begin{ORMCbox}{Review: Matrix Multiplication}{black!10!white}{black!65!white}
|
\begin{hobox}{Review: Matrix Multiplication}{black!10!white}{black!65!white}
|
||||||
Matrix multiplication works as follows:
|
Matrix multiplication works as follows:
|
||||||
|
|
||||||
\begin{equation*}
|
\begin{equation*}
|
||||||
@ -196,7 +196,7 @@ The \textit{Hadamard Gate} is given by the following matrix: \par
|
|||||||
|
|
||||||
This is exactly the first column of the matrix product. \par
|
This is exactly the first column of the matrix product. \par
|
||||||
Also, note that each element of $Ac_0$ is the dot product of a row in $A$ and a column in $c_0$.
|
Also, note that each element of $Ac_0$ is the dot product of a row in $A$ and a column in $c_0$.
|
||||||
\end{ORMCbox}
|
\end{hobox}
|
||||||
|
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
line width = 0.35mm
|
line width = 0.35mm
|
||||||
},
|
},
|
||||||
qubit/.style = {
|
qubit/.style = {
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
line width = 0.35mm
|
line width = 0.35mm
|
||||||
},
|
},
|
||||||
wire/.style = {
|
wire/.style = {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{ifthen}
|
\usepackage{ifthen}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
\definition{}
|
\definition{}
|
||||||
The \textit{integer lattice} $\mathbb{Z}^n \subset \mathbb{R}^n$ is the set of points with integer coordinates.
|
The \textit{integer lattice} $\mathbb{Z}^n$ is the set of points with integer coordinates in $n$ dimensions. \par
|
||||||
|
For example, $\mathbb{Z}^3$ is the set of points $(a, b, c)$ where $a$, $b$, and $c$ are integers.
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
Draw $\mathbb{Z}^2$.
|
Draw $\mathbb{Z}^2$.
|
||||||
@ -8,12 +9,13 @@ Draw $\mathbb{Z}^2$.
|
|||||||
|
|
||||||
|
|
||||||
\definition{}
|
\definition{}
|
||||||
We say a set of vectors $\{v_1, v_2, ..., v_k\}$ \textit{generates} $\mathbb{Z}^n$ if every lattice point can be written uniquely as
|
We say a set of vectors $\{v_1, v_2, ..., v_k\}$ \textit{generates} $\mathbb{Z}^n$
|
||||||
|
if every lattice point can be written as
|
||||||
$$
|
$$
|
||||||
a_1v_1 + a_2v_2 + ... + a_kv_k
|
a_1v_1 + a_2v_2 + ... + a_kv_k
|
||||||
$$
|
$$
|
||||||
for integer coefficients $a_i$. \par
|
for integer coefficients $a_i$. \par
|
||||||
It is fairly easy to show that $k$ must be at least $n$.
|
\textbf{Bonus:} show that $k$ must be at least $n$.
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
Which of the following generate $\mathbb{Z}^2$?
|
Which of the following generate $\mathbb{Z}^2$?
|
||||||
@ -30,8 +32,7 @@ Which of the following generate $\mathbb{Z}^2$?
|
|||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
Find a set of two vectors that generates $\mathbb{Z}^2$. \\
|
Find a set of two vectors other than $\{ (0, 1), (1, 0) \}$ that generates $\mathbb{Z}^2$. \\
|
||||||
Don't say $\{ (0, 1), (1, 0) \}$, that's too easy.
|
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
@ -44,7 +45,8 @@ Find a set of vectors that generates $\mathbb{Z}^n$.
|
|||||||
\pagebreak
|
\pagebreak
|
||||||
|
|
||||||
\definition{}
|
\definition{}
|
||||||
A \textit{fundamental region} of a lattice is the parallelepiped spanned by a generating set. The exact shape of this region depends on the generating set we use.
|
Say we have a generating set of a lattice. \par
|
||||||
|
The \textit{fundamental region} of this set is the $n$-dimensional parallelogram spanned by its members. \par
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
Draw two fundamental regions of $\mathbb{Z}^2$ using two different generating sets. Verify that their volumes are the same.
|
Draw two fundamental regions of $\mathbb{Z}^2$ using two different generating sets. Verify that their volumes are the same.
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
\section{Minkowski's Theorem}
|
\section{Minkowski's Theorem}
|
||||||
|
|
||||||
\theorem{Blichfeldt's Theorem}
|
\theorem{Blichfeldt's Theorem}<blich>
|
||||||
Let $X$ be a finite connected region. If the volume of $X$ is greater than $1$, $X$ must contain two distinct points that differ by an element of $\mathbb{Z}^n$. In other words, there exist distinct $x, y \in X$ so that $x - y \in \mathbb{Z}^n$.
|
Let $X$ be a finite connected region. If the volume of $X$ is greater than $1$, $X$ must contain two distinct points that differ by an element of $\mathbb{Z}^n$. In other words, there exist distinct $x, y \in X$ so that $x - y \in \mathbb{Z}^n$.
|
||||||
|
|
||||||
\vspace{2mm}
|
\vspace{2mm}
|
||||||
@ -9,14 +9,22 @@ Intuitively, this means that you can translate $X$ to cover two lattice points a
|
|||||||
|
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
Draw a region in $\mathbb{R}^2$ with volume greater than 1 that contains no lattice points. Find two points in that region which differ by an integer vector.
|
Draw a connected region in $\mathbb{R}^2$ with volume greater than 1 that contains no lattice points. Find two points in that region which differ by an integer vector.
|
||||||
\hint{Area is two-dimensional volume.}
|
\hint{Area is two-dimensional volume.}
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
The following picture gives an idea for the proof of Blichfeldt's theorem in $\mathbb{Z}^2$. Explain the picture and complete the proof.
|
Draw a \textit{disconnected} region in $\mathbb{R}^2$ with volume greater than 1 that contains no lattice points, \par
|
||||||
|
and show that no two points in that region differ by an integer vector.
|
||||||
|
\note{In other words, show that \ref{blich} indeed requires a connected region.}
|
||||||
|
|
||||||
|
\vfill
|
||||||
|
|
||||||
|
\problem{}
|
||||||
|
The following picture gives an idea for the proof of Blichfeldt's theorem in $\mathbb{Z}^2$. \par
|
||||||
|
Explain the picture and complete the proof.
|
||||||
|
|
||||||
\begin{center}
|
\begin{center}
|
||||||
\includegraphics[angle=90,width=0.5\linewidth]{proof.png}
|
\includegraphics[angle=90,width=0.5\linewidth]{proof.png}
|
||||||
@ -48,10 +56,8 @@ Let $X$ be a region $\in \mathbb{R}^2$ of volume $k$. How many integral points m
|
|||||||
A region $X$ is \textit{convex} if the line segment connecting any two points in $X$ lies entirely in $X$.
|
A region $X$ is \textit{convex} if the line segment connecting any two points in $X$ lies entirely in $X$.
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
\begin{itemize}
|
Draw a convex region in two dimensions. \par
|
||||||
\item Draw a convex region in the plane.
|
Then, draw a two-dimensional region that is \textit{not} convex.
|
||||||
\item Draw a region that is not convex.
|
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
\pagebreak
|
\pagebreak
|
||||||
@ -59,23 +65,28 @@ A region $X$ is \textit{convex} if the line segment connecting any two points in
|
|||||||
|
|
||||||
|
|
||||||
\definition{}
|
\definition{}
|
||||||
We say a region $X$ is \textit{symmetric} if for all points $x \in X$, $-x$ is also in $X$.
|
We say a region $X$ is \textit{symmetric with respect to the origin} if for all points $x \in X$, $-x$ is also in $X$. \par
|
||||||
|
In the following problems, \say{\textit{symmetric}} means \say{symmetric with respect to the origin.}
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
\begin{itemize}
|
Draw a symmetric region. \par
|
||||||
\item Draw a symmetric region.
|
Then, draw an asymmetric region.
|
||||||
\item Draw an asymmetric region.
|
|
||||||
\end{itemize}
|
\vfill
|
||||||
|
|
||||||
|
\problem{}
|
||||||
|
Show that a convex symmetric set always contains the origin.
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
\theorem{Minkowski's Theorem}<mink>
|
\theorem{Minkowski's Theorem}<mink>
|
||||||
Every convex set in $\mathbb{R}^n$ that is symmetric with respect to the origin and which has a volume greater than $2^n$ contains an integral point that isn't zero.
|
Every convex set in $\mathbb{R}^n$ that is symmetric and has a volume \par
|
||||||
|
greater than $2^n$ contains an integral point that isn't zero.
|
||||||
|
|
||||||
|
|
||||||
\problem{}
|
\problem{}
|
||||||
Draw a few sets that satisfy \ref{mink} in $\mathbb{R}^2$. \par
|
Draw a few sets that satisfy \ref{mink} in $\mathbb{R}^2$. \par
|
||||||
What is the simplest region that has the properties listed above?
|
What is a simple class of regions that has the properties listed above?
|
||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
nosolutions,
|
nosolutions,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
\usepackage{units}
|
\usepackage{units}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
%shortwarning
|
%shortwarning
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\graphicspath{ {./images/} }
|
\graphicspath{ {./images/} }
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[
|
\documentclass[
|
||||||
solutions
|
solutions
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{amsmath}
|
\usepackage{amsmath}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\input{tikxset.tex}
|
\input{tikxset.tex}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
label/.style = {
|
label/.style = {
|
||||||
rectangle,
|
rectangle,
|
||||||
% For automatic red background in solutions
|
% For automatic red background in solutions
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
draw = none,
|
draw = none,
|
||||||
rounded corners = 0mm
|
rounded corners = 0mm
|
||||||
},
|
},
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
solutions,
|
solutions,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
shortwarning
|
shortwarning
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
\input{diagram}
|
\input{diagram}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
shortwarning
|
shortwarning
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{chessfss}
|
\usepackage{chessfss}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{units}
|
\usepackage{units}
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
\usetikzlibrary{calc}
|
\usetikzlibrary{calc}
|
||||||
|
|
||||||
|
26
src/Advanced/Wallpaper/main.typ
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#import "@local/handout:0.1.0": *
|
||||||
|
|
||||||
|
// Resources:
|
||||||
|
//
|
||||||
|
// https://eschermath.org/wiki/Wallpaper_Patterns.html
|
||||||
|
// https://mathworld.wolfram.com/WallpaperGroups.html
|
||||||
|
// https://en.wikipedia.org/wiki/Wallpaper_group
|
||||||
|
|
||||||
|
#show: handout.with(
|
||||||
|
title: [Wallpaper Symmetry],
|
||||||
|
by: "Mark",
|
||||||
|
)
|
||||||
|
|
||||||
|
#include "parts/00 intro.typ"
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#include "parts/01 reflect.typ"
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#include "parts/02 rotate.typ"
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#include "parts/03 problems.typ"
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#include "parts/04 theorem.typ"
|
7
src/Advanced/Wallpaper/meta.toml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
[metadata]
|
||||||
|
title = "Wallpaper Symmetries"
|
||||||
|
|
||||||
|
|
||||||
|
[publish]
|
||||||
|
handout = true
|
||||||
|
solutions = true
|
151
src/Advanced/Wallpaper/parts/00 intro.typ
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
#import "@local/handout:0.1.0": *
|
||||||
|
#import "@preview/cetz:0.3.1"
|
||||||
|
|
||||||
|
= Wallpaper Symmetries
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
A _Euclidean isometry_ is a transformation of the plane that preserves distances. \
|
||||||
|
Intuitively, an isometry moves objects on the plane without deforming them.
|
||||||
|
|
||||||
|
There are four classes of Euclidean isometries:
|
||||||
|
- translations
|
||||||
|
- reflections
|
||||||
|
- rotations
|
||||||
|
- glide reflections
|
||||||
|
#note([We can prove there are no others, but this is beyond the scope of this handout.]) \
|
||||||
|
A simple example of each isometry is shown below:
|
||||||
|
|
||||||
|
#let demo(c) = {
|
||||||
|
let s = 0.5
|
||||||
|
cetz.draw.line(
|
||||||
|
(0, 0),
|
||||||
|
(3 * s, 0),
|
||||||
|
(3 * s, 1 * s),
|
||||||
|
(1 * s, 1 * s),
|
||||||
|
(1 * s, 2 * s),
|
||||||
|
(0, 2 * s),
|
||||||
|
close: true,
|
||||||
|
fill: c,
|
||||||
|
stroke: black + 0mm * s,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
rows: (3.5cm, 3.5cm),
|
||||||
|
row-gutter: 2mm,
|
||||||
|
[
|
||||||
|
#cetz.canvas({
|
||||||
|
import cetz.draw: *
|
||||||
|
|
||||||
|
demo(ored)
|
||||||
|
translate(x: -1.0, y: -1.0)
|
||||||
|
demo(oblue)
|
||||||
|
})
|
||||||
|
#v(1fr)
|
||||||
|
Translation
|
||||||
|
],
|
||||||
|
[
|
||||||
|
#cetz.canvas({
|
||||||
|
import cetz.draw: *
|
||||||
|
|
||||||
|
circle((-2, 0), radius: 0.1, stroke: none, fill: black)
|
||||||
|
arc(
|
||||||
|
(-2, 0),
|
||||||
|
radius: 1,
|
||||||
|
anchor: "origin",
|
||||||
|
start: 0deg,
|
||||||
|
stop: -30deg,
|
||||||
|
mode: "PIE",
|
||||||
|
)
|
||||||
|
|
||||||
|
demo(ored)
|
||||||
|
rotate(z: -30deg, origin: (-2, 0))
|
||||||
|
demo(oblue)
|
||||||
|
})
|
||||||
|
#v(1fr)
|
||||||
|
Rotation
|
||||||
|
],
|
||||||
|
|
||||||
|
[
|
||||||
|
#cetz.canvas({
|
||||||
|
import cetz.draw: *
|
||||||
|
|
||||||
|
line((-2, 0), (4, 0))
|
||||||
|
|
||||||
|
translate(x: 0, y: 0.25)
|
||||||
|
demo(ored)
|
||||||
|
set-transform(none)
|
||||||
|
|
||||||
|
set-transform((
|
||||||
|
(1, 0, 0, 0),
|
||||||
|
(0, 1, 0, 0),
|
||||||
|
(0, 0, 1, 0),
|
||||||
|
(0, 0, 0, 1),
|
||||||
|
))
|
||||||
|
|
||||||
|
translate(x: 0, y: 0.25)
|
||||||
|
demo(oblue)
|
||||||
|
})
|
||||||
|
#v(1fr)
|
||||||
|
Reflection
|
||||||
|
],
|
||||||
|
[
|
||||||
|
#cetz.canvas({
|
||||||
|
import cetz.draw: *
|
||||||
|
|
||||||
|
|
||||||
|
demo(ored)
|
||||||
|
|
||||||
|
set-transform((
|
||||||
|
(1, 0, 0, 0),
|
||||||
|
(0, 1, 0, 0),
|
||||||
|
(0, 0, 0, 0),
|
||||||
|
(0, 0, 0, 0),
|
||||||
|
))
|
||||||
|
translate(x: 2, y: 0)
|
||||||
|
|
||||||
|
demo(oblue)
|
||||||
|
|
||||||
|
set-transform(none)
|
||||||
|
line((-1, 0), (5, 0))
|
||||||
|
})
|
||||||
|
#v(1fr)
|
||||||
|
Glide reflection
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
A _wallpaper_ is a two-dimensional pattern that...
|
||||||
|
- has translational symmetry in at least two non-parallel directions (and therefore fills the plane) \
|
||||||
|
#note[
|
||||||
|
"Translational symmetry" means that we can slide the entire wallpaper in some direction, \
|
||||||
|
eventually mapping the pattern to itself.]
|
||||||
|
- has a countable number of reflection, rotation, or glide symmetries. \
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Is a plain square grid a valid wallpaper?
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
Yes!
|
||||||
|
- It has translational symmetry in the horizontal and vertical directions
|
||||||
|
- It has a countable number of symmetries---namely, six distinct mirror lines (horizontal, vertical, and diagonal) duplicated once per square.
|
||||||
|
- A square grid is #sym.convolve`442`
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Is the empty plane a valid wallpaper?
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
No, since it has uncountably many symmetries.
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
132
src/Advanced/Wallpaper/parts/01 reflect.typ
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
#import "@local/handout:0.1.0": *
|
||||||
|
#import "@preview/cetz:0.3.1"
|
||||||
|
|
||||||
|
= Mirror Symmetry
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
A _reflection_ is a transformation of the plane obtained by reflecting all points about a line. \
|
||||||
|
If this reflection maps the wallpaper to itself, we have a _mirror symmetry_. \
|
||||||
|
|
||||||
|
If $n$ such mirror lines intersect at a point, they form a _mirror node of order $n$_. \
|
||||||
|
#note[Mirror nodes with order 1 do not exist (i.e, $n >= 2$). A line does not intersect itself!]
|
||||||
|
|
||||||
|
#v(2mm)
|
||||||
|
|
||||||
|
Two mirror nodes on a wallpaper are identical if we can map one to the other with a translation and a rotation while preserving the pattern on that wallpaper.
|
||||||
|
|
||||||
|
#problem(label: "pat333")
|
||||||
|
Find all three distinct mirror nodes in the following pattern. \
|
||||||
|
What is the order of each node? \
|
||||||
|
#hint([
|
||||||
|
You may notice rotational symmetry in this pattern. \
|
||||||
|
Don't worry about that yet, we'll discuss it later.
|
||||||
|
])
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 45mm,
|
||||||
|
image("../res/wolfram/p3m1.svg", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
The mirror nodes are:
|
||||||
|
- the center of the amber cross
|
||||||
|
- the center of each right-handed group of three adjacent hexagons
|
||||||
|
- the center of each left-handed group of three adjacent hexagons
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
_Orbifold notation_ gives us a way to describe the symmetries of a wallpaper. \
|
||||||
|
It defines a _signature_ that fully describes all the symmetries of a given pattern. \
|
||||||
|
We will introduce orbifold notation one symmetry at a time.
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
In orbifold notation, mirror nodes are denoted by a #sym.convolve followed by a list of integer. \
|
||||||
|
Every integer $n$ following a #sym.convolve denotes a mirror node of order $n$.
|
||||||
|
|
||||||
|
#v(2mm)
|
||||||
|
|
||||||
|
The order of these integers doesn't matter. #sym.convolve`234` and #sym.convolve`423` are the same signature. \
|
||||||
|
However, we usually denote $n$-fold symmetries in descending order (that is, like #sym.convolve`432`). \
|
||||||
|
If we have many nodes of the same order, integers may be repeated.
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
What is the signature of the wallpaper in @pat333? \
|
||||||
|
#hint[Again, ignore rotational symmetry for now.]
|
||||||
|
#solution([It is #sym.convolve`333`])
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: page
|
||||||
|
#v(1fr)
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find the signature of the following pattern.
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 60mm,
|
||||||
|
image("../res/*632-a.png", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
It is #sym.convolve`632`:
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 40mm,
|
||||||
|
image("../res/*632-b.png", height: 100%),
|
||||||
|
)
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Draw a wallpaper pattern with signature #sym.convolve`2222`
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
Sample solutions are below.
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
rows: 50mm,
|
||||||
|
image("../res/wolfram/pmm.svg", height: 100%),
|
||||||
|
image("../res/escher/pmm.svg", height: 100%),
|
||||||
|
)
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
|
||||||
|
#remark()
|
||||||
|
In an exceptional case, we have two parallel mirror lines. \
|
||||||
|
Consider the following pattern:
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 60mm,
|
||||||
|
image("../res/**.png", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
The signature of this pattern is #sym.convolve#sym.convolve
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Draw another wallpaper pattern with signature #sym.convolve#sym.convolve.
|
||||||
|
|
||||||
|
#v(1fr)
|
181
src/Advanced/Wallpaper/parts/02 rotate.typ
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
#import "@local/handout:0.1.0": *
|
||||||
|
#import "@preview/cetz:0.3.1"
|
||||||
|
|
||||||
|
= Rotational Symmetry
|
||||||
|
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
A wallpaper may also have $n$-fold rotational symmetry about a point.
|
||||||
|
#v(2mm)
|
||||||
|
This means there are no more than $n$ rotations around that point that map the wallpaper to itself.
|
||||||
|
#v(2mm)
|
||||||
|
As before, two points of rotational symmetry are identical if we can perform a translation and rotation that maps one to the other without changing the wallpaper.
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
In orbifold notation, rotation is specified similarly to reflection, but uses the prefix #sym.diamond.stroked.small. \
|
||||||
|
For example:
|
||||||
|
- #sym.diamond.stroked.small`333` denotes a pattern with three distinct centers of rotation of order 3.
|
||||||
|
- #sym.diamond.stroked.small`4`#sym.convolve`2` denotes a pattern with one rotation center of order 4 and one mirror node of order 2.
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
rows: 50mm,
|
||||||
|
image("../res/333.png", height: 100%), image("../res/3*3.png", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find the three rotation centers in the left wallpaper. \
|
||||||
|
What are their orders?
|
||||||
|
|
||||||
|
#solution([This is #sym.diamond.stroked.small`333`])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find the signature of the pattern on the right.
|
||||||
|
|
||||||
|
#solution([This is #sym.diamond.stroked.small`3`#sym.convolve`3`])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
#remark()
|
||||||
|
You may have noticed that we could have an ambiguous classification, since two reflections are equivalent to a translation and a rotation.
|
||||||
|
We thus make the following distinction: _rotational symmetry that can be explained by reflection is not rotational symmetry._
|
||||||
|
|
||||||
|
#v(2mm)
|
||||||
|
|
||||||
|
In other words, when classifying a pattern...
|
||||||
|
- we first find all mirror symmetries,
|
||||||
|
- then all rotational symmetries that are not accounted for by reflection.
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
|
||||||
|
// MARK: glide
|
||||||
|
|
||||||
|
= Glide Reflections
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
Another type of symmetry is the _glide reflection_, denoted #sym.times.
|
||||||
|
|
||||||
|
A glide reflection is the result of a translation along a line followed by reflection about that line.
|
||||||
|
|
||||||
|
For example, consider the following pattern:
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 60mm,
|
||||||
|
image("../res/*x-a.png", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Convince yourself that all mirror lines in this pattern are _not_ distinct. /
|
||||||
|
In other words, this pattern has only one mirror symmetry.
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
There may seem to be two, but they are identical. \
|
||||||
|
We can translate one onto the other.
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Use the following picture to find the glide reflection in the above pattern.
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 70mm,
|
||||||
|
image("../res/*x-b.png", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
#remark()
|
||||||
|
The signature of this wallpaper is #sym.convolve#sym.times.
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
If none of the above symmetries appear in a pattern, then we only have simple translational symmetry. We denote this with the signature #sym.circle.small.
|
||||||
|
|
||||||
|
#remark()
|
||||||
|
In summary, to find the signature of a pattern:
|
||||||
|
- find the mirror lines (#sym.convolve) and the distinct intersections;
|
||||||
|
- then find the rotation centers (#sym.diamond.stroked.small) not explained by reflection;
|
||||||
|
- then find all glide reflections (#sym.times) that do not cross a mirror line.
|
||||||
|
- If we have none of the above, our pattern must be #sym.circle.small.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find the signature of the following pattern:
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 50mm,
|
||||||
|
image("../res/wiki/Wallpaper_group-cm-4.jpg", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
This is #sym.convolve#sym.times.
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find the signature of the following pattern:
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 60mm,
|
||||||
|
image("../res/wiki/Wallpaper_group-p4g-2.jpg", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
This is #sym.diamond.stroked.small`4`#sym.convolve`2`
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find two glide reflections in the following pattern.\
|
||||||
|
#note[(and thus show that its signature is #sym.times#sym.times.)]
|
||||||
|
|
||||||
|
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 70mm,
|
||||||
|
image("../res/xx-b.png", height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
#table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: 1fr,
|
||||||
|
rows: 40mm,
|
||||||
|
image("../res/xx-a.png", height: 100%),
|
||||||
|
)
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
67
src/Advanced/Wallpaper/parts/03 problems.typ
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
#import "@local/handout:0.1.0": *
|
||||||
|
#import "@preview/cetz:0.3.1"
|
||||||
|
|
||||||
|
#let pat(img, sol) = {
|
||||||
|
problem()
|
||||||
|
|
||||||
|
table(
|
||||||
|
stroke: none,
|
||||||
|
align: center,
|
||||||
|
columns: (1fr, 1fr),
|
||||||
|
rows: 80mm,
|
||||||
|
image(img, height: 100%), image(img, height: 100%),
|
||||||
|
)
|
||||||
|
|
||||||
|
solution(sol)
|
||||||
|
v(1fr)
|
||||||
|
}
|
||||||
|
|
||||||
|
= A few problems
|
||||||
|
|
||||||
|
Find the signatures of the following patterns. Mark all mirror nodes, rotation centers, and glide reflections. \
|
||||||
|
Each pattern is provided twice for convenience.
|
||||||
|
|
||||||
|
|
||||||
|
#pat("../res/wolfram/cm.svg", [#sym.times#sym.convolve])
|
||||||
|
#pat("../res/wolfram/cmm.svg", [#sym.diamond.stroked`2`#sym.convolve`22`])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pat("../res/wolfram/p3.svg", [#sym.diamond.stroked`333`])
|
||||||
|
#pat("../res/wolfram/p3m1.svg", [#sym.convolve`333`])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#pat("../res/wolfram/p4.svg", [#sym.diamond.stroked`442`])
|
||||||
|
#pat("../res/wolfram/p4m.svg", [#sym.convolve`442`])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#pat("../res/wolfram/p6.svg", [#sym.diamond.stroked`632`])
|
||||||
|
#pat("../res/wolfram/p6m.svg", [#sym.convolve`632`])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#pat("../res/wolfram/p4g.svg", [#sym.diamond.stroked`4`#sym.convolve`2`])
|
||||||
|
#pat("../res/wolfram/p31m.svg", [#sym.diamond.stroked`3`#sym.convolve`3`])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Draw a wallpaper with the signature #sym.convolve`442` \
|
||||||
|
#note[Make sure there are no other symmetries!]
|
||||||
|
#v(1fr)
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
|
||||||
|
#pat("../res/wolfram/pgg.svg", [#sym.diamond.stroked`22`#sym.times])
|
||||||
|
#pat("../res/wolfram/pmg.svg", [#sym.diamond.stroked`22`#sym.convolve])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#pat("../res/wolfram/pg.svg", [#sym.times#sym.times])
|
||||||
|
#pat("../res/wolfram/pm.svg", [#sym.convolve#sym.convolve])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#pat("../res/wolfram/p2.svg", [#sym.diamond.stroked`2222`])
|
||||||
|
#pat("../res/wolfram/pmm.svg", [#sym.convolve`2222`])
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#pat("../res/wolfram/p1.svg", [#sym.circle.small])
|
100
src/Advanced/Wallpaper/parts/04 theorem.typ
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#import "@local/handout:0.1.0": *
|
||||||
|
#import "@preview/cetz:0.3.1"
|
||||||
|
|
||||||
|
= The Signature-Cost Theorem
|
||||||
|
|
||||||
|
#definition()
|
||||||
|
First, we'll associate a _cost_ to each type of symmetry in orbifold notation:
|
||||||
|
|
||||||
|
#v(4mm)
|
||||||
|
#align(
|
||||||
|
center,
|
||||||
|
table(
|
||||||
|
stroke: (1pt, 1pt),
|
||||||
|
align: center,
|
||||||
|
columns: (auto, auto, auto, auto),
|
||||||
|
[*Symbol*], [*Cost*], [*Symbol*], [*Cost*],
|
||||||
|
[#sym.circle.small], [2], [#sym.times or #sym.convolve], [1],
|
||||||
|
[#sym.diamond.stroked.small`2`], [1/2], [#sym.convolve`2`], [1/4],
|
||||||
|
[#sym.diamond.stroked.small`3`], [2/3], [#sym.convolve`3`], [1/3],
|
||||||
|
[#sym.dots], [#sym.dots], [#sym.dots], [#sym.dots],
|
||||||
|
[#sym.diamond.stroked.small`n`],
|
||||||
|
[$(n-1) / n$],
|
||||||
|
[#sym.convolve`n`],
|
||||||
|
[$(n-1) / (2n)$],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
We then calculate the total "cost" of a signature by adding up the costs of each component.
|
||||||
|
|
||||||
|
For example, a pattern with signature #sym.convolve`333` has cost 2:
|
||||||
|
|
||||||
|
#v(2mm)
|
||||||
|
|
||||||
|
$
|
||||||
|
2 / 3 + 2 / 3 + 2 / 3 = 2
|
||||||
|
$
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Calculate the costs of the following signatures:
|
||||||
|
- #sym.diamond.stroked.small`3`#sym.convolve`3`
|
||||||
|
- #sym.convolve#sym.convolve
|
||||||
|
- #sym.diamond.stroked.small`4`#sym.convolve`2`:
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
- #sym.diamond.stroked.small`3`#sym.convolve`3`: $2/3 + 1 + 1/3 = 2$
|
||||||
|
- #sym.convolve#sym.convolve: $1 + 1 = 2$
|
||||||
|
- #sym.diamond.stroked.small`4`#sym.convolve`2`: $3/4 + 1 + 1/4 = 2$
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
#theorem(name: "Signature Cost Theorem")
|
||||||
|
The signatures of planar wallpaper patterns are exactly those with total cost 2. \
|
||||||
|
#note([We will not prove this theorem today, accept it without proof.])
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Consider the 4 symmetries (translation, reflection, rotation, and glide reflection). \
|
||||||
|
Which preserve orientation? Which reverse orientation?
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
- Reflections and glide reflections reverse orientation (directions of spirals).
|
||||||
|
- Translation and rotation preserve orientation.
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
#pagebreak()
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Use the signature-cost theorem to find all the signatures consisting of only #sym.circle.small or rotational symmetries.
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
#sym.diamond.stroked.small`632`, #sym.diamond.stroked.small`442`, #sym.diamond.stroked.small`333`, #sym.diamond.stroked.small`2222`, #sym.circle.small
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find all the signatures consisting of only mirror symmetries.
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
#sym.convolve`632`, #sym.convolve`442`, #sym.convolve`333`, #sym.convolve`2222`, #sym.convolve#sym.convolve
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
||||||
|
|
||||||
|
|
||||||
|
#problem()
|
||||||
|
Find all the remaining signatures. \
|
||||||
|
Each must be a mix of of mirror symmetries, rotational symmetries, or glide reflections. \
|
||||||
|
#hint([They are all shown in the problems section.])
|
||||||
|
|
||||||
|
#solution([
|
||||||
|
#sym.diamond.stroked.small`3`#sym.convolve`3`, #sym.diamond.stroked.small`4`#sym.convolve`2`,
|
||||||
|
#sym.diamond.stroked.small`22`#sym.times, #sym.diamond.stroked.small`22`#sym.convolve,
|
||||||
|
#sym.times#sym.times, #sym.times#sym.convolve
|
||||||
|
])
|
||||||
|
|
||||||
|
#v(1fr)
|
BIN
src/Advanced/Wallpaper/res/**.png
Normal file
After Width: | Height: | Size: 535 KiB |
BIN
src/Advanced/Wallpaper/res/*632-a.png
Normal file
After Width: | Height: | Size: 484 KiB |
BIN
src/Advanced/Wallpaper/res/*632-b.png
Normal file
After Width: | Height: | Size: 280 KiB |
BIN
src/Advanced/Wallpaper/res/*x-a.png
Normal file
After Width: | Height: | Size: 666 KiB |
BIN
src/Advanced/Wallpaper/res/*x-b.png
Normal file
After Width: | Height: | Size: 160 KiB |
BIN
src/Advanced/Wallpaper/res/3*3.png
Normal file
After Width: | Height: | Size: 533 KiB |
BIN
src/Advanced/Wallpaper/res/333.png
Normal file
After Width: | Height: | Size: 568 KiB |
86
src/Advanced/Wallpaper/res/escher/pmm.svg
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20001102//EN" "http://www.w3.org/TR/2000/CR-SVG-20001102/DTD/svg-20001102.dtd">
|
||||||
|
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10.16cm" height="5.08cm" viewBox="0 0 384 192">
|
||||||
|
<title>pmm</title>
|
||||||
|
<desc>Exported by Tess 1.70.</desc>
|
||||||
|
<clipPath id="mainclip"><rect x="0" y="0" width="384" height="192"/></clipPath>
|
||||||
|
<g style="fill-rule:evenodd; stroke-linejoin:round; stroke-linecap:round; clip-path:url(#mainclip)">
|
||||||
|
<defs>
|
||||||
|
<g id="Tess0p">
|
||||||
|
<path d="
|
||||||
|
M7.1306642022,-41.0013191628
|
||||||
|
L7.1306642022,-7.1306642022
|
||||||
|
L89.1333025278,-7.1306642022
|
||||||
|
L7.1306642022,-42.7839852134
|
||||||
|
"/></g>
|
||||||
|
<g id="Tess0" style="fill:none; stroke:none"><use xlink:href="#Tess0p"/></g>
|
||||||
|
<g id="Tess1" style="fill:none; stroke:rgb(0,0,0); stroke-width:1.7826660506"><use xlink:href="#Tess0p"/></g>
|
||||||
|
</defs>
|
||||||
|
<g transform="translate(192,96) rotate(0) scale(0.5609575611,0.5609575611)">
|
||||||
|
<g transform="translate(-405.2631578947,-100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-405.2631578947,0)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-405.2631578947,100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-405.2631578947,200)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,-100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,0)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,200)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,-100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,200)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,-100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,0)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,100)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,200)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,0) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,0) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,-200) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,-100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,0) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,100) rotate(180)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,0) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,0) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,-100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,0) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,100) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(405.2631578947,200) rotate(180) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-405.2631578947,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-405.2631578947,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-405.2631578947,0) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-405.2631578947,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,0) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(-202.6315789474,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(0,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,-200) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,-100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,0) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
<g transform="translate(202.6315789474,100) scale(1,-1)"><use xlink:href="#Tess1"/></g>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.3 KiB |
BIN
src/Advanced/Wallpaper/res/wiki/Wallpaper_group-cm-4.jpg
Normal file
After Width: | Height: | Size: 800 KiB |
BIN
src/Advanced/Wallpaper/res/wiki/Wallpaper_group-p4g-2.jpg
Normal file
After Width: | Height: | Size: 436 KiB |
6662
src/Advanced/Wallpaper/res/wolfram/all.svg
Normal file
After Width: | Height: | Size: 991 KiB |
8784
src/Advanced/Wallpaper/res/wolfram/cm.svg
Normal file
After Width: | Height: | Size: 233 KiB |
8192
src/Advanced/Wallpaper/res/wolfram/cmm.svg
Normal file
After Width: | Height: | Size: 236 KiB |
6392
src/Advanced/Wallpaper/res/wolfram/p1.svg
Normal file
After Width: | Height: | Size: 196 KiB |
6958
src/Advanced/Wallpaper/res/wolfram/p2.svg
Normal file
After Width: | Height: | Size: 178 KiB |
7653
src/Advanced/Wallpaper/res/wolfram/p3.svg
Normal file
After Width: | Height: | Size: 205 KiB |
11315
src/Advanced/Wallpaper/res/wolfram/p31m.svg
Normal file
After Width: | Height: | Size: 299 KiB |
9995
src/Advanced/Wallpaper/res/wolfram/p3m1.svg
Normal file
After Width: | Height: | Size: 264 KiB |
10133
src/Advanced/Wallpaper/res/wolfram/p4.svg
Normal file
After Width: | Height: | Size: 268 KiB |
7894
src/Advanced/Wallpaper/res/wolfram/p4g.svg
Normal file
After Width: | Height: | Size: 204 KiB |
8247
src/Advanced/Wallpaper/res/wolfram/p4m.svg
Normal file
After Width: | Height: | Size: 229 KiB |
10580
src/Advanced/Wallpaper/res/wolfram/p6.svg
Normal file
After Width: | Height: | Size: 273 KiB |
13887
src/Advanced/Wallpaper/res/wolfram/p6m.svg
Normal file
After Width: | Height: | Size: 379 KiB |
6068
src/Advanced/Wallpaper/res/wolfram/pg.svg
Normal file
After Width: | Height: | Size: 176 KiB |
5703
src/Advanced/Wallpaper/res/wolfram/pgg.svg
Normal file
After Width: | Height: | Size: 147 KiB |
5985
src/Advanced/Wallpaper/res/wolfram/pm.svg
Normal file
After Width: | Height: | Size: 163 KiB |
6908
src/Advanced/Wallpaper/res/wolfram/pmg.svg
Normal file
After Width: | Height: | Size: 178 KiB |
8486
src/Advanced/Wallpaper/res/wolfram/pmm.svg
Normal file
After Width: | Height: | Size: 226 KiB |
BIN
src/Advanced/Wallpaper/res/xx-a.png
Normal file
After Width: | Height: | Size: 81 KiB |
BIN
src/Advanced/Wallpaper/res/xx-b.png
Normal file
After Width: | Height: | Size: 406 KiB |
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
label/.style = {
|
label/.style = {
|
||||||
rectangle,
|
rectangle,
|
||||||
% For automatic red background in solutions
|
% For automatic red background in solutions
|
||||||
fill = \ORMCbgcolor,
|
fill = \bgcolor,
|
||||||
draw = none,
|
draw = none,
|
||||||
rounded corners = 0mm
|
rounded corners = 0mm
|
||||||
},
|
},
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[
|
\documentclass[
|
||||||
solutions
|
solutions
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[
|
\documentclass[
|
||||||
solutions
|
solutions
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[
|
\documentclass[
|
||||||
solutions
|
solutions
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
% use [nosolutions] flag to hide solutions.
|
% use [nosolutions] flag to hide solutions.
|
||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[solutions]{../../../lib/tex/ormc_handout}
|
\documentclass[solutions]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
singlenumbering
|
singlenumbering
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\usepackage{units}
|
\usepackage{units}
|
||||||
|
@ -190,7 +190,7 @@ For example, see the proof of the statement in \ref{binomsum} on the next page.
|
|||||||
\pagebreak
|
\pagebreak
|
||||||
|
|
||||||
|
|
||||||
\begin{ORMCbox}{Alternative Proof}{ogrape!10!white}{ogrape}
|
\begin{hobox}{Alternative Proof}{ogrape!10!white}{ogrape}
|
||||||
Consider the following problem: \par
|
Consider the following problem: \par
|
||||||
How many ways are there to write a number $x$ as an ordered sum of positive integers? \par
|
How many ways are there to write a number $x$ as an ordered sum of positive integers? \par
|
||||||
\note{
|
\note{
|
||||||
@ -234,7 +234,7 @@ For example, see the proof of the statement in \ref{binomsum} on the next page.
|
|||||||
We've found that the number of ways to split $x$ can be written as either
|
We've found that the number of ways to split $x$ can be written as either
|
||||||
$\sum_{n = 1}^{x-1} \binom{x-1}{n}$ or $2^{x-1}$,
|
$\sum_{n = 1}^{x-1} \binom{x-1}{n}$ or $2^{x-1}$,
|
||||||
and therefore $\sum_{n = 1}^{x-1} \binom{x-1}{n} = 2^{x-1}$.
|
and therefore $\sum_{n = 1}^{x-1} \binom{x-1}{n} = 2^{x-1}$.
|
||||||
\end{ORMCbox}
|
\end{hobox}
|
||||||
|
|
||||||
|
|
||||||
\pagebreak
|
\pagebreak
|
@ -2,7 +2,7 @@
|
|||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[
|
\documentclass[
|
||||||
solutions
|
solutions
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
% use [nosolutions] flag to hide solutions.
|
% use [nosolutions] flag to hide solutions.
|
||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[solutions]{../../../lib/tex/ormc_handout}
|
\documentclass[solutions]{../../../lib/tex/handout}
|
||||||
\usepackage{adjustbox}
|
\usepackage{adjustbox}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
% use [nosolutions] flag to hide solutions.
|
% use [nosolutions] flag to hide solutions.
|
||||||
% use [solutions] flag to show solutions.
|
% use [solutions] flag to show solutions.
|
||||||
\documentclass[solutions]{../../../lib/tex/ormc_handout}
|
\documentclass[solutions]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
shortwarning,
|
shortwarning,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
nopagenumber
|
nopagenumber
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
\geometry{top = 20mm}
|
\geometry{top = 20mm}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
hidewarning,
|
hidewarning,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
nopagenumber
|
nopagenumber
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
hidewarning,
|
hidewarning,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
nopagenumber
|
nopagenumber
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
hidewarning,
|
hidewarning,
|
||||||
singlenumbering,
|
singlenumbering,
|
||||||
nopagenumber
|
nopagenumber
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
\def\utri#1#2{
|
\def\utri#1#2{
|
||||||
@ -102,7 +102,7 @@
|
|||||||
|
|
||||||
\vfill
|
\vfill
|
||||||
|
|
||||||
\begin{ORMCbox}{Notes}{ogrape!10!white}{ogrape}
|
\begin{hobox}{Notes}{ogrape!10!white}{ogrape}
|
||||||
\begin{itemize}
|
\begin{itemize}
|
||||||
\item
|
\item
|
||||||
Each player needs to make multiple groups before the first player's second turn. \par
|
Each player needs to make multiple groups before the first player's second turn. \par
|
||||||
@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
\item Groups are easiest to secure near the corners or along the edges. Play there first. \par
|
\item Groups are easiest to secure near the corners or along the edges. Play there first. \par
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
\end{ORMCbox}
|
\end{hobox}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
\documentclass[
|
\documentclass[
|
||||||
solutions,
|
solutions,
|
||||||
shortwarning
|
shortwarning
|
||||||
]{../../../lib/tex/ormc_handout}
|
]{../../../lib/tex/handout}
|
||||||
\usepackage{../../../lib/tex/macros}
|
\usepackage{../../../lib/tex/macros}
|
||||||
|
|
||||||
|
|
||||||
|