Skip to content

Releases

v0.275.0

Choose a tag to compare

@tannevaled tannevaled released this 10 Nov 15:03
ced5e79

What's Changed

Full Changelog: v0.274.0...v0.275.0

v0.274.0

Choose a tag to compare

@tannevaled tannevaled released this 09 Nov 18:21
df0b248

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

Choose a tag to compare

@tannevaled tannevaled released this 09 Nov 15:47
2084089

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

Choose a tag to compare

@tannevaled tannevaled released this 09 Nov 12:19
bda7c36

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

Choose a tag to compare

@tannevaled tannevaled released this 07 Nov 08:41
46935a2

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 — \splitmaxdepth and \boxmaxdepth are \maxdimen, not zero (ltplain.dtx:872-873).
  • #706 — \vspace* restores \prevdepth, worth one \baselineskip every time (latex.ltx:6586).
  • #707 — the \vsize fallback counted itself.

Headings and contents

  • #708 — \let\sectionmark\@gobble copied an undefined meaning, because \@gobble lives 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: \'e survives 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

Choose a tag to compare

@tannevaled tannevaled released this 05 Nov 15:52
cbdf67d

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

Choose a tag to compare

@tannevaled tannevaled released this 05 Nov 10:46
f1aa1e5

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

Choose a tag to compare

@tannevaled tannevaled released this 05 Nov 10:19
3f3efb8

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

Choose a tag to compare

@tannevaled tannevaled released this 04 Nov 21:55
47aabb0

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

Choose a tag to compare

@tannevaled tannevaled released this 03 Nov 18:45
712e574

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