Utensil's Zettelkasten-style forest of evergreen notes on math and tech. utensil.tngl.sh/forest/
0

Configure Feed

Select the types of activity you want to include in your feed.

fix(render): iter 83 — mirror amsfonts/cm/*.pfb into canonical fonts/type1/public/cm/ + rebuild ls-R

Iter 79-82 dig narrowed it to: cmcsc10.pfb + cmti10.pfb DO land in
FOREST_TEXMF, but at fonts/type1/public/amsfonts/cm/ (amsfonts's own
sub-path), not at fonts/type1/public/cm/ which is where kpathsea's
standard CM lookup expects them. dvisvgm therefore can't resolve
cmcsc10 even though the file is on disk.

iter 83:
1. After all packages stage, cp amsfonts/cm/*.pfb into the
canonical cm/ path inside FOREST_TEXMF.
2. Rebuild the kpathsea ls-R cache so the newly-mirrored paths are
indexed (fall back to a manual 'ls -R > ls-R' if mktexlsr isn't
on PATH — texlive.bin.core may or may not surface it).

Iter 82's revert restored the lm-rep redirects in psfonts.map, so
other fonts (cmr10/cmbx10) keep working through their lmr10.pfb
route. cmcsc10/cmti10 fall through the redirect (lm-rep-cmsc.enc
missing), then dvisvgm gets a SECOND chance via the canonical cm/
path which iter 83 now populates.

Refs #2

[AGENT: kael]

+32 -15
+32 -15
.tangled/workflows/render.yml
··· 629 629 # - sfcsc10.pfb (or equivalent Type1) present 630 630 # - psfonts.map maps cmcsc10 -> some PFB path 631 631 # …are confirmed. Print to CI log for evidence. 632 - # iter 79 — narrowed hypothesis: cmcsc10.pfb and cmti10.pfb live in 633 - # the amsfonts package (NOT cm-super). amsfonts is already staged. 634 - # Check directly whether the PFBs landed in FOREST_TEX_DIR. 632 + # iter 83 — make cm*.pfb actually reachable to dvisvgm. Files are 633 + # in FOREST_TEX_DIR (flat) AND FOREST_TEXMF (canonical) per iter 79. 634 + # But amsfonts stages them under fonts/type1/public/amsfonts/cm/ 635 + # while kpathsea's standard CM search expects 636 + # fonts/type1/public/cm/. Mirror them into the canonical cm/ path 637 + # so kpathsea finds them by name. Also rebuild the ls-R cache. 635 638 { 636 - echo "=== iter 79 staging verification ===" 639 + echo "=== iter 83 staging verification ===" 637 640 echo " FOREST_TEX_DIR: $FOREST_TEX_DIR" 638 - echo "--- the 2 PFBs we actually need (per tlpdb: live in amsfonts pkg) ---" 639 - echo " cmcsc10.pfb: $(ls -la "$FOREST_TEX_DIR/cmcsc10.pfb" 2>/dev/null | head -1)" 640 - echo " cmti10.pfb: $(ls -la "$FOREST_TEX_DIR/cmti10.pfb" 2>/dev/null | head -1)" 641 - echo " cmcsc10.tfm: $(ls -la "$FOREST_TEX_DIR/cmcsc10.tfm" 2>/dev/null | head -1)" 642 - echo " cmti10.tfm: $(ls -la "$FOREST_TEX_DIR/cmti10.tfm" 2>/dev/null | head -1)" 643 - echo "--- counts ---" 644 - echo " total .pfb in FOREST_TEX_DIR: $(find "$FOREST_TEX_DIR" -maxdepth 1 -name '*.pfb' 2>/dev/null | wc -l)" 645 - echo " cm*.pfb count: $(find "$FOREST_TEX_DIR" -maxdepth 1 -name 'cm*.pfb' 2>/dev/null | wc -l)" 646 - echo " total .tfm in FOREST_TEX_DIR: $(find "$FOREST_TEX_DIR" -maxdepth 1 -name '*.tfm' 2>/dev/null | wc -l)" 647 - echo "--- first 5 cm*.pfb (if any) ---" 648 - find "$FOREST_TEX_DIR" -maxdepth 1 -name 'cm*.pfb' 2>/dev/null | head -5 641 + echo " FOREST_TEXMF: $FOREST_TEXMF" 642 + echo "--- iter 83 mirror amsfonts/cm/*.pfb -> canonical cm/ path ---" 643 + if [ -d "$FOREST_TEXMF/fonts/type1/public/amsfonts/cm" ]; then 644 + mkdir -p "$FOREST_TEXMF/fonts/type1/public/cm" 645 + cp -n "$FOREST_TEXMF/fonts/type1/public/amsfonts/cm/"*.pfb \ 646 + "$FOREST_TEXMF/fonts/type1/public/cm/" 2>/dev/null || true 647 + echo " /fonts/type1/public/cm/cm*.pfb count after mirror: $(find "$FOREST_TEXMF/fonts/type1/public/cm" -name 'cm*.pfb' 2>/dev/null | wc -l)" 648 + echo " /fonts/type1/public/cm/cmcsc10.pfb: $(ls -la "$FOREST_TEXMF/fonts/type1/public/cm/cmcsc10.pfb" 2>/dev/null | head -1)" 649 + echo " /fonts/type1/public/cm/cmti10.pfb: $(ls -la "$FOREST_TEXMF/fonts/type1/public/cm/cmti10.pfb" 2>/dev/null | head -1)" 650 + else 651 + echo " no amsfonts/cm dir to mirror from" 652 + fi 653 + echo "--- iter 83 rebuild kpathsea ls-R cache ---" 654 + if command -v mktexlsr >/dev/null 2>&1; then 655 + mktexlsr "$FOREST_TEXMF" 2>&1 | head -5 656 + echo " ls-R: $(ls -la "$FOREST_TEXMF/ls-R" 2>/dev/null | head -1)" 657 + echo " ls-R cmcsc10 hit: $(grep -c '^cmcsc10' "$FOREST_TEXMF/ls-R" 2>/dev/null || echo 0)" 658 + else 659 + echo " mktexlsr not in PATH — building ls-R manually" 660 + ( cd "$FOREST_TEXMF" && ls -R > ls-R ) 2>/dev/null 661 + echo " manual ls-R: $(wc -l < "$FOREST_TEXMF/ls-R" 2>/dev/null) lines" 662 + echo " ls-R cmcsc10 hit: $(grep -c '^cmcsc10' "$FOREST_TEXMF/ls-R" 2>/dev/null || echo 0)" 663 + fi 664 + echo "--- sanity carryover (FOREST_TEX_DIR) ---" 665 + echo " cmcsc10.pfb (flat): $(ls -la "$FOREST_TEX_DIR/cmcsc10.pfb" 2>/dev/null | head -1)" 649 666 } | tee /tmp/iter78-staging.log 650 667 651 668 # iter 52b — concatenate all staged .map files into a single