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):
- Early modern page
- Engraved optics plate
- Hooke apparatus
- Ornamented incipit
- Victorian newspaper
- Natural history catalogue
- Lens rays
- Atwood machine
- Shading atlas
- Table of logarithms
- Circumpolar star chart
- Snow-crystal micrographs
- Cooling curve
- Patent drawing sheet
- Inclined plane
- Telescope plate
- Terrestrial globe
- Mechanics primer
- Knots plate
- 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
fizikoMetaPost-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
pgfplotsgrafiek 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
fizikobinnen 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
fizikoglobe 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
fizikode 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 bibliothekenlindenmayersystems,patterns.meta,calcenshapes.geometric),pgfplots,luacodeenarray. - EB Garamond (het
ebgaramondpakket 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
luamplibpakket, dat MetaPost binnen LuaTeX draait. unicode-mathen hetgaramond-mathpakket, 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:
- De standaard geschaalde rekenkunde van MetaPost weigert
randomseedwaarden van 4096 of hoger; de seeds in deze bestanden zijn daarom klein. - Noem een MetaPost-variabele niet
floor; dit overschrijft defloorfunctie, waardoor de houttextuur vanfizikofaalt 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=Historicwordt niet gebruikt als algemene schakelaar. Historische ligaturen worden expliciet opgevraagd metLigatures=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. \pagecoloris al onderdeel vanxcolor; een apartepagecolorafhankelijkheid 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-stepdecoratie 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 vasterandomseedin, 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
fizikois 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.
Groetjes,