diff options
author | Norbert Preining <norbert@preining.info> | 2024-04-29 03:01:23 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-04-29 03:01:23 +0000 |
commit | 9ffa8712668c5055c54742499d06caeb5cc9c87b (patch) | |
tree | d8b15c754d8d510751d6734b5f6028a2ba3cec89 /fonts/ruscap | |
parent | 6ed42a56797a9b75307dcebfd82f2d69767e1b97 (diff) |
CTAN sync 202404290301
Diffstat (limited to 'fonts/ruscap')
-rw-r--r-- | fonts/ruscap/LICENSE | 93 | ||||
-rw-r--r-- | fonts/ruscap/README.md | 39 | ||||
-rw-r--r-- | fonts/ruscap/quo-usque-tandem.pdf | bin | 0 -> 9305 bytes | |||
-rw-r--r-- | fonts/ruscap/quo-usque-tandem.tex | 25 | ||||
-rw-r--r-- | fonts/ruscap/ruscap10.mf | 386 |
5 files changed, 543 insertions, 0 deletions
diff --git a/fonts/ruscap/LICENSE b/fonts/ruscap/LICENSE new file mode 100644 index 0000000000..07e96fdc5e --- /dev/null +++ b/fonts/ruscap/LICENSE @@ -0,0 +1,93 @@ +Copyright (c) 2024, Victor Sannier, with Reserved Font Name ruscap. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/fonts/ruscap/README.md b/fonts/ruscap/README.md new file mode 100644 index 0000000000..202966c909 --- /dev/null +++ b/fonts/ruscap/README.md @@ -0,0 +1,39 @@ +This package contains the source for ruscap: a font for rustic capitals +---an ancient Roman calligraphic script--- created with Metafont. + +The current version of ruscap is 1.0, released on 28 April 2024. + +# Characters included + +For the moment, only the letters of the Vergilius Vaticanus manuscript +(i.e., Roman and Greek letters) are included. +In particular, ruscap does not contain the Ramist letters J and U, +indo-arabic numerals and punctuation marks. + +# Minimal Working Example + +```tex +\documentclass{article} +\font\ruscap=ruscap10 at 14pt + +\begin{document} + {\ruscap SALVETE OMNES} +\end{document} +``` + +# Design + +For more information on the design of this font, +please visit the following links: + +* <https://www.tug.org/TUGboat/tb44-2/tb137sannier-rustic.pdf> +* <https://tug.org/tug2023/files/sa-12-sannier-rustic/sannier-rustic-slides.pdf> +* <https://www.youtube.com/watch?v=A56GHVJGJo0> + +# License + +Copyright (c) 2024, Victor Sannier, with Reserved Font Name ruscap. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is available with a FAQ at: https://openfontlicense.org + diff --git a/fonts/ruscap/quo-usque-tandem.pdf b/fonts/ruscap/quo-usque-tandem.pdf Binary files differnew file mode 100644 index 0000000000..33cec7e3c9 --- /dev/null +++ b/fonts/ruscap/quo-usque-tandem.pdf diff --git a/fonts/ruscap/quo-usque-tandem.tex b/fonts/ruscap/quo-usque-tandem.tex new file mode 100644 index 0000000000..748e7b3d49 --- /dev/null +++ b/fonts/ruscap/quo-usque-tandem.tex @@ -0,0 +1,25 @@ +\documentclass{article} +\usepackage[dvipsnames]{xcolor} + +\font\ruscap=ruscap10 at 14pt + +\begin{document} +\pagestyle{empty} +\ruscap +\setlength\baselineskip{1.5ex} +\setlength\lineskiplimit{-\maxdimen} + +\noindent +\textcolor{Sepia}{QVO VSQVE TANDEM} ABVTERE, CATILINA, PATIENTIA NOSTRA? +QVAM DIV ETIAM FVROR ISTE TVVS NOS ELVDET? +QVEM AD FINEM SESE EFFRENATA IACTABIT AVDACIA? +NIHIL NE TE NOCTVRNVM PRAESIDIVM PALATI, NIHIL VRBIS VIGILIAE, +NIHIL TIMOR POPVLI, NIHIL CONCVRSVS BONORVM OMNIVM, +NIHIL HIC MVNITISSIMVS HABENDI SENATVS LOCVS, +NIHIL HORVM ORA VOLTVSQVE MOVERVNT? +PATERE TVA CONSILIA NON SENTIS, +CONSTRICTAM IAM HORVM OMNIVM SCIENTIA TENERI CONIVRATIONEM TVAM NON VIDES? +QVID PROXIMA, QVID SVPERIORE NOCTE EGERIS, VBI FVERIS, QVOS CONVOCAVERIS, +QVID CONSILII CEPERIS, QVEM NOSTRVM IGNORARE ARBITRARIS? +\end{document} + diff --git a/fonts/ruscap/ruscap10.mf b/fonts/ruscap/ruscap10.mf new file mode 100644 index 0000000000..7f9dcbc4c7 --- /dev/null +++ b/fonts/ruscap/ruscap10.mf @@ -0,0 +1,386 @@ +% ruscap10.mf +% Version 1.0 +% Copyright (c) 2024, Victor Sannier with Reserved Font Name ruscap. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. + +font_size 10pt#; +font_quad 13pt#; + +u# := 10/12 pt#; % unit +s# := 2/3 u#; % sidebearing +o# := 1/4 u#; % overshoot + +% Heights +cap_height# := 9 u#; +asc_height# := 11 u#; +desc_height# := 1 u#; +crossbar_height# := 5 u#; + +diag_angle := 90 + 35; +spur_width# := 1/2 u#; +spur_angle := 35; + +% Pen +thick# := 5/4 u#; +thin# := 1/3 u#; +pen_angle := 65; + +% Serif +serif_width# := 5/2 u#; +serif_angle := 90 / 6; + +mode_setup; + +o_width# := 6u#; +e# := 1/3 u#; + +define_pixels(u, s); +define_whole_pixels(serif_width, spur_width, o_width); +define_whole_vertical_pixels(cap_height, asc_height, desc_height); +define_blacker_pixels(thick, thin); +define_good_y_pixels(crossbar_height); +define_corrected_pixels(o, e); + +pickup pensquare xscaled thick yscaled thin rotated pen_angle; +rustic_pen := savepen; + +font_slant 0; +font_normal_space 3/4 o_width#; +font_normal_stretch 1/3 o_width#; +font_normal_shrink 1/2 o_width#; +font_x_height cap_height#; + +% Macros + +def draw_serif(suffix i, j)(expr width) = + rt x.j - lft x.i = width; y.i = y.j; + draw z.i{dir serif_angle} .. {dir serif_angle}z.j; +enddef; + +def draw_diag_stroke(suffix i, j)(expr angle) = + z.i - z.i.l = z.j.r - z.j = spur_width * dir spur_angle; + z.j - z.i = whatever * (dir angle); + draw z.i.l .. z.i .. tension 3 .. z.j .. z.j.r; +enddef; + +def draw_I(suffix i, j, k, l)(expr sw) = + x.i = x.j; % vertical stem + top y.i = h + o; bot y.j = 0; + z.i - z.i.l + = spur_width * dir spur_angle; + + % Serif + rt (2 x.j - x.k) - lft x.k = serif_width; + y.j = y.k; + draw_serif(k, l)(sw); + + draw z.i.l .. z.i .. tension 5 .. z.j; +enddef; + +def draw_P(suffix i, j, k, l, m)(expr w) = + lft x.k = s; + draw_I(i, j, k, l)(serif_width); + rt x.m = w - s; + y.m = crossbar_height + 1/2 (cap_height - crossbar_height); + draw z.i{right} .. z.m .. {left}(x.i + e, crossbar_height); +enddef; + +% Characters + +beginchar("A", 8u# + 2u#, cap_height#, 0); + "Rustic A"; + pickup rustic_pen; + + top y1 = h + o; bot y2 = -o; rt x2.r = w - s; + draw_diag_stroke(1, 2)(diag_angle); + + lft x5 = s; bot y5 = 0; + z3 = 1/5 [z1, z2]; + z4 = 1/2 [z5, z6]; + draw_serif(5, 6)(serif_width); + draw z3 .. z4; + + labels(range 1 thru 6); + labels(1.l, 2.r); +endchar; + +beginchar("B", 5u# + 2s#, cap_height#, 0); + "Rustic B"; + pickup rustic_pen; + draw_P(1, 2, 3, 4, 5)(5u); + rt x6 = w - s; y6 = crossbar_height / 2; + draw (x1, crossbar_height){right} .. z6 .. {left}z4; + labels(range 1 thru 6); +endchar; + +beginchar("C", 5u# + 2s#, cap_height#, 0); + "Rustic C"; + pickup rustic_pen; + rt x1 = w - s; y1 = (crossbar_height + cap_height) / 2; + x2 = w / 2; top y2 = h + o; + lft x3 = s; y3 = cap_height - crossbar_height; + x4 = w / 2; bot y4 = 0; + rt x5 = w - s; bot y5 = 0; + draw z1 .. z2 .. z3.. z4 .. {right}z5; + labels(range 1 thru 5); +endchar; + +beginchar("D", 5u# + 2s#, cap_height#, 0); + "Rustic D"; + pickup rustic_pen; + lft x3 = s; + draw_I(1, 2, 3, 4)(serif_width); + rt x5 = w - s; y5 = crossbar_height; + draw z1{right} .. z5 .. {left}z4; + labels(range 1 thru 5); +endchar; + +def draw_EF = + pickup rustic_pen; + % Top stroke + lft x1 = s; top y1 = h; + rt x2 = w - s; top y2 = h; + draw z1{dir serif_angle} .. {dir serif_angle}z2; + % Down stroke + rt (2 x5 - x1) - lft x1 = serif_width; + x6 = x5; top y5 = h; bot y6 = 0; + draw z5 .. z6; + % Bottom stroke + lft x3 = s; bot y3 = 0; bot y4 = 0; + draw z3{dir serif_angle} .. {dir serif_angle}z4; + % Middle stroke + z7 = (x5, crossbar_height); z8 = (x2, crossbar_height); + draw z7 .. z8; + labels(range 1 thru 8); +enddef; + +beginchar("E", 3.5u# + 2s#, cap_height#, 0); + "Rustic E"; + x4 = x2; + draw_EF; +endchar; + +beginchar("F", 4u# + 2s#, asc_height#, 0); + "Rustic F"; + x6 = (x3 + x4) / 2; + draw_EF; +endchar; + +beginchar("G", 5u# + 2s#, cap_height#, 0); + "Rustic G"; + pickup rustic_pen; + rt x1 = w - s; y1 = (crossbar_height + cap_height) / 2; + x2 = w / 2; top y2 = h + o; + lft x3 = s; y3 = cap_height - crossbar_height; + x4 = w / 2; bot y4 = -o; + rt x5 = w - s; y5 = cap_height - crossbar_height; + draw z1 .. z2 .. z3.. z4 .. z5; + labels(range 1 thru 5); +endchar; + +beginchar("H", 7u# + 2s#, cap_height#, 0); + "Rustic H"; + pickup rustic_pen; + lft x9 = s; y9 = crossbar_height; + x1 - x9 = u; + draw_I(1, 2, 3, 4)(serif_width); + rt x8 = w - s; + draw_I(5, 6, 7, 8)(serif_width); + draw z9 .. (x5, crossbar_height); + labels(range 1 thru 9); +endchar; + +beginchar("I", serif_width# + 2s#, cap_height#, 0); + "Rustic I"; + pickup rustic_pen; + lft x3 = s; + draw_I(1, 2, 3, 4)(serif_width); + labels(range 1 thru 4); +endchar; + +beginchar("K", 7u# + 2s#, cap_height#, 0); + "Rustic K"; + pickup rustic_pen; + lft x3 = s; + draw_I(1, 2, 3, 4)(serif_width); + x5 = x6 - 2u; top y5 = h + o; + rt x6 = w - s; bot y6 = 0; + draw (x1 + e, crossbar_height) .. {dir pen_angle}z5; + draw (x1 + e, crossbar_height) .. tension 2 .. z6 - (u, 0) .. z6; + labels(range 1 thru 6); +endchar; + +beginchar("L", 5u# + 2s#, asc_height#, 0); + "Rustic L"; + pickup rustic_pen; + lft x3 = s; + draw_I(1, 2, 3, 4)(w - 2s); + labels(range 1 thru 4); + labels(1.l); +endchar; + +beginchar("M", 11u# + 2s#, cap_height#, 0); + "Rustic M"; + pickup rustic_pen; + top y1 = h + o; bot y2 = -o; + x1 = x5 + u; + 1/2 (z5.l + z5.r) = z5; lft x5 = s + serif_width/2; + a := (diag_angle - 90) * 3/4 + 90; + draw_diag_stroke(1, 2)(a); + top y3 = h + o; bot y4 = 0; rt x4.r = w - s; + a := (diag_angle - 90) / 3 + 90; + draw_diag_stroke(3, 4)(a); + + % Left stem + bot y5 = 0; + draw z1 .. z5; + draw_serif(5.l, 5.r, serif_width); + % Right stem + draw z3 .. z2.r; + + labels(range 1 thru 5); +endchar; + +beginchar("N", 8u# + 2s#, cap_height#, 0); + "Rustic N"; + pickup rustic_pen; + + % Diagonal stroke + x1 + x2 = w; top y1 = h + o; bot y2 = 0; + draw_diag_stroke(1, 2)(diag_angle); + + % Left stem + bot y3 = 0; lft x3 = s + serif_width/2 - u/3; + draw z1 .. z3; + 1/2 (z3.l + z3.r) = z3; + draw_serif(3.l, 3.r, serif_width); + + % Right stem + x4 = x5 = x2.r; % vertical stem + top y4 = h + o; bot y5 = 0; + z4 - z4.l = spur_width * dir spur_angle; + draw z4.l .. z4 -- z5; + + labels(range 1 thru 5); +endchar; + +beginchar("O", o_width# + 2s#, cap_height#, 0); + "Rustic O"; + pickup rustic_pen; + lft x2 = s; rt x4 = w - s; x1 = x3 = w/2; + top y1 = h + o; bot y3 = -o; y2 = y4 = crossbar_height; + draw z1 .. z2 .. z3 .. z4 .. cycle; + labels(range 1 thru 4); +endchar; + +beginchar("P", 4u# + 2s#, cap_height#, 0); + "Rustic P"; + pickup rustic_pen; + draw_P(1, 2, 3, 4, 5)(w); + labels(range 1 thru 5); +endchar; + +beginchar("Q", 6u# + 2s#, cap_height#, u#); + "Rustic Q"; + pickup rustic_pen; + lft x2 = s; rt x4 = o_width + s; x1 = x3 = (o_width + 2s)/2; + top y1 = h + o; bot y3 = -o; y2 = y4 = crossbar_height; + rt x5 = w - s; bot y5 = -d; + draw z3{curl 3} .. z4 .. z1 .. z2 .. z3 .. {down}z5; + labels(range 1 thru 5); +endchar; + +beginchar("R", 7u# + 2s#, cap_height#, 0); + "Rustic P"; + pickup rustic_pen; + draw_P(1, 2, 3, 4, 5)(5u); + rt x6 = w - s; bot y6 = 0; + draw (x1 + u, crossbar_height) .. tension 2 .. z6 - (u, 0) .. z6; + labels(range 1 thru 6); +endchar; + +beginchar("S", 4u# + 2s#, cap_height#, 0); + "Rustic S"; + pickup rustic_pen; + lft x2 = s; x2 = x4; + rt x1 = w - s; x1 = x3; + top y1 = h - 3/2 u; bot y4 = u/2; + h - y2 = y3; z2 - z3 = whatever * dir diag_angle; + draw z1{curl 2} .. z2 .. z3 .. {curl 1}z4; + labels(range 1 thru 4); +endchar; + +beginchar("T", 6u# + 2s#, cap_height#, 0); + "Rustic T"; + pickup rustic_pen; + x1 = w - x2; top y1 = h; + draw_serif(1, 2)(w - 2s); + x3 = w - x4; bot y3 = 0; + draw_serif(3, 4)(serif_width); + draw 1/2 [z1, z2] .. 1/2 [z3, z4]; + labels(range 1 thru 4); +endchar; + +beginchar("V", 6u# + 2s#, cap_height#, 1/2 u#); + "Rustic V"; + pickup rustic_pen; + lft x1 = s + spur_width; rt x3 = rt x4 = rt x5 = w - s - u/2; + top y1 = h + o; bot y3 = u; top y4 = h + o; bot y5 = -d; + bot y2 = 0; lft x2 = 5/2 u + s; + draw z1{down} .. z2 .. z3{right}; + z1 - z1.l = spur_width * dir spur_angle; draw z1.l .. z1; % Spur + draw z4{dir -85} .. z5; + labels(range 1 thru 5); +endchar; + +beginchar("X", 7u# + 2s#, cap_height#, 0); + "Rustic X"; + pickup rustic_pen; + top y1 = h + o; bot y2 = 0; rt x2.r = w - s; + draw_diag_stroke(1, 2)(diag_angle); + draw (x1, y2) .. (x2, y1); + labels(range 1 thru 4); +endchar; + +beginchar("Y", 8u# + 2s#, cap_height#, 0); + "Rustic Y"; + pickup rustic_pen; + x2 = x3 = w/2; + lft x1 = s; rt x4 = w - s; + bot y3 = 0; + top y1 = top y4 = h + o; y2 = crossbar_height; + draw z1 .. z2 .. tension 2 .. z3; + draw z4{left} .. z2; + % Serif + 1/2 (z3.l + z3.r) = z3; + draw_serif(3.l, 3.r, serif_width); + labels(range 1 thru 4); +endchar; + +beginchar("Z", 6u# + 2s#, cap_height#, 0); + "Rustic Z"; + pickup rustic_pen; + lft x1 = s; top y1 = h; + draw_serif(1, 2)(w - 2s); + lft x3 = s; bot y3 = 0; + draw_serif(3, 4)(w - 2s); + draw z2 .. z3; + labels(range 1 thru 4); +endchar; + +ligtable "A": "T" kern -1.5u#, "Y" kern -1.5u#; +ligtable "B": "C" kern .5u#, "M" kern -u#; +ligtable "F": "A" kern -.5u#, "M" kern -u#, "T" kern -u#; +ligtable "G": "C" kern .5u#, "Q" kern .5u#, "G" kern .5u#, "O" kern .5u#; +ligtable "K": "C" kern -u#, "G" kern -u#, "T" kern -u#, "Y" kern -u#; +ligtable "L": "T" kern -u#, "Y" kern -2u#; +ligtable "M": "T" kern -u#; +ligtable "O": "M" kern -.5u#; +ligtable "P": "A" kern -.5u#, "M" kern -.5u#; +ligtable "R": "C" kern -.5u#, "O" kern -u#, "T" kern -u#, "Y" kern -1.5u#; +ligtable "T": "A" kern -u#, "H" kern -u#, "M" kern -u#; +ligtable "V": "M" kern -u#; +ligtable "Y": "M" kern -u#; + +end; + |