65 lines
2.0 KiB
Typst
65 lines
2.0 KiB
Typst
/// Provides typographically correct TeX-family logos for Typst. Based on the
|
|
/// LaTeX metalogo package by Andrew Gilbert Moschou.
|
|
///
|
|
/// # Example
|
|
/// ```typ
|
|
/// #import "@preview/swank-tex:<version>": *
|
|
/// The #TeX typesetting system, along with #LaTeX and #XeTeX.
|
|
/// ```
|
|
|
|
#let (TeX, LaTeX, LaTeX2E, XeTeX, XeLaTeX, LuaTeX, LuaLaTeX, pdfTeX) = {
|
|
// kerning values between pairs
|
|
let kern = (
|
|
"Te": h(-0.165em), // Knuth says: -0.1667em
|
|
"eX": h(-0.122em), // Knuth says: -0.125em
|
|
"La": h(-0.361em),
|
|
"aT": h(-0.147em),
|
|
"X2": h( 0.150em),
|
|
"twoE": h( 0.133em),
|
|
"Xe": h(-0.122em), // mirrors "eX"
|
|
"eT": h(-0.165em), // mirrors "Te"
|
|
"eL": h(-0.124em),
|
|
"LuaT": h( 0.005em), // questionable, but matches metalogo output
|
|
"LuaL": h( 0.005em), // questionable, but matches metalogo output
|
|
)
|
|
|
|
// vertical translation for certain characters
|
|
let drop = (
|
|
"E": 0.220em,
|
|
"A": -0.178em,
|
|
"e": -0.104em,
|
|
)
|
|
|
|
// resize certain characters
|
|
let sized = (
|
|
"A": text(size: 0.7em, "A"),
|
|
"e": text(size: 1.66em, sym.epsilon),
|
|
)
|
|
|
|
// helper functions
|
|
let ncm(content) = text(font: "New Computer Modern", content)
|
|
|
|
// components (used in logos below)
|
|
let E = box(move(dy: drop.E, "E"))
|
|
let A = box(move(dy: drop.A, sized.A))
|
|
let e = box(move(dy: drop.e, rotate(12deg, sized.e)))
|
|
let Erev = box(scale(x: -100%, E))
|
|
let Xe = box[X#kern.Xe#Erev]
|
|
|
|
// logos which are also components
|
|
let TeX = ncm(box[T#kern.Te#E#kern.eX#[X]])
|
|
let LaTeX = ncm(box[L#kern.La#A#kern.aT#TeX])
|
|
|
|
// return logos
|
|
(
|
|
TeX,
|
|
LaTeX,
|
|
ncm(box[#LaTeX#kern.X2#[2]#sub[#kern.twoE#e]]), // LaTeX2E
|
|
ncm(box[#Xe#kern.eT#TeX]), // XeTeX
|
|
ncm(box[#Xe#kern.eL#LaTeX]), // XeLaTeX
|
|
ncm(box[Lua#kern.LuaT#TeX]), // LuaTeX
|
|
ncm(box[Lua#kern.LuaL#LaTeX]), // LuaLaTeX
|
|
ncm(box[pdf#TeX]), // pdfTeX
|
|
)
|
|
}
|