diff options
Diffstat (limited to 'fonts/spark-otf')
-rw-r--r-- | fonts/spark-otf/Changes | 11 | ||||
-rw-r--r-- | fonts/spark-otf/README.md | 17 | ||||
-rw-r--r-- | fonts/spark-otf/doc/spark-otf-doc.bib | 45 | ||||
-rw-r--r-- | fonts/spark-otf/doc/spark-otf-doc.pdf | bin | 0 -> 106096 bytes | |||
-rw-r--r-- | fonts/spark-otf/doc/spark-otf-doc.tex | 446 | ||||
-rw-r--r-- | fonts/spark-otf/latex/spark-otf.sty | 161 |
6 files changed, 680 insertions, 0 deletions
diff --git a/fonts/spark-otf/Changes b/fonts/spark-otf/Changes new file mode 100644 index 0000000000..4425b163de --- /dev/null +++ b/fonts/spark-otf/Changes @@ -0,0 +1,11 @@ +0.05 2019-04-13 - fix for new fontnames and more styles +0.04 2017-09-26 - fix for filenames + - added short form ! for marks + - added char sets for the documentation +0.03 2017-09-24 - added color + - fix for \IfValueTF->\IfBooleanTF + - fix for xelatex +0.02 2017-09-21 - added a star version for LuaLaTeX which + allows any values in the data list + - added error message for pdflatex +0.01 2017-09-19 - first CTAN version diff --git a/fonts/spark-otf/README.md b/fonts/spark-otf/README.md new file mode 100644 index 0000000000..0fd25d8a04 --- /dev/null +++ b/fonts/spark-otf/README.md @@ -0,0 +1,17 @@ +# README # +Package spark-otf supports the free fonts from +"After the Flood" which are available from the +website https://aftertheflood.com/projects/sparks/ +or from https://github.com/aftertheflood/spark + +Following font files are supported: + +- Sparks-Bar-???.otf +- Sparks-Dotline-???.otf +- Sparks-Dot-???.otf + + + +%% This file is 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. diff --git a/fonts/spark-otf/doc/spark-otf-doc.bib b/fonts/spark-otf/doc/spark-otf-doc.bib new file mode 100644 index 0000000000..9dde6057b7 --- /dev/null +++ b/fonts/spark-otf/doc/spark-otf-doc.bib @@ -0,0 +1,45 @@ +@online{fontconfig, + author ={{\texttt{freedesktop.org}}}, + sortname = {freedesktop}, + title = {Fontconfig}, + subtitle = {A library for configuring and customizing font access}, + date = {2017-07-05}, + urldate={2017-09-26}, + url = {https://www.freedesktop.org/wiki/Software/fontconfig/} +} +@online{wikipedia, + author = {{\WikipediA}}, + sortlabel = {Wikipedia}, + sortname = {Wikipedia}, + title = {Sparkline}, + date = {2017-09-03}, + urldate = {2017-09-19}, + url = {https://en.wikipedia.org/wiki/Sparkline}, +} + +@online{features, + author = {{\WikipediA}}, + sortlabel = {Wikipedia}, + sortname = {Wikipedia}, + title = {List of typographic features}, + date = {2017-02-21}, + urldate = {2017-03-24}, + url = {https://en.wikipedia.org/wiki/List_of_typographic_features}, +} + +@online{tufte, + author = {Edward Tufte}, + title = {History of Sparklines and Edward Tufte Contribution}, + date = {2017-09-19}, + urldate = {2017-09-19}, + url = {https://www.edwardtufte.com/bboard/q-and-a-fetch-msg?msg_id=000AIr00}, +} + +@online{atf, +author = {Max Gadney and Mike Gallagher and Nick Cross and Sabih Ali}, +title = {AtF Spark}, +subtitle = {Our new typeface for code-free sparklines}, +Organisation = {After the flood}, +url = {https://aftertheflood.com/projects/sparks/}, +} + diff --git a/fonts/spark-otf/doc/spark-otf-doc.pdf b/fonts/spark-otf/doc/spark-otf-doc.pdf Binary files differnew file mode 100644 index 0000000000..e436bd73c0 --- /dev/null +++ b/fonts/spark-otf/doc/spark-otf-doc.pdf diff --git a/fonts/spark-otf/doc/spark-otf-doc.tex b/fonts/spark-otf/doc/spark-otf-doc.tex new file mode 100644 index 0000000000..d92461a66e --- /dev/null +++ b/fonts/spark-otf/doc/spark-otf-doc.tex @@ -0,0 +1,446 @@ +%% $Id: spark-otf-doc.tex 1047 2019-04-12 17:22:07Z herbert $ +% +\listfiles +\documentclass[fontsize=11pt,DIV=14,parskip=half-]{scrartcl} +\usepackage{fontspec} +\usepackage{graphicx} +\usepackage{multido,showexpl} +\usepackage[%usefilenames, + TT={Scale=0.88,FakeStretch=0.9}, + SS={Scale=0.9}, + RM={Scale=0.9}, + DefaultFeatures={Ligatures=TeX}]{lucida-otf} % support opentype math fonts +\usepackage[usefilenames=false]{spark-otf} % support opentype spark fonts +\makeatletter +\let\SparkVersion\spark@version +\makeatother +\newsavebox\ZBox \newsavebox\SBox + +\usepackage{biblatex} +\addbibresource{\jobname.bib} + +\usepackage{dtk-logos} % for Wikipedia W + +\pagestyle{headings} + +\usepackage[colorlinks,hyperfootnotes=false]{hyperref} +% define \code for url-like breaking of typewriter fragments. +\ifx\nolinkurl\undefined \let\code\url \else \let\code\nolinkurl \fi + +% Define \cs to prepend a backslash, and be unbreakable: +\DeclareRobustCommand\cs[1]{\mbox{\texttt{\char`\\#1}}} + + +\title{Support for the Spark OpenType fonts \\--\\ v.~\SparkVersion} +\author{Herbert Voß} +\begin{document} +\maketitle +\tableofcontents + +\section{Introduction} + +A sparkline is a very small line chart, typically drawn without axes or coordinates. +It presents the general shape of the variation (typically over time) in some measurement, +such as temperature or stock market price, in a simple and highly condensed way. +Sparklines are small enough to be embedded in text, or several sparklines may be +grouped together as elements of a small multiple. Whereas the typical chart is +designed to show as much data as possible, and is set off from the flow of text, +sparklines are intended to be succinct, memorable, and located where they are discussed.~\cite{wikipedia} + + +\section{The fonts} + +The fonts are available from \url{https://github.com/aftertheflood/spark} and should be saved +either in \path{Library/fonts/} (MAC OSX), \path{c:\Windows\Fonts} (Windows) or +\path{/usr/local/share/fonts} (Linux) or any other location where +the fonts will be found by the system. + +\begin{verbatim} +Sparks-Bar-Extranarrow.otf +Sparks-Bar-Extrawide.otf +Sparks-Bar-Medium.otf +Sparks-Bar-Narrow.otf +Sparks-Bar-Wide.otf +Sparks-Dot-Extralarge.otf +Sparks-Dot-Extrasmall.otf +Sparks-Dot-Large.otf +Sparks-Dot-Medium.otf +Sparks-Dot-Small.otf +Sparks-Dotline-Extrathick.otf +Sparks-Dotline-Extrathin.otf +Sparks-Dotline-Medium.otf +Sparks-Dotline-Thick.otf +Sparks-Dotline-Thin.otf +\end{verbatim} +%-rw-r--r-- 1 voss voss 24708 Sep 15 11:20 Spark - Bar - Medium.otf +%-rw-r--r-- 1 voss voss 24696 Sep 15 11:20 Spark - Bar - Narrow.otf +%-rw-r--r-- 1 voss voss 24680 Sep 15 11:20 Spark - Bar - Thin.otf +%-rw-r--r-- 1 voss voss 22140 Sep 15 11:20 Spark - Dot-line - Medium.otf +%-rw-r--r-- 1 voss voss 24616 Sep 15 11:20 Spark - Dot - Medium.otf +%-rw-r--r-- 1 voss voss 24580 Sep 15 11:20 Spark - Dot - Small.otf + + +The package defines the following font macros (using symbol names): + +\small +\begin{verbatim} +\newfontface\sparkBarMedium{Spark-Bar-Medium}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkBarNarrow{Spark-Bar-Narrow}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkBarExtranarrow{Spark-Bar-Extranarrow}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkBarWide{Spark-Bar-Wide}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkBarExtrawide{Spark-Bar-Extrawide}[RawFeature=+calt,\spark@DefaultFeatures] +% +\newfontface\sparkDotLineMedium{Spark-Dotline-Medium}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkDotLineThick{Spark-Dotline-Thick}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkDotLineExtrathick{Spark-Dotline-Extrathick}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkDotLineThin{Spark-Dotline-Thin}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkDotLineExtrathin{Spark-Dotline-Extrathin}[RawFeature=+calt,\spark@DefaultFeatures] +% +\newfontface\sparkDotMedium{Spark-Dot-Medium}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkDotSmall{Spark-Dot-Small}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkDotExtralarge{Spark-Dot-Extralarge}[RawFeature=+calt,\spark@DefaultFeatures] +\newfontface\sparkDotExtrasmall{Spark-Dot-Extrasmall}[RawFeature=+calt,\spark@DefaultFeatures] +\end{verbatim} + +\normalsize + +\section{The macros} + +\begin{verbatim} +\sparkBar[<Type>][<No>]{values}[<No>] +\sparkDot[<Type>][<No>]{values}[<No>] +\sparkDotline[<Type>][<No>]{values}[<No>] +\sparkBar*[<Type>][<No>]{values}[<No>] +\sparkDot*[<Type>][<No>]{values}[<No>] +\sparkDotline*[<Type>][<No>]{values}[<No>] +\sparkBar[<Type>]{!value,values,...,!value} +\sparkDot[<Type>]{!value,values,...,!value} +\sparkDotline[<Type>]{!value,values,...,!value} +\sparkBar*[<Type>]{!value,values,...,!value} +\sparkDot*[<Type>]{!value,values,...,!value} +\sparkDotline*[<Type>]{!value,values,...,!value} +\end{verbatim} + +If \texttt{[<Type>]} is missing, \texttt{Medium} is assumed. The type is mandatory if you use +the first \texttt{[<No>]} argument! The star versions are only valid for Lua\LaTeX\ where the values +can be of any interval. They will be changed to the allowed interval: + +\begin{itemize} +\item for \cs{sparkDotline}: $[0,9]$ +\item for all other: $[0,100]$ +\end{itemize} + + +Instead of using the optional arguments for printing the first and/or last value you +can use the !-notation, then the first and/or last listed value are printed. There is no difference +in using the optional arguments; it saves only some keystrokes if the printed values are +the same as in the list. + +\section{Text examples} + +\subsection{Bars} + +\typeout{Bar-Medium}% + +\subsubsection{Bar-Medium} + +\begin{LTXexample}[pos=t] +Text \sparkBar{14,95,68,9,19,41,91,1,81,97,79,45,96,76,17,65,8,92} Text\\ +Text \sparkBar[Medium]{14,95,68,9,19,41,91,1,81,97,79,45,96,76,17,65,8,92} Text\\ +Text \sparkBar[Medium][14]{14,95,68,9,19,41,91,1,81,97,79,45,96,76,17,65,8,92}[92] Text\\ +Text \sparkBar{!14,95,68,9,19,41,91,1,81,97,79,45,96,76,17,65,8,!92} Text +\end{LTXexample} + + +\subsubsection{Bar-Narrow} + +\begin{LTXexample}[pos=t] +Text \sparkBar[Narrow]{19,32,93,4,95,46,13,23,50,86,94,68,58,41,89,57,74,8} Text\\ +Text \sparkBar[Narrow][19]{19,32,93,4,95,46,13,23,50,86,94,68,58,41,89,57,74,!8} Text\\ +Text \sparkBar[Narrow]{!19,32,93,4,95,46,13,23,50,86,94,68,58,41,89,57,74,!8} Text +\end{LTXexample} + + +\subsubsection{Bar-Extranarrow} + +\begin{LTXexample}[pos=t] +Text \sparkBar[Extranarrow]{19,32,93,4,95,46,13,23,50,86,94,68,58,41,89,57,74,8} Text\\ +Text \sparkBar[Extranarrow][19]{19,32,93,4,95,46,13,23,50,86,94,68,58,41,89,57,74,!8} Text\\ +Text \sparkBar[Extranarrow]{!19,32,93,4,95,46,13,23,50,86,94,68,58,41,89,57,74,!8} Text +\end{LTXexample} + + +\subsubsection{Bar-Wide} + +\begin{LTXexample}[pos=t] +Text \sparkBar[Wide]{13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,22} Text\\ +Text \sparkBar[Wide][13]{13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,22}[22] Text\\ +Text \sparkBar[Wide]{!13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,22} Text\\ +Text \sparkBar[Wide]{!13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,!22} Text +\end{LTXexample} + + +\subsubsection{Bar-Extrawide} + +\begin{LTXexample}[pos=t] +Text \sparkBar[Extrawide]{13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,22} Text\\ +Text \sparkBar[Extrawide][13]{13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,22}[22] Text\\ +Text \sparkBar[Extrawide]{!13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,22} Text\\ +Text \sparkBar[Extrawide]{!13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,!22} Text +\end{LTXexample} + + + +\subsection{Dots} + +\subsubsection{Dot-Medium -- the default} + +\begin{LTXexample}[pos=t] +Text \sparkDot{54,39,26,65,29,58,36,99,16,56,76,69,71,77,7,40,79,1} Text\\ +Text \sparkDot[Medium][54]{54,39,26,65,29,58,36,99,16,56,76,69,71,77,7,40,79,1}[1] Text\\ +Text \sparkDot{!54,39,26,65,29,58,36,99,16,56,76,69,71,77,7,40,79,!1} Text +\end{LTXexample} + + +\subsubsection{Dot-Small} + + +\begin{LTXexample}[pos=t] +Text \sparkDot[Small]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDot[Small][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDot[Small]{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + +\subsubsection{Dot-Extrasmall} + +\begin{LTXexample}[pos=t] +Text \sparkDot[Extrasmall]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDot[Extrasmall][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDot[Extrasmall]{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + + +\subsubsection{Dot-Extralarge} + +\begin{LTXexample}[pos=t] +Text \sparkDot[Extralarge]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDot[Extralarge][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDot[Extralarge]{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + + + + +\subsection{Dotline} + +\subsubsection{Dotline-Thin} + +\begin{LTXexample}[pos=t] +Text \sparkDotline[Thin]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDotline[Thin][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDotline[Thin]{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + +\subsubsection{Dotline-Extrathin} + +\begin{LTXexample}[pos=t] +Text \sparkDotline[Extrathin]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDotline[Extrathin][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDotline[Extrathin]{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + + + +\subsubsection{Dotline-Medium -- the default} + +\begin{LTXexample}[pos=t] +Text \sparkDotline{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDotline[Medium][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDotline{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + +\subsubsection{Dotline-Thick} + +\begin{LTXexample}[pos=t] +Text \sparkDotline[Thick]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDotline[Thick][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDotline[Thick]{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + +\subsubsection{Dotline-Extrathick} + +\begin{LTXexample}[pos=t] +Text \sparkDotline[Extrathick]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDotline[Extrathick][1]{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}[76] Text\\ +Text \sparkDotline[Extrathick]{!1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,!76} Text +\end{LTXexample} + + +\section{Examples for Lua\protect\LaTeX} +The current version of \texttt{spark-otf} supports only star versions for Lua\LaTeX. + + +\subsection{Bars} + +\begin{LTXexample}[pos=t] +Text \sparkBar*{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkBar*{9,4,2,1,6,7,3,8,3,7,1,4,9,2,8,5,1,8} Text\\ +Text \sparkBar*[Narrow]{111,179,188,146,154,177,191,124,170,122,127,129,140,133,131,195,126,176} Text\\ +\end{LTXexample} + + +\subsection{Dots} +\begin{LTXexample}[pos=t] +Text \sparkDotline*{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76} Text\\ +Text \sparkDotline{9,4,2,1,6,7,3,8,3,7,1,4,9,2,8,5,1,8} Text\\ +Text \sparkDotline+{9,4,2,1,6,7,3,8,3,7,1,4,9,2,8,5,1,8} Text\\ +Text \sparkDot*[Medium][19]{19,114,12,111,16,17,113,118,113,67,61,74,39,52,38,55,111,88}[88] Text\\ +Text \sparkDotline*[Medium][111]{111,179,188,146,154,177,191,124,170,122,127,129,140,133,131,195,126,176}[176] Text +\end{LTXexample} + + + +\section{Using color} +It is possible to mark single or some values with a specific color, which must +be given in binary notation, e.g. \verb|ff0000| for red (R-G-B). The macro \verb|\setSparkColor| +\emph{should} include the (last) comma after the value: + +\begin{LTXexample}[pos=t] +Text \sparkBar{14,95,68,9,19,41,\setSparkColor{ff0000}{91,}1,81,97,79,45,96,76,17,65,8,92} Text + \sparkBar{!14,95,68,9,19,41,\setSparkColor{ff0000}{91,1,81,97,79,}45,96,76,17,65,8,!92} Text + +\bigskip +\noindent +Text \sparkDot{14,95,68,9,19,41,\setSparkColor{ff0000}{91,}1,81,97,79,45,96,76,17,65,8,92} Text + \sparkDot{!14,95,68,9,19,41,\setSparkColor{ff0000}{91,1,81,97,79,}45,96,76,17,65,8,!92} Text +\end{LTXexample} + +Coloring does \emph{not} work for the star version of the macro and \emph{not} for +\verb|\sparkDotline|. + + +\section{The charsets} + +\subsection{Spark-BarMedium} + +%\includegraphics{images/Spark-BarMedium} + +{\sparkBarMedium +\multido{\iA=32+50}{20000}{\sbox\ZBox{% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\kern0.45pt\fi}}% + \ifdim\wd\ZBox>0pt \sbox\ZBox{\makebox[4em][r]{\iA: }% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\else\kern0.45em\fi\kern0.25pt}}% + \usebox\ZBox\\\fi} +} + + +%\string{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,1\string} + + + +%-* !"\#\$\%'()*+,-./0123456789.;<=>@CDEGHILNOSTU[\textbackslash]\_ht\{\_\}°¢ + +\subsection*{Spark-BarNarrow} + +{\sparkBarNarrow +\multido{\iA=32+50}{20000}{\sbox\ZBox{% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\kern0.35pt\fi}}% + \ifdim\wd\ZBox>0pt \sbox\ZBox{\makebox[4em][r]{\iA: }% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\else\kern0.35em\fi\kern0.25pt}}% + \usebox\ZBox\\\fi} +} + + +\iffalse + +\subsection*{Spark-BarThin} + +{\sparkBarThin +\multido{\iA=32+50}{20000}{\sbox\ZBox{% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\kern0.1pt\fi}}% + \ifdim\wd\ZBox>0pt \sbox\ZBox{\makebox[4em][r]{\iA: }% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\else\kern0.1em\fi\kern0.25pt}}% + \usebox\ZBox\\\fi} +} + + +\subsection*{Spark-DotMedium} + +{\sparkDotMedium +\multido{\iA=32+50}{20000}{\sbox\ZBox{% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\kern0.35pt\fi}}% + \ifdim\wd\ZBox>0pt \sbox\ZBox{\makebox[4em][r]{\iA: }% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\else\kern0.35em\fi\kern0.25pt}}% + \usebox\ZBox\\\fi} +} + + +\subsection*{Spark-DotSmall} + +{\sparkDotSmall +\multido{\iA=32+50}{20000}{\sbox\ZBox{% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\kern0.2pt\fi}}% + \ifdim\wd\ZBox>0pt \sbox\ZBox{\makebox[4em][r]{\iA: }% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\else\kern0.2em\fi\kern0.25pt}}% + \usebox\ZBox\\\fi} +} + + +\subsection*{Spark-DotLine} + +{\sparkDotLine +\multido{\iA=32+50}{20000}{\sbox\ZBox{% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\kern0.4pt\fi}}% + \ifdim\wd\ZBox>0pt \sbox\ZBox{\makebox[4em][r]{\iA: }% + \multido{\iB=\iA+1}{50}{% + \sbox\SBox{\symbol{\iB}}% + \ifdim\wd\SBox>0pt\usebox\SBox\else\kern0.4em\fi\kern0.25pt}}% + \usebox\ZBox\\\fi} +} + + +\fi + + +\nocite{*} +\printbibliography + + +\end{document} + + +<p class=spark-bar-medium>{14,95,68,9,19,41,91,1,81,97,79,45,96,76,17,65,8,92}</p> + +<p class=spark-bar-narrow>{19,32,93,4,95,46,13,23,50,86,94,68,58,41,89,57,74,8}</p> + +<p class=spark-bar-thin>{13,15,59,73,42,1,41,51,4,97,35,55,37,24,89,21,30,22}</p> + +<p class=spark-dot-medium>{54,39,26,65,29,58,36,99,16,56,76,69,71,77,7,40,79,1}</p> + +<p class=spark-dot-small>{1,79,88,46,54,77,91,24,70,22,27,29,40,33,31,95,26,76}</p> + +<p class=spark-line-medium>{9,4,2,1,6,7,3,8,3,7,1,4,9,2,8,5,1,8}</p> +\NewDocumentCommand\spark{omo}{{\sparklinesbarmedium + \IfValueT{#1}{#1}\string{#2\string}\IfValueT{#3}{#3}}} diff --git a/fonts/spark-otf/latex/spark-otf.sty b/fonts/spark-otf/latex/spark-otf.sty new file mode 100644 index 0000000000..eae4f650d0 --- /dev/null +++ b/fonts/spark-otf/latex/spark-otf.sty @@ -0,0 +1,161 @@ +%% $Id: spark-otf.sty 1047 2019-04-12 17:22:07Z herbert $ +%% +%% This file is 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. +%% +% Copyright 2017 Herbert Voss hvoss@tug.org +%% +\def\spark@version{0.05} +\ProvidesPackage{spark-otf}[% + 2019/04/12 v. \spark@version~(Herbert Voss) Supports spark OpenType for lualatex/xelatex.] +% +\RequirePackage{ifxetex,ifluatex,xkeyval} +% +\newif\ifspark@usefilenames \spark@usefilenamesfalse +\DeclareOptionX{usefilenames}[true]{\@nameuse{spark@usefilenames#1}} +% +\providecommand\spark@DefaultFeatures{} +\DeclareOptionX{DefaultFeatures}{\def\spark@DefaultFeatures{#1}} + +\ProcessOptionsX\relax + +\ifxetex\else\ifluatex\else + \@latex@error{This package can only be used with "XeLaTeX" or "LuaLaTeX"!% + \MessageBreak "pdfLaTeX" or any other "TeX" version are _not_ possible!}% +\fi\fi +\RequirePackage{luaotfload,xparse} + +\ifluatex\RequirePackage{luacode}\fi + +\newcommand\setSparkColor[2]{% + \addfontfeatures{UprightFeatures={Color=#1}}#2% + \addfontfeatures{UprightFeatures={Color=000000}}} + +\ifspark@usefilenames + \typeout {Using file names for the spark font}% +%----------------------------------------- file names ---------------------------- + \font\sparkBarMedium ="file:Sparks-Bar-Medium.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarNarrow ="file:Sparks-Bar-Narrow.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarExtranarrow="file:Sparks-Bar-Extranarrow.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarWide ="file:Sparks-Bar-Wide.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarExtrawide ="file:Sparks-Bar-Extrawide.otfmode=node;+calt;\spark@DefaultFeatures" +% + \font\sparkDotlineMedium ="file:Sparks-Dotline-Medium.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineThick ="file:Sparks-Dotline-Thick.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineExtrathick="file:Sparks-Dotline-Extrathick.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineThin ="file:Sparks-Dotline-Thin.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineExtrathin ="file:Sparks-Dotline-Extrathin.otf:mode=node;+calt;\spark@DefaultFeatures" +% + \font\sparkDotMedium ="file:Sparks-Dot-Medium.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotSmall ="file:Sparks-Dot-Small.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotExtralarge="file:Sparks-Dot-Extralarge.otf:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotExtrasmall="file:Sparks-Dot-Extrasmall.otf:mode=node;+calt;\spark@DefaultFeatures" +% +\else + \typeout {Using symbolic names for the spark font}% +%----------------------------------------- symbolic names ---------------------------- + \font\sparkBarMedium = "name:Sparks Bar Medium:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarNarrow = "name:Sparks Bar Narrow:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarExtranarrow= "name:Sparks Bar Extra-narrow:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarWide = "name:Sparks Bar Wide:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkBarExtrawide = "name:Sparks Bar Extra-wide:mode=node;+calt;\spark@DefaultFeatures" +% + \font\sparkDotlineMedium = "name:Sparks Dot-line Medium:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineThick = "name:Sparks Dot-line Thick:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineExtrathick= "name:Sparks Dot-line Extra-thick:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineThin = "name:Sparks Dot-line Thin:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotlineExtrathin = "name:Sparks Dot-line Extra-thin:mode=node;+calt;\spark@DefaultFeatures" +% + \font\sparkDotMedium = "name:Sparks Dot Medium:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotSmall = "name:Sparks Dot Small:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotExtralarge= "name:Sparks Dot Extra-large:mode=node;+calt;\spark@DefaultFeatures" + \font\sparkDotExtrasmall= "name:Sparks Dot Extra-small:mode=node;+calt;\spark@DefaultFeatures" +\fi +% +% +\def\Extend@List{\@ifnextchar!\Extend@List@i\Extend@List@ii} +\def\Extend@List@i!#1,#2\@nil{% + \def\spark@mark@first{#1}% + \def\spark@values@i{#1,}% + \Extend@List@iii#2,!,!\@nil +} +\def\Extend@List@ii#1\@nil{\Extend@List@iii#1,!,!\@nil} +% +\def\Extend@List@iii#1,!#2,!#3\@nil{% + \ifx\relax#2\relax % no value with ! + \edef\spark@values@i{\spark@values@i#1}% + \def\spark@mark@last{}% + \else + \edef\spark@values@i{\spark@values@i#1,#2}% + \def\spark@mark@last{#2}% + \fi +} + +\def\check@list@values#1{% + \def\spark@values@i{}% + \def\spark@mark@first{}% + \def\spark@mark@last{}% + \Extend@List#1\@nil +} + +% +\ifluatex +\begin{luacode} +function RelativeValues(v,m) + local Values = {} + for k,x in ipairs(v) do + Values[k] = x + end + table.sort(Values) + local MaxVal = (Values[#Values]) + for k,x in ipairs(v) do + Values[k] = math.floor(x/MaxVal*m) + end + for i,k in ipairs(Values) do + tex.sprint(k) + if (i < #Values) then tex.sprint(",") end + end +end +\end{luacode} +% 12 3 45 + \NewDocumentCommand\sparkBar{sO{Medium}O{}mO{}}{{% + \check@list@values{#4}% + \IfBooleanTF{#1}% + {\edef\spark@values@ii{\directlua{RelativeValues({\spark@values@i},99)}}}% + {\let\spark@values@ii\spark@values@i}% + \@nameuse{sparkBar#2}#3\spark@mark@first\string{\spark@values@ii\string}\spark@mark@last#5% + }} +% 12 3 45 + \NewDocumentCommand\sparkDot{sO{Medium}O{}mO{}}{{% + \check@list@values{#4}% + \IfBooleanTF{#1}% + {\edef\spark@values@ii{\directlua{RelativeValues({\spark@values@i},100)}}}% + {\let\spark@values@ii\spark@values@i}% + \@nameuse{sparkDot#2}#3\spark@mark@first\string{\spark@values@ii\string}\spark@mark@last#5% + }} +% 12 3 45 + \NewDocumentCommand\sparkDotline{sO{Medium}O{}mO{}}{{% + \check@list@values{#4}% + \IfBooleanTF{#1}% + {\edef\spark@values@ii{\directlua{RelativeValues({\spark@values@i},100)}}}% + {\let\spark@values@ii\spark@values@i}% + \@nameuse{sparkDotline#2}#3\spark@mark@first\string{\spark@values@ii\string}\spark@mark@last#5% + }} +\else %% XeLaTeX% 1 2 34 + \NewDocumentCommand\sparkBar{O{Medium}O{}mO{}}{{% + \check@list@values{#3}% + \@nameuse{sparkBar#1}\spark@mark@first\string{\spark@values@i\string}\spark@mark@last% + }}% 1 2 34 + \NewDocumentCommand\sparkDot{O{Medium}O{}mO{}}{{% + \check@list@values{#3}% + \@nameuse{sparkDot#1}\spark@mark@first\string{\spark@values@i\string}\spark@mark@last% + }}% + \NewDocumentCommand\sparkDotline{O{Medium}O{}mO{}}{{% + \check@list@values{#3}% + \@nameuse{sparkDotline#1}\spark@mark@first\string{\spark@values@i\string}\spark@mark@last% + }} +\fi +%% +\endinput + |