Skip to content

Latest commit

 

History

14 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Knowecon Fonts

Brand type family for the Knowecon economics education platform, built by pure assembly: rename + OpenType feature freezing + Unicode subsetting of mature open-source fonts. No outlines are drawn or modified in this repo — every glyph ships exactly as its upstream designed it. Brand personality comes from which fonts we pick, which features we freeze, and how the pieces are combined per script (Latin / CJK / math / symbols).

Knowecon type family specimen

Family Upstream Processing Used for
Knowecon Sans Inter 4.1 subset + feature freeze web UI, data, body text
Knowecon Serif Source Serif 4.005 subset + feature freeze long-form reading
Knowecon Sans SC / Serif SC Source Han Sans / Serif 8105-char subset, chunked woff2 web CJK
Knowecon Math STIX Two Math 2.13 rename only (MATH table intact) XeLaTeX unicode-math
Knowecon Symbols Noto Sans Math 3.000 symbol-range subset web fallback for ∈ ⊂ ∀ …
Knowecon Emoji Noto Emoji 3.002 (mono) rename only LaTeX + web emoji
  • Knowecon Sans — UI and data face, derived from Inter 4.1 (SIL OFL 1.1).
  • Knowecon Serif — lecture-notes companion, derived from Source Serif 4.005 (SIL OFL 1.1, renamed per the "Source" reserved font name). Slashed zero frozen; figures stay proportional in prose, tables opt in via font-variant-numeric: tabular-nums.
  • Knowecon Sans SC / Serif SC — CJK web companions, derived from Source Han Sans 2.005 / Source Han Serif 2.003. Subset to the 8105 General Standard Chinese Characters (通用规范汉字表) + CJK punctuation, split into frequency-ordered woff2 chunks with unicode-range CSS (build/cjk/knowecon-cjk.css), so pages download only the chunks they use. Print/LaTeX keeps using the full upstream Source Han fonts.
  • Knowecon Math — rename-only derivative of STIX Two Math 2.13 (OFL; "STIX Fonts" is a Reserved Font Name, hence the rename). Chosen over Libertinus Math for on-screen clarity: sturdier strokes, larger x-height; Times-lineage forms pair well with lecture PDFs. The OpenType MATH table is preserved untouched. Used via unicode-math in XeLaTeX and available as woff2. Install locally: cp build/KnoweconMath-Regular.otf ~/Library/Fonts/. Web formulas keep KaTeX's default fonts (its layout metrics are hardcoded); see specimen/katex.html for the comparison that decided this.
  • Knowecon Symbols — math/set/logic symbol fallback for the web, subset from Noto Sans Math 3.000 (OFL): arrows, mathematical operators (∈ ⊂ ∪ ∀ ∃ ∇ ≡ ≪ ∼ ∘ ⋅ ∴ ∧ ∨ …), ceiling/floor, misc math A/B, supplemental operators. Served with unicode-range after Knowecon Sans in the font stack, so it only fills codepoints Inter lacks.
  • Knowecon Emoji — rename-only derivative of Noto Emoji 3.002 (OFL, monochrome outline version; "Noto" is a Reserved Font Name). Chosen monochrome deliberately: XeLaTeX cannot render CBDT/COLR color emoji, but outline glyphs work everywhere, and monochrome prints cleanly in lecture notes. LaTeX templates define \emoji{📈} / \emojifont with a Noto fallback. Install locally: cp build/static/KnoweconEmoji-Regular.ttf ~/Library/Fonts/.

Design decisions

Frozen into Knowecon Sans as defaults (no CSS feature flags needed):

  • Slashed zero + disambiguation (ss02): 0/O, 1/l/I are unambiguous — critical for statistics and code.
  • Open digits (ss01): more open 6/9 apertures, better small-size legibility for data.
  • Tabular figures (tnum): all digits share one width, so financial tables align by default.

Character set (Sans/Serif): Basic Latin, Latin-1, Latin Extended-A, Greek (Δ Σ π β σ μ …), general punctuation, superscripts/subscripts, currency symbols (¥ $ € £ ₩ ₹ ₽ ₿ …), math operators (± × ÷ − ≤ ≥ ≈ ≠ …), arrows, fractions, circled numbers. The variable woff2 is ~160 KB.

Artifacts

  • build/KnoweconSans[opsz,wght].ttf|.woff2 — variable font (weight 100–900, optical size 14–32)
  • build/KnoweconSans-Italic[opsz,wght].ttf|.woff2 — variable italic
  • build/KnoweconSerif[opsz,wght].ttf|.woff2 — serif variable (weight 200–900, optical size 8–60)
  • build/KnoweconSerif-Italic[opsz,wght].ttf|.woff2 — serif variable italic
  • build/static/ — static TTF instances (Regular / Medium / SemiBold / Bold + italics)
  • build/cjk/ — CJK woff2 chunks + knowecon-cjk.css (Sans SC 400/500/700, Serif SC 400/700)
  • build/KnoweconMath-Regular.otf|.woff2 — math font with MATH table
  • build/KnoweconSymbols-Regular.ttf|.woff2 — math/set/logic web fallback (Noto Sans Math subset)
  • build/KnoweconEmoji[wght].ttf|.woff2 + build/static/KnoweconEmoji-Regular.ttf — monochrome emoji (variable wght 300–700; static for LaTeX)
  • specimen/index.html — web specimen (serve the repo root, e.g. python3 -m http.server, so the CJK css under /fonts/cjk/ resolves)
  • specimen/specimen.png — rendered specimen image

Build

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
# fetch upstream releases into vendor/ (paths expected by scripts/build.py)
curl -sL -o vendor/inter.zip https://github.com/rsms/inter/releases/download/v4.1/Inter-4.1.zip
unzip -o vendor/inter.zip -d vendor/inter
curl -sL -o vendor/source-serif.zip https://github.com/adobe-fonts/source-serif/releases/download/4.005R/source-serif-4.005_Desktop.zip
unzip -o vendor/source-serif.zip -d vendor/source-serif
# CJK sources (Source Han OTFs, release branch) into vendor/source-han/:
#   SourceHanSansSC-{Regular,Medium,Bold}.otf, SourceHanSerifSC-{Regular,Bold}.otf
# Math source: STIX Two 2.13 release unzipped into vendor/stix/
# Symbols source: Noto Sans Math into vendor/noto-sans-math/
# Emoji source: Noto Emoji (variable) into vendor/noto-emoji/
make build cjk math symbols emoji specimen
make qa   # fontbakery universal profile, FAIL-level gate

Charset data in data/ (committed): tgsc-characters.txt (8105 chars, 字序) and tgsc-by-frequency.txt (corpus frequency order used for chunk ordering).

Known accepted fontbakery FAILs: name/family_and_style_max_length (long STAT names inherited from upstream) and serif nested_components (upstream Source Serif composite structure); both are cosmetic here.

Web usage

@font-face {
  font-family: "Knowecon Sans";
  src: url("/fonts/KnoweconSans[opsz,wght].woff2") format("woff2");
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Knowecon Serif";
  src: url("/fonts/KnoweconSerif[opsz,wght].woff2") format("woff2");
  font-weight: 200 900;
  font-style: normal;
  font-display: swap;
}
/* symbol fallback: only downloaded/used for codepoints Inter lacks */
@font-face {
  font-family: "Knowecon Symbols";
  src: url("/fonts/KnoweconSymbols-Regular.woff2") format("woff2");
  unicode-range: U+2190-21FF, U+2200-22FF, U+2308-230B, U+27C0-27EF,
    U+2980-29FF, U+2A00-2AFF;
  font-display: swap;
}
:root {
  --font-sans: "Knowecon Sans", "Knowecon Symbols", ui-sans-serif, system-ui,
    "PingFang SC", "Noto Sans SC", sans-serif;
  --font-serif: "Knowecon Serif", "Knowecon Symbols", ui-serif, Georgia,
    "Songti SC", serif;
}

History

  • v1: rename + feature freeze + subset pipeline, variable + static builds, specimen.
  • v2–v6: an experiment in custom glyph redraws (geometric operator suite, from-scratch display capitals). Retired — self-drawn outlines could not match upstream production quality (broken joints, inconsistent rendering).
  • v1.2/current: back to pure assembly. Sans/Serif ship untouched Inter / Source Serif outlines; math is a rename-only STIX Two Math; symbol coverage gaps are filled by a Noto Sans Math subset (Knowecon Symbols) instead of drawing anything ourselves.

Repo layout

  • scripts/ — the whole pipeline: build.py (Sans/Serif), build_cjk.py, build_math.py, build_symbols.py, build_emoji.py, specimen renderers.
  • build/ — committed artifacts (fonts are the deliverable; rebuilding requires multi-GB upstream downloads, so outputs are versioned).
  • data/ — 通用规范汉字表 charset + frequency order for CJK chunking.
  • specimen/ — HTML specimens and rendered PNGs.
  • vendor/, .venv/ — not committed; populated per the Build section.

Deployment: the Knowecon website vendors the woff2 files under priv/static/fonts/ in the main app repo; LaTeX templates use the static TTF/OTF installs from build/static/.

License

Dual structure:

  • Fonts (build/, fonts/, data/): SIL Open Font License 1.1. All upstreams are OFL 1.1; OFL condition 5 requires derivatives to stay OFL, so the Knowecon families are OFL too. In practice this is as permissive as MIT for users — free commercial use, embedding, bundling, and redistribution — with two extra rules: font files may not be sold by themselves, and derivatives may not reuse upstream Reserved Font Names ("Source", "TM Math", "Noto"), which we satisfy by renaming. Every binary keeps the upstream copyright and OFL notice in its name table (IDs 0/13/14) and credits the exact upstream version in its version string.
  • Build scripts (scripts/): MIT — our own code, reusable without OFL obligations.

Documents and products typeset or rendered with these fonts are not affected by the OFL (explicitly exempted by the license).

About

Knowecon brand type family: pure-assembly derivatives of Inter, Source Serif, Source Han, STIX Two Math, Noto (OFL 1.1)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages