Repository navigation
Releases
v0.275.0
What's Changed
- Stamp a formula with the source line it opened on by @tannevaled in #750
Full Changelog: v0.274.0...v0.275.0
v0.274.0
What's Changed
- toc: an unnumbered section added by hand is in the contents, flush left by @tannevaled in #746
- leaders: dots sit on the enclosing box's grid, centred in their tile by @tannevaled in #747
- The paragraph after a heading is not indented, as @afterheading has it by @tannevaled in #749
- \addvspace takes the maximum against the skip already on the list by @tannevaled in #748
Full Changelog: v0.273.0...v0.274.0
v0.273.0
What's Changed
- The default text face is Latin Modern, as tectonic's by @tannevaled in #744
- The default maths face is Latin Modern Math, as tectonic's by @tannevaled in #745
Full Changelog: v0.272.0...v0.273.0
v0.272.0
What's Changed
- README: the size ladder, the kerning, and that the real natbib runs by @tannevaled in #720
- A page style keeps its own name, so \pagestyle{headings} gets its head by @tannevaled in #726
- the running mark pair lives under the name the classes write, @theMark by @tannevaled in #728
- marks travel with page breaking: \mark, \topmark, \firstmark, \botmark by @tannevaled in #729
- README: the running head, and the stub that survived three correct fixes by @tannevaled in #734
- ask the FONT whether it can set a ligature, not its cmap (#723) by @tannevaled in #730
- the interword space is the font's own advance, and the gap rule is too (#722) by @tannevaled in #731
- latex: \allowbreak is defined in text mode, as the kernel defines it by @tannevaled in #738
- url.sty's \path holds outside a tikzpicture, even after tikz by @tannevaled in #739
- babel: the french option sets its captions and its high-punctuation spacing by @tannevaled in #740
Full Changelog: v0.271.0...v0.272.0
v0.271.0
Twelve changes since v0.270.0. The theme is font sizes: the whole LaTeX size ladder now agrees with tectonic, and a class's base size is the one its .clo states.
⛔ Breaking
NewOpenTypeFont(fontBytes []byte, sizePt float64) — the size argument was an int. A font size is a dimension: size10.clo states ten sizes and three of them are not whole (\Large 14.4, \LARGE 17.28, \huge 20.74), so an integer truncated them on the way in. Callers passing a literal need no change; callers passing an int variable need a float64(...).
Font sizes now match the oracle
#718 — the face carried its size as an int, so \Large landed on 14 instead of 14.4: 2.8% narrow on every section heading in every document. Reading each line's Tf out of the PDF of a 10pt article:
| before | after | tectonic |
|
|---|---|---|---|
\Large |
13.95 | 14.35 | 14.35 |
\LARGE |
17 | 17.22 | 17.22 |
\huge |
21 | 20.66 | 20.66 |
\Huge |
25 | 24.79 | 24.79 |
All ten entries agree now; the six that already did are unchanged. Built on go-opentype/opentype v0.17.1's NewFaceAt, added for this caller.
#719 — an [11pt] class set its body at 11pt. size11.clo states \normalsize as \@xipt, which is 10.95; the kernel constant was already right and the class base table contradicted it. Its whole ladder was 0.46% large. All six sizes, and the folio, now match tectonic.
#714 — \rm, \bf, \it, \tt, \sf change the family, not the size, but each was bound to a face built once at the document's base size, so selecting one undid any size switch before it. LaTeX's own \section is {\normalfont\Large\bfseries} — size first, series last — so every section heading in every document came out at body size.
Kerning
#715 — brings in go-opentype v0.18.0, where GPOS kern lookups accumulate instead of stopping at the first that covers a pair. Libertinus Serif files A/V with 0 in its first kern lookup and −112 in a later one, so every AV in that family was 1.12pt too wide at 10pt: \hbox{AV} measured 13.47pt against XeTeX's 12.35pt, and now measures 12.35pt.
Packages can talk to themselves across passes
#712 — \@auxout was \def\@auxout{-1}, a number no \openout ever opens, so everything a package wrote to the .aux went nowhere. It is a real stream now, carried from one pass to the next beside the label tables.
What that unlocks: the genuine natbib.sty runs. On \citep/\citet in authoryear mode it now produces, word for word, what tectonic produces, with no undefined commands skipped. See #703 for what remains — reaching the package file, not running it.
Page breaking and vertical spacing
- #701 — a forced break does not get to choose on a page that is already overfull.
- #702 —
\splitmaxdepthand\boxmaxdepthare\maxdimen, not zero (ltplain.dtx:872-873). - #706 —
\vspace*restores\prevdepth, worth one\baselineskipevery time (latex.ltx:6586). - #707 — the
\vsizefallback counted itself.
Headings and contents
- #708 —
\let\sectionmark\@gobblecopied an undefined meaning, because\@gobblelives in a later layer, so every numbered heading set its own title twice. - #710 — a contents entry keeps the macros its title was written with:
\'esurvives into the contents list instead of arriving as two glyphs.
Corpus
154 arXiv papers against tectonic: Σ|·| 272, bias −12, 47 exact.
Worth stating plainly for anyone reading that number against the work above: most of this release is invisible to it. The page metric compares page counts, and a kern or a heading a third of a point wider only costs a page when it tips one. hashdiff put the real reach of #718 at 124 of 154 papers rendering differently, every one at the same page count. The argument for these changes is the oracle comparison, not Σ. See #716.
🤖 Generated with Claude Code
v0.270.0
What's Changed
- README: \showthe's own stream, and the page's glue by @tannevaled in #692
- a page is full when its excess beats its SHRINK, not when it passes \vsize by @tannevaled in #693
- an infinitely bad page costs
deplorable, and a penalty does not buy it back by @tannevaled in #694 - the breakpoint test and the height test must agree about what a box is by @tannevaled in #696
- page one starts at its first box, like every other page by @tannevaled in #698
Full Changelog: v0.269.0...v0.270.0
v0.269.0
What's Changed
- \showthe prints what \the would give, on a stream of its own by @tannevaled in #689
Full Changelog: v0.268.0...v0.269.0
v0.268.0
What's Changed
- the page's badness is TeX's: a function of its glue, not of two heights by @tannevaled in #688
Full Changelog: v0.267.0...v0.268.0
v0.267.0
What's Changed
- a display chooses between the long and the SHORT skips, as tex.web:22580 does by @tannevaled in #684
Full Changelog: v0.266.0...v0.267.0
v0.266.0
What's Changed
- @biblabel and @cite are macros the citation path calls, not brackets built in Go by @tannevaled in #682
Full Changelog: v0.265.0...v0.266.0