From 2773132ea593028dafe764f7560fd94ecb827d3d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Wed, 20 Jul 2022 03:00:57 +0000 Subject: CTAN sync 202207200300 --- fonts/yfonts-otf/README.md | 46 ++++++++ fonts/yfonts-otf/doc/Erlkonig.ltx | 122 +++++++++++++++++++ fonts/yfonts-otf/doc/Erlkonig.pdf | Bin 0 -> 79307 bytes fonts/yfonts-otf/doc/yfonts-otf.ltx | 223 +++++++++++++++++++++++++++++++++++ fonts/yfonts-otf/doc/yfonts-otf.pdf | Bin 0 -> 64839 bytes fonts/yfonts-otf/fonts/yfrak.otf | Bin 0 -> 40320 bytes fonts/yfonts-otf/fonts/ygoth.otf | Bin 0 -> 47528 bytes fonts/yfonts-otf/fonts/yswab.otf | Bin 0 -> 37220 bytes fonts/yfonts-otf/tex/oldgerm-otf.sty | 89 ++++++++++++++ 9 files changed, 480 insertions(+) create mode 100644 fonts/yfonts-otf/README.md create mode 100644 fonts/yfonts-otf/doc/Erlkonig.ltx create mode 100644 fonts/yfonts-otf/doc/Erlkonig.pdf create mode 100644 fonts/yfonts-otf/doc/yfonts-otf.ltx create mode 100644 fonts/yfonts-otf/doc/yfonts-otf.pdf create mode 100644 fonts/yfonts-otf/fonts/yfrak.otf create mode 100644 fonts/yfonts-otf/fonts/ygoth.otf create mode 100644 fonts/yfonts-otf/fonts/yswab.otf create mode 100644 fonts/yfonts-otf/tex/oldgerm-otf.sty (limited to 'fonts/yfonts-otf') diff --git a/fonts/yfonts-otf/README.md b/fonts/yfonts-otf/README.md new file mode 100644 index 0000000000..000b145d77 --- /dev/null +++ b/fonts/yfonts-otf/README.md @@ -0,0 +1,46 @@ +yfonts-otf package +================== + +## Description + +This bundle provides OpenType versions of the Old German fonts `yfrak’, +`ygoth’ and `yswab’ designed by Yannis Haralambous in Metafont (1990). + +## Contents + +* yfrak.otf, ygoth.otf, yswab.otf: the three OpenType fonts +* oldgerm-otf.sty LaTeX style file defining the three font families +* yfonts-otf.pdf Documentation in PDF format +* yfonts-otf.ltx LaTeX source of yfonts-otf.pdf +* Erlkonig.pdf Example: Goethe's poem typeset with these fonts +* Erlkonig.ltx LaTeX source of Erlkonig.pdf +* README.md (this file) + +## Installation + +This package is meant to be installed automatically by TeXLive, MikTeX, etc. +Otherwise, the package can be installed under TEXMFHOME or TEXMFLOCAL, f.i. +yfonts-otf in directory texmf-local/fonts/opentype/public/yfonts-otf/ +and oldgerm-otf.sty in directory texmf-local/tex/latex/yfonts-otf/. +Documentation files and their sources can go to directory +texmf-local/doc/fonts/public/yfonts-otf/ + +Don't forget to rebuild the file database (mktexlsr or so) if you install +under TEXMFLOCAL. + +## License + +* The three fonts are licensed under the SIL Open Font License, +Version 1.1. This license is available with a FAQ at: +http://scripts.sil.org/OFL +* The other files are distributed under the terms of the LaTeX Project +Public License from CTAN archives in directory macros/latex/base/lppl.txt. +Either version 1.3 or, at your option, any later version. + +## Changes + +* First public version: 0.30 + +--- +Copyright 2022- Daniel Flipo +E-mail: daniel (dot) flipo (at) free (dot) fr diff --git a/fonts/yfonts-otf/doc/Erlkonig.ltx b/fonts/yfonts-otf/doc/Erlkonig.ltx new file mode 100644 index 0000000000..1aacc668c3 --- /dev/null +++ b/fonts/yfonts-otf/doc/Erlkonig.ltx @@ -0,0 +1,122 @@ +\documentclass[12pt,a4paper,german]{article} + +\usepackage[top=40mm,left=40mm,right=40mm]{geometry} +\usepackage{oldgerm-otf} +\usepackage{babel} + +\usepackage{lettrine} +\renewcommand{\LettrineTextFont}{\relax} +\renewcommand{\LettrineFontHook}{\fontspec{Yinit.otf}} +\renewcommand{\DefaultLoversize}{0.25} +\renewcommand{\DefaultLhang}{0.2} +\setlength{\DefaultFindent}{0.1em} + +\begin{document} +\pagestyle{empty} + +\frakfamily\Large +\centerline{\Huge Erlkönig} + +\vspace{2\baselineskip} +\lettrine{W}{er} reitet so spät durch Nacht und Wind?\\ +Es ist der Vater mit seinem Kind;\\ +Er hat den Knaben wohl in dem Arm,\\ +Er faßt ihn sicher, er hält ihn warm. + +\vspace{\baselineskip} +\lettrine{M}{ein} Sohn, was birgst du so bang dein Gesicht? --\\ +Siehst, Vater, du den Erlk"onig nicht?\\ +Den Erlenkönig mit Kron und Schweif? --\\ +Mein Sohn, es ist ein Nebelstreif. -- + +\vspace{\baselineskip} +\lettrine{D}{u} liebes Kind, komm, geh mit mir!\\ +Gar schöne Spiele spiel ich mit dir;\\ +Manch bunte Blumen sind an dem Strand,\\ +Meine Mutter hat manch gülden Gewand.%'' + +\vspace{\baselineskip} +\lettrine{M}{ein} Vater, mein Vater, und hörest du nicht,\\ +Was Erlenkönig mir leise verspricht? --\\ +Sei ruhig, bleibe ruhig, mein Kind;\\ +In dürren Blättern säuselt der Wind. -- + +\vspace{\baselineskip} +\begin{flushright} + \Large Johann Wolfgang von Goethe +\end{flushright} + +\newpage +\swabfamily\Large +\centerline{\Huge Erlkönig} + +\vspace{2\baselineskip} +\lettrine{W}{er} reitet so spät durch Nacht und Wind?\\ +Es ist der Vater mit seinem Kind;\\ +Er hat den Knaben wohl in dem Arm,\\ +Er faßt ihn sicher, er hält ihn warm. + +\vspace{\baselineskip} +\lettrine{M}{ein} Sohn, was birgst du so bang dein Gesicht? --\\ +Siehst, Vater, du den Erlk"onig nicht?\\ +Den Erlenkönig mit Kron und Schweif? --\\ +Mein Sohn, es ist ein Nebelstreif. -- + +\vspace{\baselineskip} +\lettrine{D}{u} liebes Kind, komm, geh mit mir!\\ +Gar schöne Spiele spiel ich mit dir;\\ +Manch bunte Blumen sind an dem Strand,\\ +Meine Mutter hat manch gülden Gewand.%'' + +\vspace{\baselineskip} +\lettrine{M}{ein} Vater, mein Vater, und hörest du nicht,\\ +Was Erlenkönig mir leise verspricht? --\\ +Sei ruhig, bleibe ruhig, mein Kind;\\ +In dürren Blättern säuselt der Wind. -- + +\vspace{\baselineskip} +\begin{flushright} + \Large Johann Wolfgang von Goethe +\end{flushright} + +\newpage +\gothfamily\Large +\centerline{\Huge Erlkönig} + +\vspace{2\baselineskip} +\lettrine{W}{er} reitet so spät durch Nacht und Wind?\\ +Es ist der Vater mit seinem Kind;\\ +Er hat den Knaben wohl in dem Arm,\\ +Er faßt ihn sicher, er hält ihn warm. + +\vspace{\baselineskip} +\lettrine{M}{ein} Sohn, was birgst du so bang dein Gesicht? --\\ +Siehst, Vater, du den Erlk"onig nicht?\\ +Den Erlenkönig mit Kron und Schweif? --\\ +Mein Sohn, es ist ein Nebelstreif. -- + +\vspace{\baselineskip} +\lettrine{D}{u} liebes Kind, komm, geh mit mir!\\ +Gar schöne Spiele spiel ich mit dir;\\ +Manch bunte Blumen sind an dem Strand,\\ +Meine Mutter hat manch gülden Gewand.%'' + +\vspace{\baselineskip} +\lettrine{M}{ein} Vater, mein Vater, und hörest du nicht,\\ +Was Erlenkönig mir leise verspricht? --\\ +Sei ruhig, bleibe ruhig, mein Kind;\\ +In dürren Blättern säuselt der Wind. -- + +\vspace{\baselineskip} +\begin{flushright} + \Large Johann Wolfgang von Goethe +\end{flushright} + +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-engine: luatex +%%% TeX-master: t +%%% coding: utf-8 +%%% End: diff --git a/fonts/yfonts-otf/doc/Erlkonig.pdf b/fonts/yfonts-otf/doc/Erlkonig.pdf new file mode 100644 index 0000000000..bd64dee2e5 Binary files /dev/null and b/fonts/yfonts-otf/doc/Erlkonig.pdf differ diff --git a/fonts/yfonts-otf/doc/yfonts-otf.ltx b/fonts/yfonts-otf/doc/yfonts-otf.ltx new file mode 100644 index 0000000000..09513741ad --- /dev/null +++ b/fonts/yfonts-otf/doc/yfonts-otf.ltx @@ -0,0 +1,223 @@ +\RequirePackage{pdfmanagement-testphase} +\DeclareDocumentMetadata{pdfstandard=A-2b, lang=en-GB} +\documentclass[paper=a4]{scrartcl} +% Packages +\usepackage{graphics, array} +\usepackage[dvipsnames]{xcolor} +\usepackage[hypcap=false]{caption} +\usepackage{shortvrb} +\usepackage{oldgerm-otf} +\usepackage{fourier-otf} +\usepackage[german,british]{babel} +\babeltags{de=german} +\usepackage[english]{varioref} +\usepackage{realscripts} +\usepackage{microtype} +\usepackage{hyperref} +\hypersetup{pdftitle={yfonts-otf User’s Guide}, + pdfauthor={Daniel FLIPO}, + colorlinks + } +\newcommand*{\hlabel}[1]{\phantomsection\label{#1}} +% +\MakeShortVerb{\|} + +%verbatim : modifier \verbatim@font +\def\ColorVerb{\color{MidnightBlue}} +\makeatletter +\let\verbatim@fontORI\verbatim@font +\def\verbatim@font{\ColorVerb\verbatim@fontORI} +\makeatother + +\newcommand*{\pkg}[1]{\texttt{\ColorVerb #1}} +\newcommand*{\opt}[1]{\texttt{\ColorVerb #1}} +\newcommand*{\file}[1]{\texttt{\ColorVerb #1}} +\newcommand*{\cmd}[1]{\texttt{\ColorVerb \textbackslash #1}} +\newcommand*{\family}[1]{\textit{#1}} +\newcommand*{\MF}{\textsf{Metafont}} +\def\xx{\kern0pt} + +\title{OpenType version of yfonts for Old German} +\author{\href{mailto:daniel.flipo@free.fr}{Daniel \textsc{Flipo}}} +\newcommand*{\version}{0.30} + +\begin{document} +\maketitle +\thispagestyle{empty} + +\begin{abstract} + This bundle provides OpenType versions of the Old German fonts \family{yfrak}, + \family{ygoth} and \family{yswab} designed by Yannis Haralambous in \MF{} + (1990). + + A style file \file{oldgerm-otf.sty} is included to load these fonts easily; + it is meant as a replacement for LuaLaTeX and XeLaTeX of + \file{oldgerm.sty}. + + A Type\,1 version of these fonts has been provided by Thorsten Bronger (2002). + + The \family{yinit} font (initials) is already available as in OpenType format, + thanks to Élie Roux. + + Please beware of the \emph{experimental} status of the current + version~(\version). + + All three fonts are covered by OFL licence, style file and documentation + are under LPPL-1.3 licence. +\end{abstract} + +\section{Usage} + +\pkg{oldgerm-otf.sty} loads \pkg{fontspec} and mimics what the +\pkg{oldgerm} package does for the Type\,1 version: it defines three font +families |\frakfamily|, |\gothfamily| and |\swabfamily| and the corresponding +font commands with arguments |\textgoth{}|, |\textfrak{}|, and |\textswab{}|. + +All three families are loaded with all ligatures activated, an |s| prints +a long~\textfrak{s} (initial and middle form), the final +round~{\frakfamily{s\hspace{1sp}}} can be coded |s:|% +\footnote{See section~\ref{sec:long-s} for details.}. +Coding |"a|, |"e|, |"o|, |"u|, |"s|, produces \textfrak{ä, ë, ö, ü, ß,} as +expected. Nowadays, most keyboards give access to the Unicode characters |ä|, +|ë|, |ö|, |ü| and |ß|, so typing them directly is another possibility. + +In the \family{yfrak} family, the command |\etc| prints {\etc} +a variant of the \textfrak{usw} abbreviation while |\Jvar| prints {\Jvar} +a variant of \textfrak{J} (suggestion of Daniel Sanders, mentioned by Yannis). + +The OpenType feature |Alternate=0| turns \textfrak{ä, ë, ö, ü} into +{\frakfamily\addfontfeature{Alternate=0} ä, ë, ö, ü}. +It works for the \family{yfrak} and \family{yswab} families but not for +\family{ygoth} (variant not available in the original version). + +Those variants {\frakfamily\addfontfeature{Alternate=0} ä, ë, ö, ü}, can +also be accessed by coding |*a|, |*e|, |*o|, |*u| (as in \pkg{oldgerm}) +without activating the |Alternate=0| feature. +\addfontfeature{RawFeature=-salt} % back to default. + +Used with the \family{ygoth} family, the |Alternate=1| feature provides +variants for the long~s and the derived ligatures: +{\gothfamily s\xx, ss\xx, ssi, st} are turned into +{\gothfamily\addfontfeature{Alternate=1} s\xx, ss\xx, ssi, st}. + +These features can be added locally anywhere in the document body, f.i.:\\ +|\frakfamily\addfontfeature{Alternate=0}|\\ +or using \pkg{oldgerm-otf.sty}’s options |oldumlaut| and +|gothvarlongs|, f.i.:\\ +|\usepackage[oldumlaut]{oldgerm-otf}|\\ +which applies globally to both \family{yfrak} and \family{yswab} families. + +\section{Coding the long/round s} +\label{sec:long-s} + +As stated in \cite{YH}, the initial and middle |s| should be long +({\frakfamily s\kern1pt}) while the final form should be round +({\frakfamily s\hspace{1sp}}). The OpenType |calt| feature can deal with +this kind of requirement. + +\pkg{oldgerm-otf.sty} enables the |calt| feature by default, so that an |s| +followed by a punctuation mark or a space \emph{character} is automatically +printed as a round one ({\frakfamily s\hspace{1sp}} instead of +{\frakfamily \kern1pt s\kern2pt}). +The problem is that TeX turns spaces into \emph{glues} which are ignored +by the |calt| feature. + +Conclusion: the |calt| feature works fine for the final |s| +\emph{only if} it is followed by a punctuation mark (point, comma, +semicolon, etc.). This is true for LuaTeX and XeTeX. + +For LuaTeX a workaround has been added in \pkg{oldgerm-otf.sty}. A null space +character (U+200B) is added automatically after every |s| followed by +a \emph{glue} or a \emph{penalty} (unbreakable spaces) or +a \emph{discretionary} (compound words), thus enabling the |calt| feature to +deal also with TeX spaces and compound words. +With LuaTeX, the |s| should always be printed out properly, the |s:| coding +should no longer be required% +\footnote{I am not sure about compound words: is checking + \emph{discretionaries} correct?}. + +Please note that the possibility of coding |s:| to get the round +{\frakfamily s\hspace{1sp}} has been kept for compatibility, this implies that +{\frakfamily aus::} has to be coded |aus::| with a double colon, the first one +being swallowed by the ligature |s:| which prints {\frakfamily s\hspace{1sp}}. + +With XeTeX, the |s:| coding is still required inside compound words +and before spaces f.i. |das: Aus:land|. + +\newpage +\section{List of optional ligatures} + +Some ligatures may be deactivated if necessary with the command\\ +|\addfontfeature{RawFeature=-|\textit{\ColorVerb ligname}|}| + +\vspace{\baselineskip} +|\frakfamily| : \let\ffam\frakfamily +\begin{tabular}{>\rmfamily l|l| l} + \hline + Name & Default ($+$) & Optional ($-$) \\ + \hline + liga & \ffam ff &\ffam\addfontfeature{RawFeature=-liga} ff \\ + dlig & \ffam ch, ck &\ffam\addfontfeature{RawFeature=-dlig} ch, ck \\ + hlig & \ffam sf, ss\xx, st &\ffam\addfontfeature{RawFeature=-hlig} sf, ss\xx, st\\ + \hline +\end{tabular} + +\vspace{.5\baselineskip} +|\swabfamily| : \let\ffam\swabfamily +\begin{tabular}{>\rmfamily l|l| l} + \hline + Name & Default ($+$) & Optional ($-$) \\ + \hline + liga & \ffam ff &\ffam\addfontfeature{RawFeature=-liga} ff \\ + dlig & \ffam ch, ck &\ffam\addfontfeature{RawFeature=-dlig} ch, ck \\ + hlig & \ffam sf, ss\xx, st &\ffam\addfontfeature{RawFeature=-hlig} sf, ss\xx, st \\ + \hline +\end{tabular} + +\vspace{.5\baselineskip} +|\gothfamily| : \let\ffam\gothfamily +\begin{tabular}{>\rmfamily l|l| l} + \hline + Name & Default ($+$) & Optional ($-$) \\ + \hline + liga & \ffam ff, ffi, ffl, fi, fl, ij + &\ffam\addfontfeature{RawFeature=-liga} ff, ffi, ffl, fi, fl, ij \\ + dlig & \ffam ch, ck, ct, qz, tz + &\ffam\addfontfeature{RawFeature=-dlig} ch, ck, ct, qz, tz \\ + hlig & \ffam sf, ss\xx, st, ssi + &\ffam\addfontfeature{RawFeature=-hlig} sf, ss\xx, st, ssi \\ + alig & \ffam ba, be, bo, da, de, do, ha, he, ho, ho, + &\ffam\addfontfeature{RawFeature=-alig} + ba, be, bo, da, de, do, ha, he, ho, \\ + &\ffam ll, pa, pe, po, pp, qq, va, ve, vu + &\ffam\addfontfeature{RawFeature=-alig} + ll, pa, pe, po, pp, qq, va, ve, vu\\ + \hline +\end{tabular} + +\section{Samples} + +A practical usage of these fonts can be found in file \file{Erlkonig.ltx} to +be compiled with \pkg{lualatex}. +It shows the beginning of Goethe’s Erlkönig poem typeset with each of them. + +\begin{thebibliography}{99} +\bibitem{YH} Typesetting Old German: Fraktur, Schwabacher, Gotish and + Initials, \\ \textit{Yannis Haralambous}, + \href{https://www.tug.org/TUGboat/tb12-1/tb31hara.pdf}% + {TUGboat 12\#1 (1991), pages 129–138}. + +\bibitem{OG} The \pkg{oldgerm} package for use with \LaTeXe, + \textit{Frank Mittelbach}, (2020). +\end{thebibliography} + +\vspace{3\baselineskip} +\centerline{\Huge\decotwo} +\end{document} + +%%% Local Variables: +%%% mode: latex +%%% TeX-engine: luatex +%%% TeX-master: t +%%% coding: utf-8 +%%% End: diff --git a/fonts/yfonts-otf/doc/yfonts-otf.pdf b/fonts/yfonts-otf/doc/yfonts-otf.pdf new file mode 100644 index 0000000000..af2fc0a1b3 Binary files /dev/null and b/fonts/yfonts-otf/doc/yfonts-otf.pdf differ diff --git a/fonts/yfonts-otf/fonts/yfrak.otf b/fonts/yfonts-otf/fonts/yfrak.otf new file mode 100644 index 0000000000..afb7cd6b6e Binary files /dev/null and b/fonts/yfonts-otf/fonts/yfrak.otf differ diff --git a/fonts/yfonts-otf/fonts/ygoth.otf b/fonts/yfonts-otf/fonts/ygoth.otf new file mode 100644 index 0000000000..83f9c23bf0 Binary files /dev/null and b/fonts/yfonts-otf/fonts/ygoth.otf differ diff --git a/fonts/yfonts-otf/fonts/yswab.otf b/fonts/yfonts-otf/fonts/yswab.otf new file mode 100644 index 0000000000..fd802c643f Binary files /dev/null and b/fonts/yfonts-otf/fonts/yswab.otf differ diff --git a/fonts/yfonts-otf/tex/oldgerm-otf.sty b/fonts/yfonts-otf/tex/oldgerm-otf.sty new file mode 100644 index 0000000000..e58caaeb90 --- /dev/null +++ b/fonts/yfonts-otf/tex/oldgerm-otf.sty @@ -0,0 +1,89 @@ +\NeedsTeXFormat{LaTeX2e}[2019-01-01] +\def\fileversion{0.30} +\def\filedate{2022-07-18} +\ProvidesPackage{oldgerm-otf}[\filedate\space\fileversion] +\RequirePackage{iftex}[2019-10-24] +\newif\ifOGotf@oldumlaut +\newif\ifOGotf@gothlongs +\DeclareOption{oldumlaut}{\OGotf@oldumlauttrue} +\DeclareOption{gothvarlongs}{\OGotf@gothlongstrue} +\ProcessOptions +\iftutex + \RequirePackage{fontspec} + \ifOGotf@gothlongs + \newfontfamily\gothfamily{ygoth.otf}% + [Alternate=1, RawFeature=+hist;+rlig;+liga;+dlig;+hlig;+alig;+calt] + \else + \newfontfamily\gothfamily{ygoth.otf}% + [RawFeature=+hist;+rlig;+liga;+dlig;+hlig;+alig;+calt] + \fi + \ifOGotf@oldumlaut + \newfontfamily\swabfamily{yswab.otf}% + [Alternate=0, RawFeature=+hist;+rlig;+liga;+dlig;+hlig;+calt] + \newfontfamily\frakfamily{yfrak.otf}% + [Alternate=0, RawFeature=+hist;+rlig;+liga;+dlig;+hlig;+calt] + \else + \newfontfamily\swabfamily{yswab.otf}% + [RawFeature=+hist;+rlig;+liga;+dlig;+hlig;+calt] + \newfontfamily\frakfamily{yfrak.otf}% + [RawFeature=+hist;+rlig;+liga;+dlig;+hlig;+calt] + \fi + \DeclareTextFontCommand{\textgoth}{\gothfamily} + \DeclareTextFontCommand{\textswab}{\swabfamily} + \DeclareTextFontCommand{\textfrak}{\frakfamily} + \DeclareTextCommand{\Jvar}{TU}{\textfrak{\char"E960}} + \DeclareTextCommand{\etc}{TU}{\textfrak{\char"E961}} + \ifluatex + % This function adds character U+200B (zero width space) when an "s" + % is followed by a TeX space (glue or penalty or a disc) + % so that it is not turned into a long "s" by the "calt" feature. + \directlua{% + function add_eow_char (head) + local eow = 0x200B + local GLUE = node.id("glue") + local GLYPH = node.id("glyph") + local PENALTY = node.id("penalty") + local DISC = node.id("disc") + local Longs = + {[string.byte("s")] = true} + local new_node = node.new + local copy_node = node.copy + local insert_node_after = node.insert_after + % Perserve TeX's kerning + head = node.kerning(head) + % wordbd is the zero width node to add + local wordbd = new_node(GLYPH) + for item in node.traverse_id(GLYPH, head) do + if Longs[item.char] then + local fid = item.font + % Check if char U+200B is available in the current font: + % code borrowed from file "luaotfload-auxiliary.lua". + local fontdata = fonts.hashes.identifiers[fid] + if fontdata and fontdata.characters[eow] then + local nxt = item.next + if not nxt or nxt.id == GLUE or nxt.id == PENALTY + or nxt.id == DISC then + wordbd.font = fid + wordbd.char = eow + wordbd.attr = item.attr + insert_node_after(head,item,copy_node(wordbd)) + end + end + end + end + end + } + % Register in callback "kerning". + \AtBeginDocument{% + \directlua{ + luatexbase.add_to_callback("kerning", add_eow_char, + "add_end_of_word_boundary"); + }% + } + \fi +\else + \PackageWarning{oldgerm-otf}% + {This package requires LuaTeX or XeTeX engines. + With other engines, consider using `oldgerm.sty', reported} +\fi +\endinput -- cgit v1.2.3