feat(swank-tex): 0.1.0
This commit is contained in:
11 files changed
+303
No files matched your search
@@ -0,0 +1,2 @@
|
|||||||
|
tests/**/out/
|
||||||
|
tests/**/diff/
|
||||||
@@ -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.
|
||||||
@@ -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)
|
||||||
@@ -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 |
@@ -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"]
|
||||||
Reference in new issue
Block a user