Skip to content

Commit b23deab

Browse files
authored
tschich:0.1.0 (#5223)
1 parent 052528e commit b23deab

9 files changed

Lines changed: 193 additions & 0 deletions

File tree

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 switchlex
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<div align="center">
2+
<picture>
3+
<source media="(prefers-color-scheme: dark)" srcset="docs/tschich-logo-light.png">
4+
<source media="(prefers-color-scheme: light)" srcset="docs/tschich-logo-dark.png">
5+
<img src="docs/tschich-logo-dark.png" width="450" alt="tschich logo">
6+
</picture>
7+
</div>
8+
9+
<div align="center">
10+
11+
[![Link to the package at Typst universe](https://img.shields.io/badge/dynamic/toml?url=https%3A%2F%2Fraw.githubusercontent.com%2Fswitchlex%2Ftschich%2Frefs%2Fheads%2Fmain%2Ftypst.toml&query=%24.package.version&prefix=v.&label=Typst%20Universe&labelColor=white&color=grey)](https://typst.app/universe/package/tschich)
12+
[![Link to the manual (pdf) for detailed documentation](https://img.shields.io/badge/Manual-pdf-grey?labelColor=white)](docs/manual.pdf)
13+
[![Link to the license (MIT)](https://img.shields.io/badge/License-MIT-grey?labelColor=white)](./LICENSE)
14+
15+
</div>
16+
17+
---
18+
19+
<div align="center">
20+
21+
tschich is a simple tool for achieving perfect proportions on the page — no matter the paper's dimensions.
22+
23+
</div>
24+
25+
[![Showcase of the canons provided by tschich applied to an example text.](examples/showcase.png)](examples/example.typ)
26+
27+
---
28+
29+
## Using tschich
30+
31+
Setting up the margins for placing the type area on the page is all about proportion. It must always take the page's width (`a`) and height (`b`) into consideration. These measurements, (if not already known), can be displayed by using:
32+
33+
```typst
34+
#tschich-help
35+
```
36+
37+
Given the page's dimensions, the margins can be automatically set up by using:
38+
39+
```typst
40+
#set page(margin: tschich(a, b))
41+
```
42+
43+
This standard function reproduces a nine part division following van de Graaf's adaption of Villard's canon (as reconstructed by [Jan Tschichold](https://link.springer.com/chapter/10.1007/978-3-0348-7799-2_7)) — that is: the inner margin will be one ninth and the outer margin will be two ninths of the page's width. The same goes for the top and bottom margin in relation to the page's height.
44+
45+
## Advanced usage
46+
47+
Besides this, tschich does also provide a variable version of Villard's canon, an adaption of Tschichold's medieval ideal canon, a function for retrieving the type area's dimensions and a function for centering it on the page. To learn more, simply confer the [manual](docs/manual.pdf).
585 KB
Binary file not shown.
24.1 KB
Loading
25.5 KB
Loading
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
#import "@preview/tschich:0.1.0": *
2+
3+
#set text(
4+
size: 9pt, font: "EB Garamond",
5+
number-type: "old-style")
6+
7+
#set par(
8+
justify: true, spacing: 0.65em,
9+
first-line-indent: (amount: 1em, all: false))
10+
11+
#let parstart(body) = {
12+
text(tracking: 0.5pt)[#smallcaps[#body]#h(0.5pt)]}
13+
14+
/// Nine Part Division
15+
16+
#set page(
17+
width: 110mm, height: 165mm,
18+
margin: tschich(110mm, 165mm), binding: right,
19+
numbering: "1"); #counter(page).update(1)
20+
21+
#parstart[Zwei Konstanten] regieren die Proportionen eines gut gemachten Buches: Hand und Auge. Das gesunde Auge ist immer um zwei Spannen von der Buchseite entfernt, und alle Menschen fassen Bücher auf die gleiche Weise an.
22+
23+
Die Buchgrößen werden vom Gebrauchszweck bestimmt. Sie sind auf die durchschnittliche Größe und die Hände von Erwachsenen bezogen. Schon Kinderbücher dürfen nicht in Foliogröße hergestellt werden, weil einem Kinde dieses Format unhandlich ist. Ein hoher oder wenigstens genügender Grad von Handlichkeit wird erwartet: ein Buch in Tischgröße ist ein Unding, Bücher von Briefmarken große sind Spielereien. Sehr schwere Bücher sind ebenso unwillkommen; ältere Leute könnten sie vielleicht nicht ohne fremde Hilfe bewegen. Riesen müßten viel größere Buchformate und Zeitungen haben; Zwergen wären viele unserer Bücher zu groß.
24+
25+
Zwei Hauptgruppen von Büchern gibt es: jene, die wir auf den Tisch legen, um sie zu studieren, und die andern, die wir im Stuhl zurückgelehnt, im Sessel oder in der Eisenbahn lesen. Studierbücher sollten wir schräg vor uns aufstellen. Dazu raffen sich aber nur wenige auf. Uns über das Buchzu beugen, ist der Gesundheit genau so abträglich wie die übliche Schreibhaltung, die der flache Tisch fordert. Der Schreiber des Mittelalters schrieb auf einem Pult, das wir kaum noch Pult zu nennen wagen, so steil war es (zuweilen bis fünfundsechzig Grad). Das Pergament war mit einem quergespannten Band festgehalten und wurde nach und nach aufwärts geschoben. Die Schreiblinie, stets waagerecht, war in Augenhöhe, und der Schreiber saß nahezu aufrecht vor dem Pergament. Noch um die Jahrhundertwende schrieben Pfarrer und Beamte stehend an einem Pültchen: eine gesunde, vernünftige Schreib- und Lesehaltung, die leider ganz selten geworden ist.
26+
27+
Die Lesehaltung hat jedoch mit der Größe und Ausdehnung der Studierbücher nichts zu tun. Ihre Formate reichen von Großoktav bis Großquart; größere Formate sind Ausnahmen. Studier- oder Tischbücher liegen auf dem Tisch und können nicht in der freien Hand gelesen werden.
28+
29+
Bücher, die man gerne freihändig läse, zeigen alle Abarten des Oktavformats. Vollkommen wären die seltenen noch kleineren Bücher, falls sie schlank sind: sie können ohne Mühe stundenlang in der freien Hand gehalten werden.
30+
31+
Aus einem aufgestellten Buche wird nur beim Gottesdienst vorgelesen: die Augen des Vorlesers mögen um Armeslänge von den Buchstaben des Textes entfernt sein. Eine gewöhnliche Buchseite ist bloß eine Ellenlänge vom Auge des Lesers entfernt. Nur von profanen Büchern ist hier die Rede: nicht alle der folgenden Erwägungen und Regeln gelten auch für sakrale Bücher.
32+
33+
Es gibt viele Proportionen der Seiten große, das heißt des Längenverhältnisses von Breite und Höhe. Jedermann kennt zumindest vom Hörensagen das Verhältnis des Goldenen Schnittes: genau 1 : 1,618. Die Proportion 5 : 8 ist nichts an-
34+
deres als eine Annäherung an den Goldenen Schnitt. Es fällt schwer, dies noch von der Proportion 2 : 3 zu behaupten. [...]
35+
36+
37+
/// Medieval Ideal Canon
38+
39+
#set page(
40+
width: 110mm, height: 165mm,
41+
margin: tschich-old(110mm, 165mm, 1/3), binding: right,
42+
numbering: "1"); #counter(page).update(1)
43+
44+
#parstart[Zwei Konstanten] regieren die Proportionen eines gut gemachten Buches: Hand und Auge. Das gesunde Auge ist immer um zwei Spannen von der Buchseite entfernt, und alle Menschen fassen Bücher auf die gleiche Weise an.
45+
46+
Die Buchgrößen werden vom Gebrauchszweck bestimmt. Sie sind auf die durchschnittliche Größe und die Hände von Erwachsenen bezogen. Schon Kinderbücher dürfen nicht in Foliogröße hergestellt werden, weil einem Kinde dieses Format unhandlich ist. Ein hoher oder wenigstens genügender Grad von Handlichkeit wird erwartet: ein Buch in Tischgröße ist ein Unding, Bücher von Briefmarken große sind Spielereien. Sehr schwere Bücher sind ebenso unwillkommen; ältere Leute könnten sie vielleicht nicht ohne fremde Hilfe bewegen. Riesen müßten viel größere Buchformate und Zeitungen haben; Zwergen wären viele unserer Bücher zu groß.
47+
48+
Zwei Hauptgruppen von Büchern gibt es: jene, die wir auf den Tisch legen, um sie zu studieren, und die andern, die wir im Stuhl zurückgelehnt, im Sessel oder in der Eisenbahn lesen. Studierbücher sollten wir schräg vor uns aufstellen. Dazu raffen sich aber nur wenige auf. Uns über das Buchzu beugen, ist der Gesundheit genau so abträglich wie die übliche Schreibhaltung, die der flache Tisch fordert. Der Schreiber des Mittelalters schrieb auf einem Pult, das wir kaum noch Pult zu nennen wagen, so steil war es (zuweilen bis fünfundsechzig Grad). Das Pergament war mit einem quergespannten Band festgehalten und wurde nach und nach aufwärts geschoben. Die Schreiblinie, stets waagerecht, war in Augenhöhe, und der Schreiber saß nahezu aufrecht vor dem Pergament. Noch um die Jahrhundertwende schrieben Pfarrer und Beamte stehend an einem Pültchen: eine gesunde, vernünftige Schreib- und Lesehaltung, die leider ganz selten geworden ist.
49+
50+
Die Lesehaltung hat jedoch mit der Größe und Ausdehnung der Studierbücher nichts zu tun. Ihre Formate reichen von Großoktav bis Großquart; größere Formate sind Ausnahmen. Studier- oder Tischbücher liegen auf dem Tisch und können nicht in der freien Hand gelesen werden.
51+
52+
Bücher, die man gerne freihändig läse, zeigen alle Abarten des Oktavformats. Vollkommen wären die seltenen noch kleineren Bücher, falls sie schlank sind: sie können ohne Mühe stundenlang in der freien Hand gehalten werden.
53+
54+
Aus einem aufgestellten Buche wird nur beim Gottesdienst vorgelesen: die Augen des Vorlesers mögen um Armeslänge von den Buchstaben des Textes entfernt sein. Eine gewöhnliche Buchseite ist bloß eine Ellenlänge vom Auge des Lesers entfernt. Nur von profanen Büchern ist hier die Rede: nicht alle der folgenden Erwägungen und Regeln gelten auch für sakrale Bücher.
55+
56+
Es gibt viele Proportionen der Seiten große, das heißt des Längenverhältnisses von Breite und Höhe. Jedermann kennt zumindest vom Hörensagen das Verhältnis des Goldenen Schnittes: genau 1 : 1,618. Die Proportion 5 : 8 ist nichts an-
57+
deres als eine Annäherung an den Goldenen Schnitt. Es fällt schwer, dies noch von der Proportion 2 : 3 zu behaupten. [...]
1.78 MB
Loading
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/// Displaying package information and the page's dimensions
2+
3+
#let tschich-help = context {
4+
align(center)[ #box(stroke: (0.5pt + black), inset: 0.75em)[
5+
#text(size: 8em/11)[#sym.chevron.l *tschich v.0.1.0* #sym.chevron.r --- To set up the margins use:] \
6+
#box(stroke: (0.25pt + black), inset: 0.5em)[
7+
`#set page(margin: tschich(a, b))`] #v(1em, weak: true)
8+
$a = #page.width.mm()$ mm #h(2em) $b = #page.height.mm()$ mm #v(1.5em, weak: true)
9+
#text(size: 8em/11)[For advanced usage see the \u{261E} #link("https://raw.githubusercontent.com/switchlex/tschich/refs/heads/main/docs/manual.pdf")[manual].]]]}
10+
11+
12+
/// Canons for computing margins
13+
14+
// Medieval Ideal Canon
15+
#let tschich-old(a, b, p) = {
16+
let c = eval(str(
17+
2 * a.mm() - (4 * calc.pow(a.mm(), 3)) / (calc.pow(a.mm(), 2) + calc.pow(b.mm(), 2))) + "mm")
18+
return (
19+
"inside": p * (b - b/a * c),
20+
"top": p * (b - b/a * c),
21+
"outside": a - c,
22+
"bottom": b - b/a * c,
23+
"x": a, "y": b)}
24+
25+
// Division with variable proportion
26+
#let tschich-var(a, b, p) = {
27+
if p >= 1/3 {panic("p must be smaller than 1/3")}
28+
else {return (
29+
"inside": p * a,
30+
"top": p * b,
31+
"outside": 2 * p * a,
32+
"bottom": 2 * p * b,
33+
"x": a, "y": b)}}
34+
35+
// Nine Part Division (Standard)
36+
#let tschich(a, b) = tschich-var(a, b, 1/9)
37+
38+
39+
/// Computing the type area's dimensions
40+
41+
#let tschich-dim(f) = {
42+
return (
43+
"width": f.at("x") - f.at("inside") - f.at("outside"),
44+
"height": f.at("y") - f.at("top") - f.at("bottom"))}
45+
46+
47+
/// Centering the type area
48+
49+
#let tschich-mid(f) = {
50+
let m = 1/2 * (f.at("inside") + f.at("outside"))
51+
return (
52+
"inside": m,
53+
"top": f.at("top"),
54+
"outside": m,
55+
"bottom": f.at("bottom"),
56+
"x": f.at("x"), "y": f.at("y"))}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[package]
2+
name = "tschich"
3+
version = "0.1.0"
4+
entrypoint = "lib.typ"
5+
authors = [ "Alexander Abt" ]
6+
license = "MIT"
7+
description = "Perfect proportions."
8+
repository = "https://github.com/switchlex/tschich"
9+
keywords = [ "layout", "book", "margins", "binding", "typography" ]
10+
categories = [ "layout", "book" ]
11+
exclude = [ "examples/*", "docs/*" ]
12+
disciplines = [ ]

0 commit comments

Comments
 (0)