Maximum Mathematics

Mathematics textbooks written from the ground up, with the problem sets and figures to go with them.

Every book here starts as notes taken while working through the subject, then gets rewritten into something worth reading on its own. Every figure is drawn with the Maximum Mathematics Asymptote library, free to use in your own work — its full documentation lives on its own site.

Under construction

The site is early — books are being written, not merely planned.

Start here

  • Books

    Textbooks, with problem sets and solutions.

  • Asymptote Library

    Every figure on this site is drawn with the Maximum Mathematics Asymptote library.

  • Authoring

    How pages on this site are written: front matter, mathematics, statements, and figures.

August 8, 2026

Subsections of Maximum Mathematics

Books

Each book is a section of this site: chapters read in order, with problem sets at the end of each one.

Problem sets come in three tiers:

TierWho it is forAvailability
Practice problemsEveryoneFree, with worked solutions
Problem setsReaders who want moreFree problems; solutions sold separately
Instructor setsVerified instructorsFree, including full solutions

Accounts, purchasing, and instructor verification are not built yet. Until they are, everything published here is free.

Available now

August 8, 2026

Asymptote Library

Nearly every figure on this site — diagrams, plots, tables — is drawn with Asymptote, using the Maximum Mathematics Asymptote library: a set of Asymptote modules built alongside this site to give every figure the same consistent styling, without writing the layout arithmetic by hand each time.

A circle, an ellipse, a parabola, and a line, drawn with the Maximum Mathematics Asymptote library.
Asymptote source
import MaximumMathematics;

Conic circle_shape = conic_circle(0, 0, 3);
Conic ellipse_shape = conic_ellipse(0, 0, 6, 2);
Conic parabola_shape = conic_parabola(0, -6, 0.4);
Line diagonal = line_from_slope_intercept(1, 0);

Plot p = Plot(-8, 8);
p.set_window(-8, 8, -8, 8);
p.add(circle_shape.as_implicit());
p.add(ellipse_shape.as_implicit());
p.add(parabola_shape.as_implicit());
p.add(diagonal.as_implicit(), type=DOTTED);

Image img = Image(10, 10);
img.set_diagram_padding(0.5);
img.add(p);

The library is free to use in your own work, whether or not you’re reading these books. Full documentation — installation, every visualization, styling — lives on its own site:

jakeman582.github.io/Maximum-Asymptote

Source is at github.com/Jakeman582/Maximum-Asymptote.

August 8, 2026

Authoring

Reference for writing content on this site. This page is also the live test of every custom shortcode — if something here renders wrong, the shortcode is broken.

Front matter

Pages use TOML front matter delimited by +++.

+++
title = 'Limits and Continuity'
description = 'One sentence, shown in section listings and search results.'
weight = 30
chapter = 2
+++
KeyEffect
titlePage title, sidebar entry, browser tab
descriptionShown in parent-section listings and search results
weightSidebar ordering within its section; lower sorts first
chapterPrefixes statement numbers on the page, e.g. Theorem 2.4
type = 'chapter'Renders as a section landing page rather than an article
draft = trueExcluded from builds unless hugo -D

Start new pages from an archetype rather than by hand:

hugo new content books/calculus/limits.md
hugo new content books/calculus/_index.md --kind chapter

Mathematics

Write LaTeX directly. $...$ is inline, $$...$$ is displayed, and MathJax loads on every page.

The Euler identity $e^{i\pi} + 1 = 0$ sits inline in the sentence. A displayed equation gets its own line:

$$\int_a^b f'(x)\,dx = f(b) - f(a)$$

Long displayed equations scroll within their own box rather than forcing the whole page sideways on a phone.

Because Goldmark passes $...$ through untouched, backslashes and underscores inside mathematics need no escaping: $a_1 + a_2$ gives $a_1 + a_2$, not italics.

Statements

statement renders a numbered definition, theorem, example, or proof. The body is parsed as Markdown, so mathematics and emphasis work inside it:

{{< statement kind="theorem" name="Fundamental Theorem of Calculus" >}}
If $f$ is continuous on $[a, b]$ and $F$ is any antiderivative of $f$, then
$$\int_a^b f(x)\,dx = F(b) - F(a).$$
{{< /statement >}}

Which renders as:

Definition 4 (Continuity at a point)

A function $f$ is continuous at $c$ if $\lim_{x \to c} f(x) = f(c)$ — which requires that $f(c)$ is defined, that the limit exists, and that the two agree.

Theorem 5 (Fundamental Theorem of Calculus)

If $f$ is continuous on $[a, b]$ and $F$ is any antiderivative of $f$, then

$$\int_a^b f(x)\,dx = F(b) - F(a).$$
Proof.

Define $G(x) = \int_a^x f(t)\,dt$. By the first part of the theorem $G' = f$, so $G$ and $F$ are antiderivatives of the same function and differ by a constant. Then $F(b) - F(a) = G(b) - G(a) = \int_a^b f(x)\,dx$.

Example 6

The function $f(x) = 1/x$ is continuous at every $c \neq 0$, and is not continuous at $0$ for the simplest possible reason: $f(0)$ is undefined.

Parameters

ParameterPurpose
kinddefinition, theorem, lemma, corollary, proposition, example, exercise, notation, remark, proof
nameOptional italicised name shown in parentheses after the number
numberExplicit number; omit to take the next number on the page
idExplicit HTML id for cross-references; defaults to kind-number

Numbering

Every numbered kind shares one counter per page, so a page reads Definition 1, Theorem 2, Example 3. That is the usual textbook convention, and it keeps a cross-reference unambiguous without having to name its kind.

Set the page’s chapter front matter to prefix numbers with the chapter — chapter = 3 gives Theorem 3.2.

Proofs and remarks are never numbered; a proof belongs to the statement above it.

Figures

Figures are pre-rendered SVGs committed to the repository. The site build never runs Asymptote, so deploying needs neither Asymptote nor LaTeX installed.

Keep the .asy source and its .svg output together in the page bundle:

content/books/calculus/riemann-sums/
├── index.md
├── left-sum.asy
└── left-sum.svg

Then reference the SVG by name:

{{< figure src="left-sum.svg"
           title="Figure 1:"
           caption="A left Riemann sum for $f(x) = x^2$."
           source="left-sum.asy" >}}
ParameterPurpose
srcSVG filename; a page resource first, then a site asset
titleBold caption lead-in, e.g. "Figure 1:"
captionCaption body; LaTeX between $...$ is rendered
source.asy filename to show in a collapsible block
altAccessible description; falls back to caption, then title
widthCSS width, e.g. "60%"

Passing source puts an Asymptote source disclosure under the figure — worth doing on any figure a reader might want to adapt. There is a live example on the Asymptote Library page.

A missing src or source fails the build rather than rendering a broken image.

Re-rendering

After editing any .asy under content/:

scripts/render-figures.sh

That renders only sources whose SVG is missing or older than the source. Pass --force to re-render everything, which you want after changing the library’s theme file.

Notices

The theme’s notice shortcode covers asides:

A tip

Use style="tip", "note", "info", "warning", or "primary".

A warning

Reserve warnings for things that will actually cost the reader time.