Vintage wetenschappelijke papers met LaTeX

De voorbeelden zijn onderverdeeld in drie groepen:

  • Pure LaTeX-pagina's (1, 2, 4, 5, 6, 10 t/m 14)
  • Standalone fiziko MetaPost-figuren (3, 7, 8, 9)
  • LaTeX-pagina's met fiziko-figuren die intern worden getekend via de ingebouwde MetaPost van LuaTeX (15 t/m 20)

Galerij

Hieronder volgt een lijst van de gecompileerde output (beschikbaar als vector-PDF's):

  1. Early modern page
  2. Engraved optics plate
  3. Hooke apparatus
  4. Ornamented incipit
  5. Victorian newspaper
  6. Natural history catalogue
  7. Lens rays
  8. Atwood machine
  9. Shading atlas
  10. Table of logarithms
  11. Circumpolar star chart
  12. Snow-crystal micrographs
  13. Cooling curve
  14. Patent drawing sheet
  15. Inclined plane
  16. Telescope plate
  17. Terrestrial globe
  18. Mechanics primer
  19. Knots plate
  20. Phases of the moon

De Voorbeelden

  • 01-early-modern-page.tex – OpenType old-style cijfers en historische ligaturen, een expliciete lange s (ſ), warme papier- en inkkleuren, asymmetrische marges, een initiaal (drop capital), gespatieerde kleine kapitalen, marginalia en printerlijnen.
  • 02-engraved-optics-plate.tex – Deterministische onregelmatige lijnen en arcering in TikZ, waarbij labels behouden blijven als doorzoekbare tekst.
  • 03-fiziko-hooke-apparatus.mp – Een compacte Hooke-opstelling getekend met de externe fiziko MetaPost-bibliotheek: gearceerde steun, gemodelleerde veer, hangend gewicht en gemeten uitrekking.
  • 04-ornamented-incipit.tex – Een A5-titelpagina uit de vroege wetenschappelijke periode met een omkaderde initiaal van drie regels en een klein vectorornament gemaakt van standaard TikZ-paden.
  • 05-victorian-newspaper.tex – Een compacte, vierkante broadsheet met een koptekst, gebalanceerde kolommen, een scheidingslijn tussen de kolommen, een uitgelicht citaat, artikelkoppen en een meteorologisch register.
  • 06-natural-history-catalogue.tex – Een museumcataloguspagina met gebruik van hanging entries, puntleiders, expliciete typografische rollen en cijfers in oude stijl.
  • 07-fiziko-lens-rays.mp – Een glazen lens waarbij de lichtpaden worden berekend door de refractiemacro van fiziko, in plaats van getekend naar een vooraf bepaald brandpunt.
  • 08-fiziko-atwood-machine.mp – Een Atwood-machine bestaande uit een gearceerde steun, een geschaduwde katrol, een gebogen touw, hangende gewichten en een versnellingspijl.
  • 09-fiziko-shading-atlas.mp – Een zij-aan-zij vergelijking van lijnarcering, stippeling en een geschaduwde buis met variabele breedte.
  • 10-lua-table-of-logarithms.tex – Een logaritmetabel met vijf decimalen waarvan elk cijfer tijdens het compileren wordt berekend door een Lua-functie, gezet in lining tabular figures met de rastering van een negentiende-eeuwse tabel.
  • 11-circumpolar-star-chart.tex – Een polaire sterrenkaart: één macro converteert rechte klimming en declinatie naar kaartcoördinaten voor vierendertig gecatalogiseerde sterren, uurcirkels aangeduid met Romeinse cijfers en schijven gegradeerd naar magnitude.
  • 12-snow-crystal-micrographs.tex – Vier circulaire microscoopvelden; de kristallen zijn gegroeid via TikZ Lindenmayer-systeem grammatica's, waarbij zes geroteerde kopieën van één arm zorgen voor de hexagonale symmetrie.
  • 13-cooling-curve-graph-paper.tex – Een pgfplots grafiek op sepia-gekleid ruitjespapier met naar binnen gerichte tekens (ticks), open cirkels als plot-symbolen, een handmatig gefitte curve en een cursieve opmerking in de marge.
  • 14-patent-drawing-sheet.tex – Een octrooitekening van een centrifugale regelaar: genummerde leidlijnen, secties gearceerd onder hoeken van 45 graden, gegraveerde bollen en ondertekeningslijnen voor getuigen en de uitvinder.
  • 15-fiziko-inclined-plane.tex – Een traktaatpagina waarvan de figuur door fiziko binnen LuaLaTeX is getekend: een houten wig, een geschaduwde bol en het gewicht ontbonden langs en loodrecht op de helling, met labels in de tekst- en wiskundefonts van de pagina.
  • 16-fiziko-telescope-plate.tex – Een Kepleriaanse telescoop waarin elke straal wordt gebroken door de tracing-macro van fiziko; het brandpunt en de uitgangspupil (waar het oog wordt geplaatst) worden bepaald daar waar berekende stralen de as kruisen.
  • 17-fiziko-terrestrial-globe.tex – De aarde vanuit drie stations met behulp van de fiziko globe inclusief ingebouwde kustlijnen, aangevuld met een rand van kleine globes gedraaid in gelijke stappen.
  • 18-fiziko-mechanics-primer.tex – Een hoofdstuk in twee kolommen met een beladen kar, een in balans zijnde hefboom en een pendule, elk ter plekke in hun kolom getekend.
  • 19-fiziko-knots-plate.tex – Trefoil-, cinquefoil- en septafoil-koorden op basis van elk één formule, waarbij fiziko de kruisingen vindt en het touw schaduwt.
  • 20-fiziko-phases-of-the-moon.tex – De maan in acht orbitale posities onder één vast licht, en dezelfde acht fasen zoals gezien vanaf de aarde door het licht rond een vaste sfeer te draaien.

De .tex bestanden kunnen onafhankelijk worden gecompileerd met LuaLaTeX. De .mp bestanden zijn standalone MetaPost-bronnen met fiziko als expliciete externe afhankelijkheid. Voorbeelden 15 tot en met 20 vereisen beide: het zijn LuaLaTeX-documenten die fiziko laden via luamplib.

Build-instructies

De snelste methode is het gebruik van het script voor jouw shell, uitgevoerd vanuit de root van de repository. Beide scripts compileren elk voorbeeld naar de map build/ en slaan de fiziko-voorbeelden over, tenzij een fiziko checkout wordt opgegeven:

.\build.ps1 -Fiziko ..\fiziko            # PowerShell 7
./build.sh ../fiziko                      # POSIX shell

Voeg voorbeeldnamen toe om alleen die specifieke bestanden te bouwen.

Vereisten

  • LuaLaTeX (TeX Live of MiKTeX)
  • De volgende LaTeX-pakketten: fontspec, geometry, microtype, multicol, xcolor, tikz (inclusief de bibliotheken lindenmayersystems, patterns.meta, calc en shapes.geometric), pgfplots, luacode en array.
  • EB Garamond (het ebgaramond pakket in TeX Live en MiKTeX).

Pure LaTeX voorbeelden compileren

Maak vanuit de root een output-directory aan en compileer de pure LaTeX-voorbeelden:

PowerShell 7 op Windows:

New-Item -ItemType Directory -Force build | Out-Null
$names = @(
'01-early-modern-page',
'02-engraved-optics-plate',
'04-ornamented-incipit',
'05-victorian-newspaper',
'06-natural-history-catalogue',
'10-lua-table-of-logarithms',
'11-circumpolar-star-chart',
'12-snow-crystal-micrographs',
'13-cooling-curve-graph-paper',
'14-patent-drawing-sheet'
)
foreach ($name in $names) {
lualatex -interaction=nonstopmode -halt-on-error `
-output-directory=build "examples/$name.tex"
}

POSIX shell op Linux of macOS:

mkdir -p build
for name in \
01-early-modern-page \
02-engraved-optics-plate \
04-ornamented-incipit \
05-victorian-newspaper \
06-natural-history-catalogue \
10-lua-table-of-logarithms \
11-circumpolar-star-chart \
12-snow-crystal-micrographs \
13-cooling-curve-graph-paper \
14-patent-drawing-sheet
do
lualatex -interaction=nonstopmode -halt-on-error \
-output-directory=build "examples/$name.tex"
done

Let op: De bronbestanden weigeren pdfLaTeX bewust, omdat deze engine de hier getoonde OpenType-besturingen niet kan bieden.

Fiziko voorbeelden compileren

Clone fiziko apart, aangezien dit niet in deze repository is opgenomen: git clone https://github.com/jemmybutton/fiziko.git ../fiziko

MetaPost vindt fiziko.mp via MPINPUTS.

PowerShell 7 op Windows:

$env:MPINPUTS = "$((Resolve-Path ../fiziko).Path);"
New-Item -ItemType Directory -Force build | Out-Null
$names = @(
'03-fiziko-hooke-apparatus',
'07-fiziko-lens-rays',
'08-fiziko-atwood-machine',
'09-fiziko-shading-atlas'
)
foreach ($name in $names) {
mpost -interaction=nonstopmode -halt-on-error `
-job-name=$name -output-directory=build "examples/$name.mp"
}

POSIX shell op Linux of macOS:

export MPINPUTS="$(cd ../fiziko && pwd):"
mkdir -p build
for name in \
03-fiziko-hooke-apparatus \
07-fiziko-lens-rays \
08-fiziko-atwood-machine \
09-fiziko-shading-atlas
do
(cd build && mpost -interaction=nonstopmode -halt-on-error \
"../examples/$name.mp")
done

Elk resultaat wordt opgeslagen als build/<voorbeeld-naam>-1.eps. Er is een verschil tussen distributies: MiKTeX's mpost (versie 3.00, gecontroleerd september 2026) crasht bij het eerste btex-label tenzij -job-name=<naam> wordt opgegeven, terwijl TeX Live's mpost deze vlag weigert en geen vlag nodig heeft.

Converteer de EPS-bestanden naar PDF of PNG met Ghostscript.

LaTeX-pagina's met geïntegreerde Fiziko-figuren compileren

Voorbeelden 15 tot en met 20 vereisen daarnaast:

  • Het luamplib pakket, dat MetaPost binnen LuaTeX draait.
  • unicode-math en het garamond-math pakket, zodat de wiskundige labels op de figuren overeenkomen met EB Garamond.

PowerShell 7 op Windows:

$env:MPINPUTS = "$((Resolve-Path ../fiziko).Path);"
New-Item -ItemType Directory -Force build | Out-Null
$names = @(
'15-fiziko-inclined-plane',
'16-fiziko-telescope-plate',
'17-fiziko-terrestrial-globe',
'18-fiziko-mechanics-primer',
'19-fiziko-knots-plate',
'20-fiziko-phases-of-the-moon'
)
foreach ($name in $names) {
lualatex -interaction=nonstopmode -halt-on-error `
-output-directory=build "examples/$name.tex"
}

POSIX shell op Linux of macOS:

export MPINPUTS="$(cd ../fiziko && pwd):"
mkdir -p build
for name in \
15-fiziko-inclined-plane \
16-fiziko-telescope-plate \
17-fiziko-terrestrial-globe \
18-fiziko-mechanics-primer \
19-fiziko-knots-plate \
20-fiziko-phases-of-the-moon
do
lualatex -interaction=nonstopmode -halt-on-error \
-output-directory=build "examples/$name.tex"
done

Deze pagina's volgen één patroon: \everymplib laadt fiziko.mp, stelt de random seed vast, bepaalt de lijndikte en lichtrichting, en kleurt alle lijnen met de inkkleur van de pagina via drawoptions. Elke figuur is vervolgens een gewone mplibcode omgeving. Labels geschreven tussen btex en etex worden door het document zelf gezet, waardoor ze in EB Garamond en Garamond Math verschijnen in plaats van Computer Modern.

Twee belangrijke valkuilen:

  1. De standaard geschaalde rekenkunde van MetaPost weigert randomseed waarden van 4096 of hoger; de seeds in deze bestanden zijn daarom klein.
  2. Noem een MetaPost-variabele niet floor; dit overschrijft de floor functie, waardoor de houttextuur van fiziko faalt met een "Isolated expression" fout.

Opmerking voor MiKTeX: Het MiKTeX-pakket luamplib (2.42.8, gecontroleerd september 2026) bevat luamplib.sty maar niet de vereiste luamplib.lua module. De oplossing is om beide bestanden te extraheren uit luamplib.dtx via luatex luamplib.dtx en deze samen in een TEXMF root te plaatsen, gevolgd door het verversen van de bestandsnaam-database. TeX Live heeft dit probleem niet.

Correcties uit de designdiscussie

Deze voorbeelden zijn ontwikkeld naar aanleiding van een designdiscussie met Gemini. De nuttige ideeën zijn behouden, maar de samples zijn niet letterlijk gekopieerd:

  • Style=Historic wordt niet gebruikt als algemene schakelaar. Historische ligaturen worden expliciet opgevraagd met Ligatures=Historic.
  • De lange s (ſ) is een orthografisch karakter, geen ligatuur. De bron bevat expliciet ſ in obſerved; de Historic-functie van EB Garamond vervangt de lange s ook in andere contexten.
  • \pagecolor is al onderdeel van xcolor; een aparte pagecolor afhankelijkheid is niet nodig.
  • De discussie gebruikte \caption* zonder een pakket te laden dat dit definieert. De figuren in de MWE gebruiken in plaats daarvan een gewone gecentreerde tekstregel.
  • De random-step decoratie van TikZ is voorzien van een seed, zodat opnieuw compileren de plaat niet anders tekent.

Ontwerpaantekeningen

Dit is een door periodes geïnspireerde visuele behandeling, geen historisch exact facsimile. Echte publicaties uit de zeventiende, negentiende en vroege twintigste eeuw verschillen aanzienlijk per drukker, datum, taal, papier en reproductieproces.

  • Vervang EB Garamond door een ander periodespecifiek OpenType-lettertype zoals IM FELL English of Old Standard wanneer de doelpublicatie daarom vraagt. Controleer de OpenType-functies van het vervangende font.
  • Old-style cijfers zijn een ontwerpkeuze, geen universele historische regel.
  • Warme papierkleuren en verzachte inkt simuleren een gescande of verouderde kopie; een ongerept origineel zou deze kleuren niet noodzakelijkerwijs hebben.
  • Lijnjitter suggereert een handgemaakte plaat, terwijl arcering een reële grafische beperking van monochrome reproductie weerspiegelt. Geen van beide reproduceert op zichzelf een specifiek graveerproces.
  • Elk fiziko-voorbeeld stelt een vaste randomseed in, omdat verschillende texturen van de bibliotheek gebruikmaken van random sampling.
  • De sterposities in voorbeeld 11 zijn afgeronde epoch-2000 coördinaten; de afkoelingswaarden in voorbeeld 13 zijn een formule met een deterministische rimpeling, geen metingen; de lensradii in voorbeeld 16 zijn gekozen voor een leesbare plaat; en de logaritmetabel in voorbeeld 10 is berekend en dus exact.
  • De knoop-routine in fiziko is door de auteur als niet bijzonder stabiel gedocumenteerd. Voorbeeld 19 gebruikt koorden waarvan de kruisingen ruim gescheiden zijn; bij nieuwe knopen moet de sampling-stap of touwdikte mogelijk worden aangepast.
  • Voor toegankelijke output: houd het contrast van de hoofdtekst hoog, behoud alle diagramlabels als tekst en raster de uiteindelijke PDF niet.

Licentie

De broncode, proza en gegenereerde voorbeelden zijn gelicenseerd onder CC BY-SA 4.0. Bij het aanpassen van het project dient u bronvermelding te geven, terug te linken naar de repository, wijzigingen te vermelden en dezelfde licentie te gebruiken voor de aanpassing.

fiziko zelf is niet opgenomen in deze repository. Dit blijft een aparte GPL-3.0 afhankelijkheid onder de voorwaarden gepubliceerd door het upstream-project.