feat(swank-tex): 0.1.0

This commit is contained in:
swaits committed 2024-12-01 03:08:26 +01:00
1 parent 5ffe887dec
commit 39d15ccdb5
11 files changed
+303

No files matched your search

+2
View File
@@ -0,0 +1,2 @@
tests/**/out/
tests/**/diff/
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2024 Stephen Waits <steve@waits.net>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+66
View File
@@ -0,0 +1,66 @@
# swank-tex
Typographically correct TeX-family logos for Typst. This package provides
high-quality, properly kerned and positioned logos for TeX, LaTeX, XeTeX, and
related systems, based on the LaTeX metalogo package by Andrew Gilbert Moschou.
## Installation
Add this package to your Typst project:
```typst
#import "@preview/swank-tex:0.1.0": *
```
## Usage
The package provides the following logos as functions:
- `TeX`
- `LaTeX`
- `LaTeX2E`
- `XeTeX`
- `XeLaTeX`
- `LuaTeX`
- `LuaLaTeX`
- `pdfTeX`
Simply call these functions in your document:
```typst
#import "@preview/swank-tex:0.1.0": *
The #TeX typesetting system was created by Donald Knuth.
#LaTeX, created by Leslie Lamport, builds on top of #TeX.
Modern engines like #XeTeX and #LuaTeX extend these capabilities.
```
## Features
- Precise kerning between character pairs based on metalogo's output
- Proper vertical positioning of characters
- Correct scaling of special characters (e.g., the A in LaTeX)
- Uses New Computer Modern font for authentic appearance
- Pixel-matched to the well-established LaTeX metalogo package
## License
Licensed under the [MIT license](LICENSE).
## Acknowledgments
- Based on the LaTeX metalogo package by Andrew Gilbert Moschou
- Inspired by Donald Knuth's original TeX logo specifications
- Thanks to the Typst team for their excellent typesetting system
## Contributing
Contributions are welcome. Please feel free to submit a PR.
## Version History
- 0.1.0: Initial release
- Basic implementation of all TeX-family logos
- Proper kerning and positioning
- Documentation and examples (see tests)
+64
View File
@@ -0,0 +1,64 @@
/// 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
)
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 786 KiB

@@ -0,0 +1,124 @@
#import "/lib.typ": *
#import "@preview/codly:1.0.0": *
#import "@preview/codly-languages:0.1.1": *
#show: codly-init
#codly(languages: codly-languages)
#set page(paper: "us-letter", margin: 0.75in)
#set par(justify: true)
#set text(size: 11pt)
= A Brief History of #TeX and its Descendants
#v(1.5em)
#columns(2)[
== The core system
#TeX (1978) forms the foundation - Donald Knuth's low-level typesetting engine
that handles the core mathematics of digital typography. Think of it as assembly
language for documents. Example:
```tex
\hbox{\bf\tenpoint Introduction}
\vskip 12pt
```
== Introducing usability
#LaTeX (1984) is Leslie Lamport's layer over #TeX that introduces logical
markup, making document creation more intuitive:
```latex
\section{Introduction}
```
== Standardization and packages
#LaTeX2E (1994) standardized #LaTeX, adding robust package management and fixing
incompatibilities between different #LaTeX styles.
== PDF integration
#pdfTeX (1996) added direct PDF output, with font embedding, microtypography
features like margin kerning and font expansion, and PDF-specific features
like hyperlinks and tables of contents. It became the default #TeX engine for
most #LaTeX installations:
```tex
\pdfoutput=1
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\pdfmapline{ptmr8r Times-Roman 2 <8r.enc}
\font\tenrm=ptmr8r
\tenrm
Welcome to pdf\TeX!
\end
```
== Modern fonts and scripting
Two modern branches evolved to handle Unicode and modern fonts:
#XeTeX (2004): A #TeX engine supporting Unicode and modern fonts.
#XeLaTeX enables commands like:
```latex
\usepackage{fontspec}
\setmainfont{Helvetica Neue}
```
#LuaTeX (2007): #TeX engine with embedded Lua scripting.
#LuaLaTeX allows direct programming:
```latex
\directlua{
local x = 1 + 1
tex.print(x)
}
```
== Typical use
Modern workflows typically use #XeLaTeX for straightforward Unicode documents
and #LuaLaTeX when document generation requires programming logic. Both are
vast improvements over the original #TeX:
Original #TeX:
```tex
\font\x="Times New Roman" at 12pt
\x Hello, 世界
```
#XeLaTeX/#LuaLaTeX:
```latex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Times New Roman}
\begin{document}
Hello, 世界
\end{document}
```
== The Modern alternative: Typst
Typst (2023) is a modern competitor to the #TeX family, designed from scratch
with a focus on speed and intuitive syntax:
```typst
= Fibonacci sequence
The Fibonacci sequence is defined by
$F_n = F_(n-1) + F_(n-2)$.
#let fib(n) = (
if n <= 2 { 1 }
else { fib(n - 1) + fib(n - 2) }
)
The 8th Fibonacci number is #fib(8).
```
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 KiB

@@ -0,0 +1,15 @@
#import "/lib.typ": *
#set page(height: auto)
#image("logos.png")
#set text(font: "New Computer Modern", size: 104pt, fill: rgb(255,0,0,64), stroke: 0.1pt+red)
#move(dx: 0.094in, dy: -13.560in, TeX)
#move(dx: 0.095in, dy: -14.544in, LaTeX)
#move(dx: 0.095in, dy: -15.524in, LaTeX2E)
#move(dx: 0.095in, dy: -16.507in, XeTeX)
#move(dx: 0.095in, dy: -17.492in, XeLaTeX)
#move(dx: 0.095in, dy: -18.475in, LuaTeX)
#move(dx: 0.095in, dy: -19.457in, LuaLaTeX)
Binary file not shown.

After

Width:  |  Height:  |  Size: 786 KiB

+11
View File
@@ -0,0 +1,11 @@
[package]
name = "swank-tex"
version = "0.1.0"
entrypoint = "lib.typ"
authors = ["Stephen Waits <steve@waits.net>"]
license = "MIT"
description = "Render those funky logos for TeX, LaTeX, and friends."
categories = ["utility"]
keywords = ["tex", "latex", "luatex", "xetex", "lualatex", "xelatex", "logo"]
repository = "https://github.com/swaits/typst-collection"
exclude = ["thumbnail.png", "tests"]