summaryrefslogtreecommitdiff
path: root/graphics/bookshelf/bookshelf.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2024-10-08 03:03:42 +0000
committerNorbert Preining <norbert@preining.info>2024-10-08 03:03:42 +0000
commite84c1272f5d94f43b893ba3b6b66e9dbf59218e1 (patch)
treef09c0341e482d86cac39fbd9bb021e3ad88deda4 /graphics/bookshelf/bookshelf.dtx
parentb85e181731f8abcc7859d7de77c2ecf61f5f1a68 (diff)
CTAN sync 202410080303
Diffstat (limited to 'graphics/bookshelf/bookshelf.dtx')
-rw-r--r--graphics/bookshelf/bookshelf.dtx1507
1 files changed, 415 insertions, 1092 deletions
diff --git a/graphics/bookshelf/bookshelf.dtx b/graphics/bookshelf/bookshelf.dtx
index 8abaee3d6d..e350534887 100644
--- a/graphics/bookshelf/bookshelf.dtx
+++ b/graphics/bookshelf/bookshelf.dtx
@@ -1,19 +1,18 @@
% \iffalse meta-comment
%
-% Transformed from bookshelf.xml by ClassPack db2dtx.xsl
-% version 1.19 (2020-05-19) on Saturday 23 May 2020 at 23:33:08
%
-% bookshelf.dtx is copyright © 2020 by Peter Flynn <peter@silmaril.ie>
+% bookshelf.dtx is copyright © 2020-2024 by Peter Flynn
+% <peter@silmaril.ie> and Boris Veytsman <borisv@lk.net>
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
-% version 1.3 of this license or (at your option) any later
+% version 1.3c of this license or (at your option) any later
% version. The latest version of this license is in:
%
% http://www.latex-project.org/lppl.txt
%
-% and version 1.3 or later is part of all distributions of
-% LaTeX version 2005/12/01 or later.
+% and version 1.3c or later is part of all distributions of
+% LaTeX version 2008-06-01 or later.
%
% This work has the LPPL maintenance status ‘maintained’.
%
@@ -29,7 +28,7 @@
\ProvidesFile{bookshelf.dtx}
%</driver>
%<class>\NeedsTeXFormat{LaTeX2e}[2017/04/15]
-%<class>\ProvidesClass{bookshelf}[2020/05/24 v0.5
+%<class>\ProvidesClass{bookshelf}[2024/10/05 v1.0
%<class> Turn your bibliography into a bookshelf image]
%<*driver>
\RequirePackage{fix-cm}% included by default.
@@ -38,7 +37,8 @@
%%
%% Packages added for documentation
%%
-\usepackage{dox}% used by default. (0)%
+\usepackage[noindex]{dox}% used by default. (0)%
+
\makeatletter
\doxitem[idxtype=attribute]{Attribute}{CPK@attribute}{attributes}
\makeatother
@@ -152,21 +152,6 @@
\usepackage{luximono}% requested by author (16)%
\usepackage{mflogo}% used by default. (36)%
\usepackage[british]{babel}% used by default. (41)%
-\usepackage[backend=biber,doi=true,
- isbn=true,url=true,uniquename=false,style=apa]{biblatex}% bibliography/@arch=biblatex detected. (42)%
- \makeatletter
- \AtBeginDocument{%
- \setlength{\bibitemsep}{1ex}%
- \setlength{\bibnamesep}{1.5\itemsep}%
- \defbibheading{shortbib}[References]%
- {\section{#1}}}
- \@ifpackagewith{babel}{british}{%
- \DeclareLanguageMapping{british}%
- {british-apa}}{\relax}
- \makeatother
- \makeatletter
- \providetoggle{blx@skipbiblist}
- \makeatother
\usepackage{calc}% used by default. (50)%
\makeatletter
{\scriptsize
@@ -209,7 +194,9 @@
\setcounter{dbltopnumber}{9}
\usepackage[level]{fmtcount}% xref/@linkend➝listitem/xml:id detected. (71)%
\usepackage[a4paper,left=30mm,top=25mm,
- textwidth=150mm,textheight=225mm,headheight=15pt]{geometry}% used by default. (72)%
+ textwidth=150mm,textheight=225mm,headheight=15pt]{geometry}% used by
+ % default. (72)%
+\usepackage{biblatex}
\usepackage{hypdoc}% requested by author (78)%
\hypersetup{linkcolor=DarkBlue,urlcolor=Blue,citecolor=Red}
\ExecuteBibliographyOptions{maxcitenames=1}
@@ -468,7 +455,7 @@
%</driver>
% \fi
%
-% \CheckSum{718}
+% \CheckSum{0}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -485,7 +472,8 @@
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
-%
+%
+% \changes{v1.0}{2024/10/02}{New maintainer. Starting rewriting}
% \changes{v0.5}{2020/05/24}{Finished initial testing: Replaced hyperref with hypdoc to avoid makeindex bug.}
% \changes{v0.4}{2020/05/19}{Completed documentation: 1) Updated note on bug in biber when processing sgml.bib; 2) Removed sgml.bib as example until problems are resolved; 3) Backtracked on attempt to use the monographic title for articles, chapters, etc; 4) Revised notes on production.}
% \changes{v0.3}{2020/05/14}{Finished first pass on documentation: 1) Done preliminary testing; 2) Script adapted for Mac OS X.}
@@ -575,17 +563,19 @@
% \setcounter{tocdepth}{5}
% \setcounter{secnumdepth}{5}
% \makeatletter
-% \def\@@doxdescribe#1#2{\endgroup \ifdox@noprint\else\marginpar{\raggedleft \textcolor{DarkRed}{\@nameuse{PrintDescribe#1}{#2}}}\fi \ifdox@noindex\else\@nameuse{Special#1Index}{#2}\fi \endgroup\@esphack\ignorespaces}
% \makeatother
%
-% \def\fileversion{0.5}
-% \def\filedate{2020/05/24}
-% \title{The \textsf{bookshelf} \LaTeXe\ document class\thanks{%
+% \def\fileversion{1.0}
+% \def\filedate{2024-10-05}
+% \title{The \textsf{bookshelf} document class\thanks{%
% This document corresponds to \textsf{bookshelf}
-% \textit{v.}\ \fileversion $\beta$, dated \filedate.}
+% \textit{v.}\ \fileversion, dated \filedate.}
% \\[1em]\Large
% Turn your bibliography into a bookshelf image}
-% \author{Peter Flynn\\\normalsize Silmaril Consultants\\[-.25ex]\normalsize Instant Textual Gratification Division\\\normalsize(\url{peter@silmaril.ie})}
+% \author{Peter Flynn\\\normalsize Silmaril
+% Consultants\\[-.25ex]\normalsize Instant Textual Gratification
+% Division\\\normalsize(\url{peter@silmaril.ie})\\
+% Boris Veytsman\\\normalsize(\url{borisv@lk.net})}
% \maketitle
% \renewcommand{\abstractname}{Summary}\thispagestyle{empty}
% \begin{abstract}
@@ -593,8 +583,7 @@
% \advance\parskip by 0pt plus 2pt
% \parindent=0pt% \noindent
% The \textsf{bookshelf} package uses
-% \textsf{biblatex} and
-% \emph{biber} to turn a \BibTeX{}
+% your \BibTeX{}
% bibliography file into a randomly-coloured, randomly-sized
% shelf of books, with the title and author in a randomly-chosen
% typeface. The image (converted to {\smaller JPEG} from
@@ -602,12 +591,12 @@
% \emph{Zoom},
% \emph{Teams},
% \emph{WhatsApp} etc video calls. It
-% requires a little preliminary work with the supplied script to
+% requires a little preliminary work with the supplied scripts to
% set up a list of all your fonts, a list of colors, and a list
% of the \BibTeX{} entry names in your {\ttfamily{}.bib}
% file, but otherwise should work on any modern \TeX{}
% distribution.\par
-% \par\centering\includegraphics[width=.666\columnwidth]{myshelf.jpg}
+% \par\centering\includegraphics[width=.55\columnwidth, page=4]{spines.pdf}
% \end{abstract}
% \clearpage
% \tableofcontents
@@ -624,8 +613,46 @@
% RFC 2119 \parencite{rfc2119}.\par
% When shown in normal type, these words keep their conventional
% contextual degree of meaning.\par
+% \clearpage
+% \section*{Foreword by BV}
+% \addcontentsline{toc}{section}{Foreword by BV}
+% I have spent many hours admiring colorful bookcases produced by
+% Peter Flynn's \emph{bookshelf} package. They helped me to survive
+% many boring remote meetings during the {\smaller COVID} pandemic and its
+% aftermath. However, since my library had books in different
+% languages, I wanted to showcase them as well. I started to write
+% patches for the package, and at some point Peter kindly decided to
+% transfer the maintenance to me.
+%
+% I described the project at {\smaller
+% TUG}~2024~\parencite{Bookshelf2024}. At present the following
+% changes has been implemented:
+% \begin{enumerate}
+% \item The package now can typeset book spines in any language. It
+% automatically selects a random font capable to typeset a given
+% spine.
+% \item The new |bookshelf-listallfonts| script lists all system and \TeX\
+% fonts with ``interesting'' variants, while the new |bookshelf-mkfontsel|
+% script populates the |fontsel| directory.
+% \item The package now understands fonts in OTF, TTF
+% \item The switch from Biber to Bib\TeX\ made the processing much
+% faster, and eliminated the need for the separate |entries.tex| file:
+% now the |.bbl| file has the right format.
+% \item The switch from \emph{fontspec} to primitive font loading also
+% made the processing faster---and increased the number of fonts we
+% can display.
+% \end{enumerate}
+%
+% There is, however, a price for these improvements: now the package
+% is Lua\LaTeX-only.
+%
+% \bigskip
+% \emph{Boris Veytsman, October 2024}
% \clearpage
+% \addcontentsline{toc}{section}{Latest changes}
% \section*{Latest changes}
+% \subsection*{v.1.0(2025/10/02)}
+% New maintainer. Several rewrites.
% \subsection*{v.0.5 (2020-05-24)}
% \paragraph*{Finished initial testing}
% \begin{itemize}
@@ -656,7 +683,6 @@
% \item Done preliminary testing\par
% \item Script adapted for Mac OS X\par
% \end{itemize}
-% See p.\thinspace\pageref{changehistory} for earlier changes.
% \subsection*{Acknowledgments}
% Thanks to many people for the original
% suggestion; and to Isabel Yorke, Bethan Tovey-Walsh,
@@ -665,37 +691,36 @@
% testing comments.\par
% \clearpage
% \section{Documentation}
-% During the era of the
-% {\smaller COVID-19} lockdown, the popularity
-% of group video messaging grew rapidly, both for
-% business and domestic use. As people sought for what
-% they believed to be more representative backgrounds
-% than a messy kitchen, an untidy workroom, or a
-% sterile blank wall, a well-populated bookshelf was a
-% frequent choice.\par
-% This package is for those who cannot use (or
-% don't have, or don't want to use) such a bookshelf,
-% but can still lay their hands on a bibliography or
-% reference list in \BibTeX{} format — perhaps from a
-% recent or long-forgotten thesis, book, article, or
-% other document.\par
+% During the era of the {\smaller COVID-19} lockdown, the popularity
+% of group video messaging grew rapidly, both for business and
+% domestic use. As people sought for what they believed to be more
+% representative backgrounds than a messy kitchen, an untidy workroom,
+% or a sterile blank wall, a well-populated bookshelf was a frequent
+% choice.\par
+% This package is for those who cannot use (or don't have, or don't
+% want to use) such a bookshelf, but can still lay their hands on a
+% bibliography or reference list in \BibTeX{} format — perhaps from a
+% recent or long-forgotten thesis, book, article, or other
+% document.\par
+% You also may want to showcase your electronic library. Many
+% programs like \emph{Calibre}~\parencite{Calibre} can export the list
+% of your electronic books in Bib\TeX\ format. This is how the sample
+% library |spines.pdf| was created.\par
+% Another important use of this package is to provide a diversion
+% during long boring remote meetings. Try to guess the font the given
+% spine was typeset with---and use these tiny numbers under the books
+% to check your knowledge!
% \par\begingroup
% \fboxsep1em\centering
% \fbox{\begin{minipage}{0.8\columnwidth}\sffamily
% \raggedright\parindent0pt
% \parskip=.5\baselineskip
-% \subsubsection*{\sffamily \XeLaTeX{} and \textsf{biblatex} and
-% \emph{biber}}
-% To avoid problems with accented and other
+% \subsubsection*{\sffamily Lua\LaTeX{}}
+% To avoid problems with accented
% characters, and to make it easier to maintain,
-% this document class uses only \XeLaTeX{} and
-% \textsf{biblatex} and
-% \emph{biber}.\par
+% this document class uses only Lua\LaTeX.\par
% It will not work with the
-% \emph{pdflatex} or
-% \emph{bibtex} programs, and it does not
-% use the {\ttfamily{}.bst} files of old
-% \BibTeX{}.\par
+% \emph{pdflatex} or \XeTeX.\par
% \end{minipage}}\par\endgroup
% This is a work-in-progress: there are bugs (see \vref{bugs}).\par
% \subsection{What the package does}
@@ -712,40 +737,25 @@
% line.\par
% \subsection{Preparation}
% To get things ready for this, you need to install this
-% document class, and provide the following files.\par
+% document class, and provide the following data:
% \begin{enumerate}
-% \item Your \BibTeX{} file;
-% \item A list of all the entry values;
-% \item A list of all your usable text fonts;
-% \item A command defining how many such fonts;
+% \item The list of book as a \BibTeX{} file.
+% \item A list of all your usable text fonts and the total number of
+% them.
% \item A list of all the colors to choose from.
% \end{enumerate}
% These are explained in more detail in the subsections
% below.\par
-% All but the first of these can be generated by the
-% supplied shell script {\ttfamily{}prepdata.sh}. This
-% works on UNIX/GNU Linux and on Apple Mac OS X, and may work
-% in CygWin, but needs more work for plain Windows.\par
% \subsubsection{Your \BibTeX{} file}
% Your \BibTeX{} ({\ttfamily{}.bib}) file,
% suitable for use with \emph{biber}
% rather than \emph{bibtex}.\par
-% Old \BibTeX{} files will work, but possibly not
-% optimally: if you want to update them, see \vref{bibchanges} for what to edit; but this is not
-% needed for this class.\par
-% One thing that may help is to replace all the
+% You may need to replace all the
% old-style symbolic notation accented characters like
% \verb|{\"a}| for
% `ä' and
% \verb|{\l}| for
-% `ł'. Not only is the symbolic
-% notation no longer needed because \XeLaTeX{} and the
-% \emph{biber} program handle
-% {\smaller UTF-8} characters, which the old
-% \emph{bibtex} program doesn't; the
-% discipline of replacing helps to reduce the problem of
-% unmatched curly braces, which is one of the biggest
-% sources of errors in \BibTeX{} files.\par
+% `ł'. \par
% If you have a bibliography in
% \emph{EndNote},
% \emph{Mendeley},
@@ -758,44 +768,35 @@
% converted to \BibTeX{} by opening it in
% \emph{JabRef} and saving it
% as \BibTeX{}.\par
-% \subsubsection{Entry values}
-% A list of all the entry values from your \BibTeX{} file
-% (the unique names immediately after the document type),
-% each given as the argument to a
-% \verb|\makebook}{...}| command in a file called
-% {\ttfamily{}entries.tex}.\par
% \subsubsection{Font file list}\label{fontfiles}
-% A set of 1–line files in a subdirectory called
-% {\ttfamily{}fontsel} representing of all the
-% usable text fonts on your system that you wish to use;
-% that is, excluding broken or partial fonts, symbols, math,
-% non-Latin characters or alphabets, and display or non-text
-% fonts.\par
+% A set of 2–line files in a subdirectory called
+% |fontsel| representing of all the
+% usable text fonts on your system.\par
% Each file {\sffamily {\smaller MUST}} be
% numbered sequentially in its name (eg
% {\ttfamily{}1.tex}, {\ttfamily{}2.tex},
% {\ttfamily{}3.tex}, etc) and
-% {\sffamily {\smaller MUST}} contain a
-% \verb|\newfontface{SILmfont}{...}| command for
-% the font name \emph{and} a definition of its
-% name in a \verb|\SILmfontname{...}| command
-% (see the examples generated by the
-% {\ttfamily{}prepdata.sh} script). Be aware that
-% many fonts on your system may not be suitable for setting
-% normal text: see the comments in the script\par
-% These files are entirely dependent on your system
-% because everyone has a different set of fonts.\par
+% {\sffamily {\smaller MUST}} contain a |\font| command and define
+% the name of the font, for example
+% \begin{verbatim}
+% \font\SILmfont={[/usr/local/texlive/2024/texmf-dist/fonts/opentype/public/junicode/Junicode-SmCondMediumItalic.otf]:+clig;+liga;+tlig;+swsh}\SILmfont
+% \def\SILmfontname{Junicode SmCond Medium Italic; Swash}%
+% \end{verbatim}
+% This list can be created using the scripts |bookshelf-listallfonts| and
+% |bookshelf-mkfontsel|, see~\vref{sec:scripts}.
% \subsubsection{Maximum number of fonts}
% A file called {\ttfamily{}pickfont.tex}
% containing a
% \verb|\setcounter{SIL@maxfont}{...}| command to
% set the total number of the fonts which are represented in
% the {\ttfamily{}fontsel} subdirectory above\par
+% This file can be created using the scripts |bookshelf-listallfonts| and
+% |bookshelf-mkfontsel|, see~\vref{sec:scripts}.
% \subsubsection{List of colors}
% A list of all the colors represented by the
% {\smaller SVG} palette used by the
-% \textsf{xcolor} package: the file created by
-% the script is called {\ttfamily{}svgnam.tex}.
+% \textsf{xcolor} package: the file is called
+% called {\ttfamily{}svgnam.tex}.
% This contains three definitions:\par
% \begin{enumerate}
% \item the command {\ttfamily{}\textbackslash{}SIL@svgcolname}
@@ -809,74 +810,72 @@
% \item the counter {\ttfamily{}SIL@maxcolno} which holds
% the number of colors available.\par
% \end{enumerate}
+% This file is included in the distribution.
+%
+% In the previous versions of the ditribution it was created with the
+% from |svgnam.def| database. The script |svgnam.sh| is retained in
+% the distribution and can be used to recreate the file.
+%
% \subsection{Producing your bookshelf}
-% This class comes with a file
-% {\ttfamily{}test.tex} which you can use to test your
-% file of references. It is initially set just to make the
-% {\ttfamily{}test.aux} file that
-% \emph{biber} needs to create your
-% {\ttfamily{}test.bbl} bibliography file; that is, it
-% will \emph{not} try to run the shell script
-% \emph{or} to create a bookshelf the first time
-% round, until everything else is ready.\par
+%
+% \subsubsection{Producing the list of fonts}
+% \label{sec:scripts}
+%
+% Each system has its own fonts installed, so you need to create the
+% list of fonts installed on \emph{your} system. It is done in three
+% steps.
% \begin{enumerate}
-% \item Run the shell script with your
-% {\ttfamily{}.bib} filename as the argument,
-% eg;
-% \iffalse
-%<*ignore>
-% \fi
-\begin{lstlisting}[language={[LaTeX]TeX}]
-$ ./prepdata.sh mythesis.bib
-\end{lstlisting}
-% \iffalse
-%</ignore>
-% \fi
-% \item Edit the {\ttfamily{}test.tex} file and
-% change the name of the {\ttfamily{}.bib} file in
-% the {\ttfamily{}\textbackslash{}addbibresource} command to the
-% name of your own file\par
-% Leave the two lines {\ttfamily{}\textbackslash{}immediate} and
-% {\ttfamily{}\textbackslash{}input} commented out for the
-% moment;
-% \item Delete any {\ttfamily{}test.aux} or
-% {\ttfamily{}test.bbl} files in the directory in
-% which you are doing this;
-% \item Typeset the test file with \XeLaTeX{}. You should get
-% three messages:\par
-% \iffalse
-%<*ignore>
-% \fi
-\begin{lstlisting}[language={[LaTeX]TeX}]
-LaTeX Warning: Empty bibliography on input line 12.
-LaTeX Warning: There were undefined references.
-Package biblatex Warning: Please (re)run Biber on the file:
-(biblatex) test
-(biblatex) and rerun LaTeX afterwards.
-\end{lstlisting}
-% \iffalse
-%</ignore>
-% \fi
-% \item Process the test file with
-% \emph{biber}
-% (\emph{not} \emph{bibtex}). You will probably
-% get many warning messages: ignore them. If you get a
-% fatal error, however, you will need to find the problem
-% in your {\ttfamily{}.bib} file and fix it before
-% going any further.\par
-% See also the known bug at item~\ref{sgmlbib} in the list on p.\thinspace\pageref{sgmlbib};
-% \item Edit the test file and
-% \emph{un}comment the line starting
-% {\ttfamily{}\textbackslash{}input}, save the file, and retypeset
-% it twice.
+% \item Update the database of fonts known to Lua\TeX:
+% \begin{verbatim}
+% luaotfload-tool --update --force
+% \end{verbatim}
+% The key |--force| forces the update even if Lua\TeX\ thinks it is
+% not necessary: sometimes it is mistaken.
+% \item Create the list of the usable fonts and font variants:
+% \begin{verbatim}
+% bookshelf-listallfonts [options] > allfonts
+% \end{verbatim}
+% The script lists all fonts in {\smaller OTF, TTF} or {\smaller TTC}
+% format, known to Lua\LaTeX. For scripts in {\smaller OTF} and
+% {\smaller TTF} format it looks at the ``interesting'' Open Type
+% features like swash and stylistic variant and lists them too. This
+% means that the bookshelf might have spines typeset in the different
+% variants of the same font---they are considered different fonts!
+% You can change the list of feaures using the key |-f FEATURES_FILE|;
+% see the |doc| directory for an example. The script tries to exclude
+% broken font files; you can change the list with the key
+% |-x EXCLUDED_PATTERNS|. Again, there is an example in the |doc|
+% directory.
+% \item Create the |fontsel| directory and the file |pickfont.tex|
+% using the command
+% \begin{verbatim}
+% bookshelf-mkfontsel allfonts
+% \end{verbatim}
% \end{enumerate}
-% You should now have a {\smaller PDF} bookshelf!
-% The books are in the order in which they appear in your
-% {\ttfamily{}.bib} file because the script creates
-% the list of entries to process in that order, regardless of
-% what \emph{biblatex} or
-% \emph{biber} are configured to
-% do.\par
+%
+% \subsubsection{Driver file}
+%
+% The distribution contains the file |spines.tex|
+% \begin{verbatim}
+% % !TEX TS-program = lualatex
+% % !TEX encoding = UTF-8 Unicode
+% % !BIB TS-program = bibtex
+% \documentclass[landscape]{bookshelf}
+% \begin{document}
+% \nocite{*}
+% \bibliography{sample}
+% \bibliographystyle{bookshelf}
+% \end{document}
+% \end{verbatim}
+%
+% Change |sample| to the name of your bibliography, and typeset the
+% file using |lualatex| and | bibtex|.
+%
+% You should see your books nicely placed on the shelves. The small
+% numbers under each book are meaningful: they are the line numbers in
+% the |allfonts| file. You may use them if you play ``Guess the
+% font'' game.
+%
% \subsubsection{Options}
% The class comes set for making an
% \textbf{\texttt{a0paper}} page (1189 mm × 841 mm
@@ -893,127 +892,14 @@ Package biblatex Warning: Please (re)run Biber on the file:
% There is also a \textbf{\texttt{portrait}} option to
% produce the page in that format instead of
% landscape.\par
-% \subsection{Changes between \BibTeX{} fields and
-% \emph{biblatex}}\label{bibchanges}
-% This has been expanded from the description provided in
-% \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=33}{§2.3
-% of the online documentation for
-% \textsf{biblatex}} v3.14 (1 December
-% 2019).\par
-% This is for information only. You do not need to do any
-% of this to use the \index{bookshelf=\textsf{bookshelf} (class)}\textsf{bookshelf} document
-% class unless you encounter errors processing your
-% {\ttfamily{}.bib} file.\par
-% \begin{enumerate}
-% \item The entry type {\ttfamily{}@inbook}
-% (basically only use this where each chapter of the book
-% is written by a different author). See \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=8}{§2.1.1}
-% and \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=33}{§2.3.1}
-% for details.\par
-% \item Replace {\ttfamily{}school} with {\ttfamily{}institution} for theses;
-% replace {\ttfamily{}publisher} with {\ttfamily{}organization} for manuals
-% and conference sponsors;
-% and replace {\ttfamily{}address} with {\ttfamily{}location}. See \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=17}{§2.2.2},
-% \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=32}{§2.2.5},
-% and \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=34}{§2.3.4}
-% for details.\par
-% \item The handling of certain types of titles. See \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=35}{§2.3.5}
-% for details. Replace {\ttfamily{}journal} with
-% {\ttfamily{}journaltitle} in {\ttfamily{}@article} entries.\par
-% \item The field {\ttfamily{}series}: only
-% use it for journal series; for the main title of
-% multi-volume works use {\ttfamily{}maintitle}.
-% See \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=17}{§2.2.2}
-% and \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=37}{§2.3.7}
-% for details.\par
-% \item The fields {\ttfamily{}year} and {\ttfamily{}month} must be
-% integers; {\ttfamily{}month} {\sffamily {\smaller MUST NOT}} be
-% alphabetic. The field {\ttfamily{}date} {\sffamily {\smaller MUST}} be an
-% {\smaller ISO} 8601 date in the format
-% {\ttfamily{}yyyy-mm-dd}. See \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=17}{§2.2.2},
-% \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=38}{§2.3.8},
-% and \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=39}{§2.3.9}
-% for details.\par
-% \item The field {\ttfamily{}edition} must
-% be an integer with no ordinal indicator or abbreviation
-% `ed'. See \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=17}{§2.2.2}
-% for details.\par
-% \item Replace {\ttfamily{}key} with
-% {\ttfamily{}label}. See \href{http://mirrors.ctan.org/macros/latex/contrib/biblatex/doc/biblatex.pdf\#page=33}{§2.3.2}
-% for details.\par
-% \end{enumerate}
-% Most of this is for creating new entries. For converting
-% \BibTeX{} files for use with
-% \emph{biblatex}, just change the field
-% names as in items 2, 3, 4, and 7; and make sure your months
-% and editions are integers.\par
+%
% \subsection{Bugs}\label{bugs}
% Some things don't yet work as they should, and
% there are some features that may or may not make
-% the final cut.\par
-% \begin{enumerate}
-% \item The shell script doesn't run on Windows
-% because I don't have any Windows. If someone
-% would write some Powershell I could include it
-% in a later version.\par
-% \item There is no conscious
-% `line'-breaking when a
-% row of books comes to the
-% {\ttfamily{}\textbackslash{}pagewidth}, and as it is
-% deliberately set
-% {\ttfamily{}\textbackslash{}raggedright} (because you
-% can't hyphenate a book and variable space
-% between books seems to be a silly idea), there
-% is no filler at the ends of lines to complete
-% the `shelf' (which is
-% in any case just a bar below each
-% book).\par
-% \item \label{sgmlbib}A test with a bibliography file from
-% Nelson Beebe's collection
-% ({\ttfamily{}sgml.bib}) generated a
-% {\ttfamily{}test.bbl} with a missing
-% closing curly brace, terminating (or rather,
-% failing to terminate) the
-% {\ttfamily{}\textbackslash{}name} command for an entry.
-% This appears to be a known bug in
-% \emph{biber} which is
-% being fixed in the version 2.15.\par
-% \item There seems to be a recurrent problem with
-% certain entries and certain fonts where the
-% length of the title is measured as 0.0pt which
-% causes an unresolvable problem for the routine
-% which assigns space and layout. Any
-% suggestions as to why this occurs are
-% welcomed.\par
-% \item The objective of the field re-expressions
-% (see \vref{fields}) was to make sure the book
-% spine for journal {\ttfamily{}@article}, {\ttfamily{}@incollection}, and
-% {\ttfamily{}@inbook} entry
-% types reflected the \emph{book}
-% or \emph{journal} title, not the
-% title of the article or chapter. This may or
-% may not be a good idea.\par
-% \item During development, it became obvious that
-% the number of fonts on many systems can be
-% very large. The
-% {\ttfamily{}prepdata.sh} script
-% currently includes the exclusions I made on
-% {\smaller UNIX}/{\smaller GNU}
-% Linux and Apple Mac {\smaller OS X} in
-% order to get a set of fonts that did not issue
-% errors (bearing in mind we are using
-% \textsf{fontspec}, so for simplicity
-% the script deals only with TrueType and
-% OpenType fonts, not Postscript Type 1 or
-% Type 3, or font packaging systems like
-% \emph{Suitcase} or True
-% Type Collections). I am not aware of any
-% easily-accessible machine-readable list or
-% {\smaller API} for identifying normal
-% text fonts by name (there are commercial
-% databases but that is outside the scope of
-% this document class).\par
-% \end{enumerate}
+% the final cut. Please report bugs at
+% \url{https://github.com/borisveytsman/bookshelf}\par
+%
+%
% \StopEventually{\label{endcode}%
% \clearpage
% \newgeometry{left=3cm}%
@@ -1237,25 +1123,6 @@ Package biblatex Warning: Please (re)run Biber on the file:
nofoot,margin=1cm]{geometry}%
% \end{macrocode}
% \end{CPK@package}
-% \begin{CPK@package}{biblatex}
-% Use \textsf{biblatex} instead of \BibTeX{};
-% \iffalse
-%% Use biblatex instead of \BibTeX{}
-% \fi
-% \begin{macrocode}
-\RequirePackage[backend=biber,style=authoryear,
- doi=true,isbn=true,url=true,uniquename=false]{biblatex}%
- \AtBeginDocument{%
- \setlength{\bibitemsep}{1ex}%
- \setlength{\bibnamesep}{1.5\itemsep}%
- \defbibheading{shortbib}[References]%
- {\section{#1}}}
- \@ifpackagewith{babel}{british}{%
- \DeclareLanguageMapping{british}%
- {british-apa}}{\relax}
- \providetoggle{blx@skipbiblist}
-% \end{macrocode}
-% \end{CPK@package}
%
% \subsection{Non-package resources}
% \iffalse
@@ -1508,18 +1375,201 @@ Package biblatex Warning: Please (re)run Biber on the file:
\fboxsep1em\fboxrule.1pt
\pagestyle{empty}
% \end{macrocode}
+%
+% \subsubsection{Auxillary macro: fitting text in a box}
+%
+% \begin{CPK@macro}{\SIL@fittext}\label{macro--SIL@fittext}
+% For typesetting title we use an auxillary macro |\SIL@fittext|. It
+% has four parameters: the text to be typeset, the width ($W$), the
+% height $H$, and the box $W\times H$ to put the text into. We want
+% to get the maximal font size that still fits in the box.
+% Unfortunately there is a limitation on the maximal number of fonts
+% \TeX\ can handle (currently 9000 by default). Since each size
+% change counts as a new font, things can quickly go out of hand.
+% Therefore instead of scaling the font we scale the box.
+%
+% So our aim is to find the maximal scaling factor $S$ such as (1)~the
+% text is typeset in a $w\times h$ box, (2)~the text box scales to the
+% given width, $W=Sw$, (3)~the text box does not overflow the height,
+% $H\le Sh$.
+%
+% The algorithm is the following:
+% \begin{enumerate}
+% \item If the text fits in one line, we expand the box for the line
+% to occupy $W$, setting $S=W/w$.
+% \item Otherwise, we try to typeset the text in the box of horizontal
+% size $W$ ($S=1$) and calculate box height $h$. We determine how
+% much we can expand or shrink the box, setting $S=H/h$.
+% \item We typeset the text in the box of width $w=W/S$.
+% \item Due to changed line breaks its height $h$ might be higher than
+% $H/S$. In this case we start to decrease $S$ by 5\% on each step
+% and repeat typesetting until $w\le W/S$
+% \end{enumerate}
+%
+% Now, the implementation.
+%
+% First, we calculate $W$ and $H$ by stripping the pt dimension
+% \begin{macrocode}
+\def\SIL@fittext#1#2#3#4{%
+ \@tempdima=#2\relax
+ \edef\SIL@W{\strip@pt\@tempdima}%
+ \@tempdima=#3\relax
+ \edef\SIL@H{\strip@pt\@tempdima}%
+% \end{macrocode}
+% Try to set up the text in one line
+% \begin{macrocode}
+ \setbox#4=\hbox{\raggedright\noindent#1}%
+ \@tempdima=\wd#4\relax
+ \edef\SIL@w{\strip@pt\@tempdima}%
+ \ifdim#2>\@tempdima\relax
+ \FPeval\SIL@S{\SIL@W/\SIL@w}%
+ \typeout{Text fits in one line: have H=\SIL@w pt, want \SIL@W pt}%
+ \typeout{Trying S=\SIL@S}%
+ \else
+% \end{macrocode}
+% We start with the scale factor $S=1$. We add |\vskip0pt| to the
+% text to set the box depth to zero.
+% \begin{macrocode}
+ \typeout{Text does not fit in one line}%
+ \def\SIL@S{1}%
+ \FPeval\SIL@w{\SIL@W/\SIL@S}%
+ \setbox#4=\vbox{\hsize=\SIL@w pt\relax
+ \raggedright\noindent#1\vskip0pt}%
+ \@tempdima=\ht#4\relax
+ \edef\SIL@h{\strip@pt\@tempdima}%
+ \@tempdima = \SIL@S \@tempdima\relax
+ \typeout{Trying S=\SIL@S. Got H=\the\@tempdima. Want \SIL@H pt}%
+ \FPeval\SIL@S{\SIL@H/\SIL@h}%
+ \fi
+% \end{macrocode}
+% Rescaling the box for the first time. If $S$ on the previous step
+% is below 1, start again with 1.
+% \begin{macrocode}
+ \FPmax\SIL@S\SIL@S{1}%
+ \FPeval\SIL@w{\SIL@W/\SIL@S}%
+ \setbox#4=\vbox{\hsize=\SIL@w pt\relax
+ \raggedright\noindent#1\vskip0pt}%
+ \@tempdima=\ht#4\relax
+ \edef\SIL@h{\strip@pt\@tempdima}%
+ \@tempdima = \SIL@S \@tempdima\relax
+ \typeout{Trying S=\SIL@S. Got H=\the\@tempdima. Want \SIL@H pt}%
+% \end{macrocode}
+% If the text does not fit, keep reducing it by 5\% at a type
+% \begin{macrocode}
+ \ifdim\@tempdima>#3\relax
+ \loop
+ \FPeval\SIL@S{0.95*\SIL@S}%
+ \FPeval\SIL@w{\SIL@W/\SIL@S}%
+ \setbox#4=\vbox{\hsize=\SIL@w pt\relax
+ \raggedright\noindent#1\vskip0pt}%
+ \@tempdima=\ht#4\relax
+ \edef\SIL@h{\strip@pt\@tempdima}%
+ \@tempdima = \SIL@S \@tempdima\relax
+ \typeout{Trying S=\SIL@S. Got H=\the\@tempdima. Want \SIL@H pt}%
+ \ifdim\@tempdima>#3\repeat
+ \fi
+% \end{macrocode}
+% And the final typesetting
+% \begin{macrocode}
+ \setbox#4=\vbox to #3{\hsize=#2\relax
+ \vfill
+ \noindent
+ \scalebox{\SIL@S}{\vbox{\hsize=\SIL@w pt\relax
+ \raggedright\noindent#1\vskip0pt}}%
+ \vfill}%
+}
+% \end{macrocode}
+%
+% \end{CPK@macro}
+%
+%
+% \subsubsection{Selecting the font for the book}\label{fontsel}
+%
+% In a multilingual library some books can be typeset only in specific
+% fonts. Here we randomly select a font to typeset the given book.
+%
+% We define a macro that checks whether the given string can be
+% typeset in the font just defined by fontspec.
+%
+% We write the program in expl3 syntax because it has nice mapping
+% subroutines and becasue fontspec internal variables are in expl3.
+%
+% \begin{macrocode}
+\ExplSyntaxOn
+% \end{macrocode}
+% An auxillary routine checking whether the character can be typeset
+% with the current font. Copied from fontspec internals
+% \begin{macrocode}
+\prg_new_conditional:Nnn \__SIL_primitive_font_glyph_if_exists:n {TF,F}
+ {
+ \tex_iffontchar:D \SILmfont `#1 \scan_stop:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+% \end{macrocode}
+% And the document command
+% \begin{macrocode}
+\prg_new_conditional:Nnn \__SIL_can_typeset:n {TF}
+ {
+ \typeout{Trying ~ to ~ typeset ~ #1}
+ \bool_set_true:N \l_tmpa_bool
+ \str_map_inline:nn {#1} {
+ \__SIL_primitive_font_glyph_if_exists:nTF {##1} {}{
+ \bool_set_false:N \l_tmpa_bool
+ \typeout{Cannot ~ typeset ~ ##1}
+ \str_map_break:
+ }
+ }
+ \bool_if:nTF \l_tmpa_bool {\prg_return_true:} {\prg_return_false:}
+}
+
+\cs_generate_variant:Nn \__SIL_can_typeset:nTF {x}
+
+\NewDocumentCommand\CanTypesetTF { m m m}{
+ \__SIL_can_typeset:xTF{#1}{#2}{#3}
+}
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% We define some counters and flags for the font selection
+% \begin{macrocode}
+\def\SIL@maxfonttries{100}
+\newif\ifSIL@fontfound
+% \end{macrocode}
+%
+%
+% Another twist is that we cannot have too many fonts used. Therefore
+% we add all fontsel files to a stack, and after having
+% 2100 of them, we reuse opened files. Again, it is easy to do in
+% expl3.
+% \begin{macrocode}
+\ExplSyntaxOn
+\seq_new:N \l__SIL_fontstack
+\NewDocumentCommand\AddFontToStack {m} {%
+ \seq_gput_right:Ne \l__SIL_fontstack {#1}
+}
+\NewDocumentCommand\ReuseFont {} {
+ \seq_rand_item:N \l__SIL_fontstack
+}
+\ExplSyntaxOff
+\newcount\SIL@num@fontsel@files
+\SIL@num@fontsel@files=0
+\def\SIL@max@fontsel@files{5500}
+% \end{macrocode}
+%
% \subsubsection{Making the book}\label{mb}
% The {\ttfamily{}\textbackslash{}makebook} macro is huge, and
% handles all the detail of making a book spine. It takes
-% one mandatory argument: a \BibTeX{} entry label value from
-% the declared \BibTeX{} {\ttfamily{}.bib} file in
-% {\ttfamily{}\textbackslash{}addbibresource}.\par
+% two mandatory arguments: the author and the title of the
+% book.\par
% \begin{CPK@macro}{\makebook}\label{macro--makebook}
% Start by announcing the entry label and setting the
% values that need to be reset every time.\par
% \begin{macrocode}
-\newcommand{\makebook}[1]{%
- \typeout{^^J#1}%
+\newcommand{\makebook}[2]{%
+ \typeout{^^JTypesetting #1---#2}%
\setcounter{SIL@maxloop}{10}%
\setcounter{SIL@loopcount}{0}%
% observed
@@ -1574,7 +1624,7 @@ Package biblatex Warning: Please (re)run Biber on the file:
% colors are separated enough, and come from opposite
% sides of the split point. If the loop makes \DescribeCounter{SIL@maxloop}{\ttfamily{}SIL@maxloop}
% iterations without finding a pair of values, use
-% whatever was tested last.\par
+% the default white on black.\par
% \begin{macrocode}
\ifdim\SIL@bgval<\SIL@splitpoint
\ifdim\SIL@fgval>\SIL@splitpoint
@@ -1607,6 +1657,11 @@ Package biblatex Warning: Please (re)run Biber on the file:
\theSIL@bgcolno}}%
\def\SIL@fgcol{\SIL@svgcolname{%
\theSIL@fgcolno}}%
+ \ifnum\c@SIL@loopcount>\c@SIL@maxloop
+ \typeout{Using default colors after \the\c@SIL@maxloop\space attempts}%
+ \def\SIL@bgcol{Black}%
+ \def\SIL@fgcol{White}%
+ \fi
\typeout{BG=\SIL@bgcol, FG=\SIL@fgcol}%
% \end{macrocode}
% Now pick a random font: the files generated by
@@ -1619,10 +1674,33 @@ Package biblatex Warning: Please (re)run Biber on the file:
% {\ttfamily{}\textbackslash{}SILmfontname} as the name (for the
% same reason).\par
% \begin{macrocode}
- \setrannum{\c@SIL@fontsel}{1}{\c@SIL@maxfont}%
- \input{fontsel/\theSIL@fontsel.tex}%
+ \c@SIL@loopcount=1\relax
+ \loop
+ \ifnum\SIL@num@fontsel@files<\SIL@max@fontsel@files
+ \advance\SIL@num@fontsel@files by 1\relax
+ \typeout{Opening new fontsel file, counter=\the\SIL@num@fontsel@files}%
+ \setrannum{\c@SIL@fontsel}{1}{\c@SIL@maxfont}%
+ \AddFontToStack{\the\c@SIL@fontsel}%
+ \else
+ \typeout{Reusing fontsel file}%
+ \expandafter\c@SIL@fontsel\ReuseFont\relax
+ \fi
+ \input{fontsel/\theSIL@fontsel.tex}\unskip%
+ \typeout{Trying \SILmfontname, attempt \the\c@SIL@loopcount}%
+ \CanTypesetTF{#2---#1}{\global
+ \SIL@fontfoundtrue}{\global
+ \SIL@fontfoundfalse}%
+ \ifSIL@fontfound
+ \c@SIL@loopcount=\SIL@maxfonttries\relax
+ \else
+ \addtocounter{SIL@loopcount}{1}%
+ \fi
+ \ifnum\c@SIL@loopcount<\SIL@maxfonttries\repeat
+ \ifSIL@fontfound
\typeout{Set in \SILmfontname}%
% \end{macrocode}
+%
+%
% Measure the author width and height at the default
% size (10pt). If the author fits in 90\% of the
% maximum width of the book, we put it at the top of the
@@ -1632,10 +1710,10 @@ Package biblatex Warning: Please (re)run Biber on the file:
% point and won't change later.\par
% \begin{macrocode}
\settowidth{\SIL@authorwidth}{%
- \SILmfont\citefullauthor{#1}}%
+ \SILmfont#1}%
\typeout{Author width: \the\SIL@authorwidth}%
\settoheight{\SIL@authorheight}{%
- \SILmfont\citefullauthor{#1}}%
+ \SILmfont#1}%
\typeout{Author height: \the\SIL@authorheight}%
\ifdim\SIL@authorwidth<.9\SIL@maxbookwidth
\typeout{Author width is less than 90\%
@@ -1655,34 +1733,6 @@ Package biblatex Warning: Please (re)run Biber on the file:
\the\SIL@maxbookwidth}%
\fi
% \end{macrocode}
-% Now measure the title, with an em rule and the
-% author if it hasn't been assigned to the top of the
-% spine.\par
-% \begin{macrocode}
- \settowidth{\SIL@titlewidth}{%
- \SILmfont\citetitle{#1}}%
- \ifdim\SIL@titlewidth=0pt
- \typeout{WARNING title width for entry "#1"
- set in \SILmfontname=0pt!}%
- \typeout{Likely that the entry has faulty
- syntax or a bogus title field}%
- \typeout{or a BiBTeX management or
- crossref setting is being misinterpreted.}%
- \typeout{I can't go any further until you
- fix this, sorry}%
- \end{document}%
- \fi
- \ifSIL@topauthor
- \typeout{Title width: \the\SIL@titlewidth}%
- \else
- \addtolength{\SIL@titlewidth}{%
- \widthof{\SILmfont~~—~~}}%
- \addtolength{\SIL@titlewidth}{%
- \SIL@authorwidth}%
- \typeout{Title width with em rule and author:
- \the\SIL@titlewidth}%
- \fi
-% \end{macrocode}
% We now have enough data to make a shot at the
% dimensions. Pick a random book height and set the height
% available for the title (set sideways) to 90\% of
@@ -1721,94 +1771,6 @@ Package biblatex Warning: Please (re)run Biber on the file:
\the\SIL@bookwidth}%
\fi
% \end{macrocode}
-% See how the title will fit the space: if it's
-% smaller, it will fit on one line, but we scale it up so
-% it occupies more of the space available. To do this, we
-% perform fixed-point arithmetic on the space it takes and
-% the space available, and use the resulting decimal
-% fraction later to scale the title. However, if the value
-% resulting is greater than four, set it to four,
-% otherwise the title will be too big to fit. The value
-% four was obtained by inspection and trial and
-% error.\par
-% \begin{macrocode}
- \ifdim\SIL@titlewidth<\SIL@heightfortitle
- \typeout{Titling fits in
- \the\SIL@heightfortitle}%
- \SIL@titleonelinetrue
- \edef\titleval{\strip@pt\SIL@titlewidth}%
- \edef\heightval{\strip@pt\SIL@heightfortitle}%
- \FPeval\SIL@scaledtitle{\heightval/\titleval}%
- \typeout{Scaling 1-line title by
- \SIL@scaledtitle}%
- \expandafter\SIL@scaleint
- \SIL@scaledtitle\sentinel
- \ifnum\c@SIL@scale>4
- \gdef\SIL@scaledtitle{4}%
- \typeout{Resetting scale \theSIL@scale\ to
- \SIL@scaledtitle}%
- \fi
-% \end{macrocode}
-% Otherwise (too long) the title needs to be set in a
-% box as a multi-line title. This gets complicated:\par
-% \begin{enumerate}
-% \item set the title in a {\ttfamily{}\textbackslash{}vbox} and
-% then add the height and depth it occupies to get the
-% height of the set title;
-% \item if that height is more than the width of the
-% book, use the method above to divide the available
-% height by the [over]used height and use that to reduce
-% the point size by deducting it from 10 (points);
-% \item otherwise (the multiline title fits in the width
-% of the book), do the reverse and increase the point
-% size to take advantage of the extra space by adding it
-% to 10pt.\par
-% \end{enumerate}
-% \begin{macrocode}
- \else
- \typeout{Titling won't fit
- \the\SIL@heightfortitle}%
- \SIL@titleonelinefalse
- \setbox\SIL@titlebox=\vbox{%
- \hsize\SIL@heightfortitle
- \SILmfont\raggedright
- \vrule height1em width0pt
- \bfseries\citetitle{#1}%
- \vrule depth.2em width0pt
- }%
- \setlength{\SIL@titleheight}%
- {\ht\SIL@titlebox + \dp\SIL@titlebox}%
- \typeout{Multiline title takes
- \the\SIL@titleheight}%
- \ifdim\SIL@titleheight>\SIL@bookwidth
- \typeout{Height of title
- \the\SIL@titleheight\
- is greater than
- \the\SIL@bookwidth}%
- \edef\titleval{\strip@pt\SIL@titleheight}%
- \edef\heightval{\strip@pt\SIL@bookwidth}%
- \FPeval\SIL@scaledtitle
- {10 - \heightval / \titleval}%
- \typeout{10 - \heightval\ ÷ \titleval\
- = \SIL@scaledtitle}%
- \typeout{Using smaller font \SIL@scaledtitle
- pt for multiline title}%
- \else
- \typeout{Height of title
- \the\SIL@titleheight\
- is less than
- \the\SIL@bookwidth}%
- \edef\titleval{\strip@pt\SIL@titleheight}%
- \edef\heightval{\strip@pt\SIL@bookwidth}%
- \FPeval\SIL@scaledtitle
- {10 + \heightval / \titleval}%
- \typeout{10 + \heightval\ ÷ \titleval\
- = \SIL@scaledtitle}%
- \typeout{Using larger font \SIL@scaledtitle
- pt for multiline title}%
- \fi
- \fi
-% \end{macrocode}
% Finally, set a {\ttfamily{}\textbackslash{}vbox} to the
% defined width \emph{less} the space
% occupied by the {\ttfamily{}\textbackslash{}fcolorbox} border and
@@ -1833,53 +1795,21 @@ Package biblatex Warning: Please (re)run Biber on the file:
hsize=\the\SIL@bookwidth}%
\centering
\SILmfont\color{\SIL@fgcol}%
- \citefullauthor{#1}%
+ #1%
\par\vfill
- \rotatebox{90}{\vbox to\SIL@bookwidth{%
- \hsize\SIL@heightfortitle
- \null\vfill
- \typeout{Title in a vbox to
- \the\SIL@bookwidth,
- hsize=\the\SIL@heightfortitle}%
- \raggedright\color{\SIL@fgcol}%
- \ifSIL@titleoneline
- \scalebox{\SIL@scaledtitle}%
- {\bfseries\citetitle{#1}}%
- \else
- \fontsize{\SIL@scaledtitle}%
- {\SIL@scaledtitle}\selectfont
- \bfseries\citetitle{#1}%
- \fi
- \par\vfill}%
+ \SIL@fittext{\color{\SIL@fgcol}\SILmfont
+ #2}{\SIL@heightfortitle}{\SIL@bookwidth}%
+ {\SIL@titlebox}%
+ \rotatebox{90}{\box\SIL@titlebox}%
}%
- }%
\else
\typeout{Setting author inline to title}%
\vbox to\SIL@bookheight{\hsize\SIL@bookwidth
- \typeout{Spine is a vbox to
- \the\SIL@bookheight,
- hsize=\the\SIL@bookwidth}%
- \centering
- \SILmfont\color{\SIL@fgcol}%
- \rotatebox{90}{\vbox to\SIL@bookwidth{%
- \hsize\SIL@heightfortitle
- \null\vfill
- \typeout{Title and author in a vbox to
- \the\SIL@bookwidth,
- hsize=\the\SIL@heightfortitle}%
- \raggedright\color{\SIL@fgcol}%
- \ifSIL@titleoneline
- \scalebox{\SIL@scaledtitle}%
- {{\bfseries\citetitle{#1}}\quad
- —\ \ \citefullauthor{#1}}%
- \else
- \fontsize{\SIL@scaledtitle}%
- {\SIL@scaledtitle}\selectfont
- {\bfseries\citetitle{#1}}\quad
- —\ \ \citefullauthor{#1}%
- \fi
- \par\vfill}%
- }%
+ \SIL@fittext{\color{\SIL@fgcol}\SILmfont
+ #1\quad
+ ---\quad#2}{\SIL@bookheight}{\SIL@bookwidth}%
+ {\SIL@titlebox}%
+ \rotatebox{90}{\box\SIL@titlebox}%
}%
\fi
}%
@@ -1888,64 +1818,24 @@ Package biblatex Warning: Please (re)run Biber on the file:
% shelf the books stand on. The number is the number of
% the font that was selected, and is there for
% error-tracing purposes only.\par
-% Despite best efforts at ending all
-% non-control-sequence line-ends with a percent shield,
-% space is creeping in somewhere, so the final negative
-% kern removes it.\par
% \begin{macrocode}
- \\\fboxsep0pt\fboxrule0pt
+ \\\fboxsep0pt\fboxrule0pt%
\colorbox{BurlyWood}{\hbox to\hsize{%
\hfil\vrule height3mm depth6mm width0pt
\normalfont\scriptsize\theSIL@fontsel\hfil}}%
- }%
-\kern-2.2mm}%
+ }%
+ \penalty0
+\else % font not found
+ \typeout{Did not find font for #1--#2}%
+
+\fi}
% \end{macrocode}
% \end{CPK@macro}
-% \begin{CPK@macro}{\DeclareCiteCommand}\label{fields}
-% Trying to ensure we have an author's full name, not
-% just the surname. This came from \href{https://tex.stackexchange.com/questions/24979/citing-authors-full-name-in-biblatex}{lockstep},
-% modified at \textsf{biblatex}'s suggestion to
-% use {\ttfamily{}given-family} instead of
-% {\ttfamily{}first-last}, but it doesn't seem
-% to have any effect.\par
+%
% \begin{macrocode}
-\DeclareCiteCommand{\citefullauthor}
- {\boolfalse{citetracker}%
- \boolfalse{pagetracker}%
- \DeclareNameAlias{labelname}{given-family}%
- \usebibmacro{prenote}}
- {\ifciteindex
- {\indexnames{labelname}}
- {}%
- \printnames{labelname}}
- {\multicitedelim}
- {\usebibmacro{postnote}}
+\raggedright
% \end{macrocode}
-% \end{CPK@macro}
-% \begin{CPK@macro}{\DeclareLabeltitle}\label{macro--DeclareLabeltitle}
-% Similarly, in an attempt to get keep the author and
-% title for books and monographs, but use the editors and
-% volume/journal/book title for articles, incollection, and
-% inbook entry types, these two definitions don't seem to
-% have any effect. The remaining definitions are
-% needed to cope with the expected commands found in
-% sample bibliographies.\par
-% \begin{macrocode}
-%%\DeclareLabeltitle[article]{%
-%% \field{journaltitle}
-%%}
-%%\DeclareLabeltitle
-%% [inbook,incollection,inproceedings]{%
-%% \field{booktitle}
-%% \field{maintitle}
-%%}
%
-\DeclareFieldFormat*{citetitle}{#1}
-\let\citeA\textcite
-\let\titleref\emph
-\def\emdash{~--- }
-% \end{macrocode}
-% \end{CPK@macro}
% \iffalse
%</class>
% \fi
@@ -1953,572 +1843,5 @@ Package biblatex Warning: Please (re)run Biber on the file:
% \clearpage
% \raggedright
% \raggedright\printbibliography
-% \appendix
-% \newgeometry{left=3cm}
-% \clearpage
-% \section{The \LaTeX{} Project Public License (v\thinspace{}1.3c)}\label{LPPL}
-% \begin{quotation}\small\sffamily\parindent0pt
-% \parskip.5\baselineskip
-% \color{DarkBlue}\noindent
-% Everyone is allowed to distribute verbatim copies of this
-% license document, but modification of it is not allowed.\par
-% \end{quotation}
-% \subsection{Preamble}\label{Preamble}
-% The \LaTeX{} Project Public License ({\smaller LPPL})
-% is the primary license under which the \LaTeX{} kernel and the
-% base \LaTeX{} packages are distributed.\par
-% You may use this license for any work of which you hold the
-% copyright and which you wish to distribute. This license may be
-% particularly suitable if your work is \TeX{}-related (such as a
-% \LaTeX{} package), but it is written in such a way that you can
-% use it even if your work is unrelated to \TeX{}.\par
-% The section “Whether and How to Distribute Works under This
-% License”, below, gives instructions, examples, and
-% recommendations for authors who are considering distributing
-% their works under this license.\par
-% This license gives conditions under which a work may be
-% distributed and modified, as well as conditions under which
-% modified versions of that work may be distributed.\par
-% We, the \LaTeX{3} Project, believe that the conditions below
-% give you the freedom to make and distribute modified versions of
-% your work that conform with whatever technical specifications
-% you wish while maintaining the availability, integrity, and
-% reliability of that work. If you do not see how to achieve your
-% goal while meeting these conditions, then read the document
-% {\ttfamily{}cfgguide.tex} and {\ttfamily{}modguide.tex} in the base \LaTeX{}
-% distribution for suggestions.\par
-% \subsection{Definitions}\label{Definitions}
-% In this license document the following terms are used:\par
-% \begin{description}[style=unboxed]
-% \item[Work\thinspace:]Any work being distributed under this License.\par
-% \item[Derived Work\thinspace:]Any work that under any applicable law is derived from
-% the Work.\par
-% \item[Modification\thinspace:]Any procedure that produces a Derived Work under any
-% applicable law~--- for example, the production of a file
-% containing an original file associated with the Work or a
-% significant portion of such a file, either verbatim or
-% with modifications and/or translated into another
-% language.\par
-% \item[Modify\thinspace:]To apply any procedure that produces a Derived Work
-% under any applicable law.\par
-% \item[Distribution\thinspace:]Making copies of the Work available from one person to
-% another, in whole or in part. Distribution includes (but
-% is not limited to) making any electronic components of the
-% Work accessible by file transfer protocols such as
-% {\smaller FTP} or {\smaller HTTP} or by
-% shared file systems such as Sun's Network File System
-% ({\smaller NFS}).\par
-% \item[Compiled Work\thinspace:]A version of the Work that has been processed into a
-% form where it is directly usable on a computer system.
-% This processing may include using installation facilities
-% provided by the Work, transformations of the Work, copying
-% of components of the Work, or other activities. Note that
-% modification of any installation facilities provided by
-% the Work constitutes modification of the Work.\par
-% \item[Current Maintainer\thinspace:]A person or persons nominated as such within the Work.
-% If there is no such explicit nomination then it is the
-% `Copyright Holder' under any applicable
-% law.\par
-% \item[Base Interpreter\thinspace:]A program or process that is normally needed for
-% running or interpreting a part or the whole of the
-% Work.\par
-% A Base Interpreter may depend on external components
-% but these are not considered part of the Base Interpreter
-% provided that each external component clearly identifies
-% itself whenever it is used interactively. Unless
-% explicitly specified when applying the license to the
-% Work, the only applicable Base Interpreter is a
-% `\LaTeX{}-Format' or in the case of files
-% belonging to the `\LaTeX{}-format' a program
-% implementing the `\TeX{} language'.\par
-% \end{description}
-% \subsection{Conditions on Distribution and Modification}\label{Conditions}
-% \begin{enumerate}
-% \item Activities other than distribution and/or modification
-% of the Work are not covered by this license; they are
-% outside its scope. In particular, the act of running the
-% Work is not restricted and no requirements are made
-% concerning any offers of support for the Work.\par
-% \item \label{item-distribute}You may distribute a complete, unmodified copy of the
-% Work as you received it. Distribution of only part of the
-% Work is considered modification of the Work, and no right to
-% distribute such a Derived Work may be assumed under the
-% terms of this clause.\par
-% \item You may distribute a Compiled Work that has been
-% generated from a complete, unmodified copy of the Work as
-% distributed under Clause~item~\ref{item-distribute} above above, as
-% long as that Compiled Work is distributed in such a way that
-% the recipients may install the Compiled Work on their system
-% exactly as it would have been installed if they generated a
-% Compiled Work directly from the Work.\par
-% \item \label{item-currmaint}If you are the Current Maintainer of the Work, you may,
-% without restriction, modify the Work, thus creating a
-% Derived Work. You may also distribute the Derived Work
-% without restriction, including Compiled Works generated from
-% the Derived Work. Derived Works distributed in this manner
-% by the Current Maintainer are considered to be updated
-% versions of the Work.\par
-% \item If you are not the Current Maintainer of the Work, you
-% may modify your copy of the Work, thus creating a Derived
-% Work based on the Work, and compile this Derived Work, thus
-% creating a Compiled Work based on the Derived Work.\par
-% \item \label{item-conditions}If you are not the Current Maintainer of the Work, you
-% may distribute a Derived Work provided the following
-% conditions are met for every component of the Work unless
-% that component clearly states in the copyright notice that
-% it is exempt from that condition. Only the Current
-% Maintainer is allowed to add such statements of exemption to
-% a component of the Work.\par
-% \begin{enumerate}
-% \item If a component of this Derived Work can be a direct
-% replacement for a component of the Work when that
-% component is used with the Base Interpreter, then,
-% wherever this component of the Work identifies itself to
-% the user when used interactively with that Base
-% Interpreter, the replacement component of this Derived
-% Work clearly and unambiguously identifies itself as a
-% modified version of this component to the user when used
-% interactively with that Base Interpreter.\par
-% \item Every component of the Derived Work contains
-% prominent notices detailing the nature of the changes to
-% that component, or a prominent reference to another file
-% that is distributed as part of the Derived Work and that
-% contains a complete and accurate log of the
-% changes.\par
-% \item No information in the Derived Work implies that any
-% persons, including (but not limited to) the authors of
-% the original version of the Work, provide any support,
-% including (but not limited to) the reporting and
-% handling of errors, to recipients of the Derived Work
-% unless those persons have stated explicitly that they do
-% provide such support for the Derived Work.\par
-% \item You distribute at least one of the following with
-% the Derived Work:\par
-% \begin{enumerate}
-% \item A complete, unmodified copy of the Work; if your
-% distribution of a modified component is made by
-% offering access to copy the modified component from
-% a designated place, then offering equivalent access
-% to copy the Work from the same or some similar place
-% meets this condition, even though third parties are
-% not compelled to copy the Work along with the
-% modified component;\par
-% \item Information that is sufficient to obtain a
-% complete, unmodified copy of the Work.\par
-% \end{enumerate}
-% \end{enumerate}
-% \item If you are not the Current Maintainer of the Work, you
-% may distribute a Compiled Work generated from a Derived
-% Work, as long as the Derived Work is distributed to all
-% recipients of the Compiled Work, and as long as the
-% conditions of Clause~item~\ref{item-conditions} above, above, are met
-% with regard to the Derived Work.\par
-% \item The conditions above are not intended to prohibit, and
-% hence do not apply to, the modification, by any method, of
-% any component so that it becomes identical to an updated
-% version of that component of the Work as it is distributed
-% by the Current Maintainer under Clause~item~\ref{item-currmaint} above, above.\par
-% \item Distribution of the Work or any Derived Work in an
-% alternative format, where the Work or that Derived Work (in
-% whole or in part) is then produced by applying some process
-% to that format, does not relax or nullify any sections of
-% this license as they pertain to the results of applying that
-% process.\par
-% \item % \begin{enumerate}
-% \item A Derived Work may be distributed under a different
-% license provided that license itself honors the
-% conditions listed in Clause~item~\ref{item-conditions} in the list on p.\thinspace\pageref{item-conditions} above, in
-% regard to the Work, though it does not have to honor the
-% rest of the conditions in this license.\par
-% \item If a Derived Work is distributed under a different
-% license, that Derived Work must provide sufficient
-% documentation as part of itself to allow each recipient
-% of that Derived Work to honor the restrictions in
-% Clause~item~\ref{item-conditions} in the list on p.\thinspace\pageref{item-conditions} above, concerning
-% changes from the Work.\par
-% \end{enumerate}
-% \item This license places no restrictions on works that are
-% unrelated to the Work, nor does this license place any
-% restrictions on aggregating such works with the Work by any
-% means.\par
-% \item Nothing in this license is intended to, or may be used
-% to, prevent complete compliance by all parties with all
-% applicable laws.\par
-% \end{enumerate}
-% \subsection{No Warranty}\label{Warranty}
-% There is no warranty for the Work. Except when otherwise
-% stated in writing, the Copyright Holder provides the Work
-% `as is', without warranty of any kind, either
-% expressed or implied, including, but not limited to, the implied
-% warranties of merchantability and fitness for a particular
-% purpose. The entire risk as to the quality and performance of
-% the Work is with you. Should the Work prove defective, you
-% assume the cost of all necessary servicing, repair, or
-% correction.\par
-% In no event unless required by applicable law or agreed to
-% in writing will The Copyright Holder, or any author named in the
-% components of the Work, or any other party who may distribute
-% and/or modify the Work as permitted above, be liable to you for
-% damages, including any general, special, incidental or
-% consequential damages arising out of any use of the Work or out
-% of inability to use the Work (including, but not limited to,
-% loss of data, data being rendered inaccurate, or losses
-% sustained by anyone as a result of any failure of the Work to
-% operate with any other programs), even if the Copyright Holder
-% or said author or said other party has been advised of the
-% possibility of such damages.\par
-% \subsection{Maintenance of The Work}\label{Maintenance}
-% The Work has the status `author-maintained'
-% if the Copyright Holder explicitly and prominently states near
-% the primary copyright notice in the Work that the Work can only
-% be maintained by the Copyright Holder or simply that it is
-% `author-maintained'.\par
-% The Work has the status `maintained' if there
-% is a Current Maintainer who has indicated in the Work that they
-% are willing to receive error reports for the Work (for example,
-% by supplying a valid e-mail address). It is not required for the
-% Current Maintainer to acknowledge or act upon these error
-% reports.\par
-% The Work changes from status `maintained' to
-% `unmaintained' if there is no Current Maintainer,
-% or the person stated to be Current Maintainer of the work cannot
-% be reached through the indicated means of communication for a
-% period of six months, and there are no other significant signs
-% of active maintenance.\par
-% You can become the Current Maintainer of the Work by
-% agreement with any existing Current Maintainer to take over this
-% role.\par
-% If the Work is unmaintained, you can become the Current
-% Maintainer of the Work through the following steps:\par
-% \begin{enumerate}
-% \item Make a reasonable attempt to trace the Current
-% Maintainer (and the Copyright Holder, if the two differ)
-% through the means of an Internet or similar search.\par
-% \item If this search is successful, then enquire whether the
-% Work is still maintained.\par
-% \begin{enumerate}
-% \item If it is being maintained, then ask the Current
-% Maintainer to update their communication data within one
-% month.\par
-% \item \label{item-intention}If the search is unsuccessful or no action to resume
-% active maintenance is taken by the Current Maintainer,
-% then announce within the pertinent community your
-% intention to take over maintenance. (If the Work is a
-% \LaTeX{} work, this could be done, for example, by
-% posting to \url{news:comp.text.tex}.)\par
-% \end{enumerate}
-% \item % \begin{enumerate}
-% \item If the Current Maintainer is reachable and agrees to
-% pass maintenance of the Work to you, then this takes
-% effect immediately upon announcement.\par
-% \item \label{item-announce}If the Current Maintainer is not reachable and the
-% Copyright Holder agrees that maintenance of the Work be
-% passed to you, then this takes effect immediately upon
-% announcement.\par
-% \end{enumerate}
-% \item \label{item-change}If you make an `intention announcement'
-% as described in~item~\ref{item-intention} in the list on p.\thinspace\pageref{item-intention} above and after three
-% months your intention is challenged neither by the Current
-% Maintainer nor by the Copyright Holder nor by other people,
-% then you may arrange for the Work to be changed so as to
-% name you as the (new) Current Maintainer.\par
-% \item If the previously unreachable Current Maintainer becomes
-% reachable once more within three months of a change
-% completed under the terms of~item~\ref{item-announce} in the list on p.\thinspace\pageref{item-announce}
-% or~item~\ref{item-change} above, then that
-% Current
-% Maintainer must become or remain the Current Maintainer upon
-% request provided they then update their communication data
-% within one month.\par
-% \end{enumerate}
-% A change in the Current Maintainer does not, of itself,
-% alter the fact that the Work is distributed under the
-% {\smaller LPPL} license.\par
-% If you become the Current Maintainer of the Work, you should
-% immediately provide, within the Work, a prominent and
-% unambiguous statement of your status as Current Maintainer. You
-% should also announce your new status to the same pertinent
-% community as in~item~\ref{item-intention} in the list on p.\thinspace\pageref{item-intention}
-% above.\par
-% \subsection{Whether and How to Distribute Works under This
-% License}\label{Distribute}
-% This section contains important instructions, examples, and
-% recommendations for authors who are considering distributing
-% their works under this license. These authors are addressed as
-% `you' in this section.\par
-% \subsubsection{Choosing This License or Another License}\label{Choosing}
-% If for any part of your work you want or need to use
-% \emph{distribution} conditions that differ
-% significantly from those in this license, then do not refer to
-% this license anywhere in your work but, instead, distribute
-% your work under a different license. You may use the text of
-% this license as a model for your own license, but your license
-% should not refer to the {\smaller LPPL} or otherwise
-% give the impression that your work is distributed under the
-% {\smaller LPPL}.\par
-% The document {\ttfamily{}modguide.tex} in the base \LaTeX{}
-% distribution explains the motivation behind the conditions of
-% this license. It explains, for example, why distributing
-% \LaTeX{} under the {\smaller GNU} General Public
-% License ({\smaller GPL}) was considered inappropriate.
-% Even if your work is unrelated to \LaTeX{}, the discussion in
-% {\ttfamily{}modguide.tex} may still be
-% relevant, and authors intending to distribute their works
-% under any license are encouraged to read it.\par
-% \subsubsection{A Recommendation on Modification Without
-% Distribution}\label{WithoutDistribution}
-% It is wise never to modify a component of the Work, even
-% for your own personal use, without also meeting the above
-% conditions for distributing the modified component. While you
-% might intend that such modifications will never be
-% distributed, often this will happen by accident~--- you may
-% forget that you have modified that component; or it may not
-% occur to you when allowing others to access the modified
-% version that you are thus distributing it and violating the
-% conditions of this license in ways that could have legal
-% implications and, worse, cause problems for the community. It
-% is therefore usually in your best interest to keep your copy
-% of the Work identical with the public one. Many works provide
-% ways to control the behavior of that work without altering any
-% of its licensed components.\par
-% \subsubsection{How to Use This License}\label{HowTo}
-% To use this license, place in each of the components of
-% your work both an explicit copyright notice including your
-% name and the year the work was authored and/or last
-% substantially modified. Include also a statement that the
-% distribution and/or modification of that component is
-% constrained by the conditions in this license.\par
-% Here is an example of such a notice and statement:\par
-% \iffalse
-%<*ignore>
-% \fi
-\begin{lstlisting}[language={[LaTeX]TeX}]
-%%% pig.dtx
-%%% Copyright 2005 M. Y. Name
-%%
-%% This work may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
-%% of this license or (at your option) any later version.
-%% The latest version of this license is in
-%% http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
-%% version 2005/12/01 or later.
-%%
-%% This work has the LPPL maintenance status `maintained'.
-%%
-%% The Current Maintainer of this work is M. Y. Name.
-%%
-%% This work consists of the files pig.dtx and pig.ins
-%% and the derived file pig.sty.
-\end{lstlisting}
-% \iffalse
-%</ignore>
-% \fi
-% Given such a notice and statement in a file, the
-% conditions given in this license document would apply, with
-% the `Work' referring to the three files
-% {\ttfamily{}pig.dtx}, {\ttfamily{}pig.ins}, and {\ttfamily{}pig.sty} (the last being generated
-% from {\ttfamily{}pig.dtx} using {\ttfamily{}pig.ins}), the `Base
-% Interpreter' referring to any
-% `\LaTeX{}-Format', and both `Copyright
-% Holder' and `Current Maintainer'
-% referring to the person
-% M.~Y.~Name\index{!}.\par
-% If you do not want the Maintenance section of
-% {\smaller LPPL} to apply to your Work, change
-% `maintained' above into
-% `author-maintained'. However, we recommend that
-% you use `maintained' as the Maintenance
-% section was added in order to ensure that your Work remains
-% useful to the community even when you can no longer maintain
-% and support it yourself.\par
-% \subsubsection{Derived Works That Are Not Replacements}\label{NotReplacements}
-% Several clauses of the {\smaller LPPL} specify
-% means to provide reliability and stability for the user
-% community. They therefore concern themselves with the case
-% that a Derived Work is intended to be used as a (compatible or
-% incompatible) replacement of the original Work. If this is not
-% the case (e.g., if a few lines of code are reused for a
-% completely different task), then clauses 6b and 6d shall not
-% apply.\par
-% \subsubsection{Important Recommendations}\label{Recommendations}
-% \paragraph[Defining What Constitutes the Work]{Defining What Constitutes the Work :}
-% The {\smaller LPPL} requires that distributions
-% of the Work contain all the files of the Work. It is
-% therefore important that you provide a way for the licensee
-% to determine which files constitute the Work. This could,
-% for example, be achieved by explicitly listing all the files
-% of the Work near the copyright notice of each file or by
-% using a line such as:\par
-% \iffalse
-%<*ignore>
-% \fi
-\begin{lstlisting}[language={[LaTeX]TeX}]
-%% This work consists of all files listed in manifest.txt.
-\end{lstlisting}
-% \iffalse
-%</ignore>
-% \fi
-% in that place. In the absence of an unequivocal list it
-% might be impossible for the licensee to determine what is
-% considered by you to comprise the Work and, in such a case,
-% the licensee would be entitled to make reasonable
-% conjectures as to which files comprise the Work.\par
-% \iffalse
-%<*script>
-#! /bin/bash
-
-# prepdata.sh - prepare the datasets for the bookshelf package
-# which creates a bookshelf image from a BiBTeX file.
-#
-# Peter Flynn, 2020-05-14 <peter@silmaril.ie>
-#
-# Dependencies: the standard UNIX/GNU Linux text utilities
-# and builtins : cat, grep, awk, mkdir, rm, echo, sed, sort
-# PLUS the font-cache program fc-list (1) and the TeX utility
-# kpsewhich (1).
-#
-# Note that if you have not updated your font-cach to take
-# account of fonts added since installation (eg fonts
-# distributed with TeX which are not installed in the system
-# fonts directories) then you should edit /etc/fonts/conf.avail
-# to add the directories where they are installed to (eg)
-# 09-texlive.conf and then alias that file to conf.d, and then
-# run fc-cache as root.
-
-if [ -z "$1" ]; then
- echo You must give the full name of your BiBTeX file
- exit 1
-else
- if [ ! -s "$1" ]; then
-echo I can\'t find the file "$1" anywhere here
-exit 1
- else
-BIBFILE="$1"
- fi
-fi
-
-###########################################################
-#
-# Make a list of all the entries in the bib file. This is
-# in effect the 'driver' which creates each book spine image
-# and the entries.tex file is \input in the test.tex file.
-
-cat "$BIBFILE" |\
- grep '^@' |\
- grep -viE '(@Preamble|@String)' |\
- awk -F\{ '{print $2}' |\
- awk -F, '{print "\\makebook{" $1 "}%"}' >entries.tex
-
-echo `cat entries.tex|wc -l` bibliographic entries
-
-##########################################################
-#
-# Make a list of all the fonts available: this omits PFB
-# fonts (Postscript Type 1) and deduplicates the entries
-# on the first token of their name. CRITICALLY it then
-# applies a (typically) VERY LONG list of disallowed font
-# names so as to exclude non-text fonts: math, symbols,
-# display fonts, bogus and broken fonts, and fonts not
-# providing the Latin alphabet.
-#
-# Note that the current list includes many names which
-# ought not be there, because problems were encountered
-# when using them, especially as they returned a value
-# for the title length of 0.0pt, which is clearly a bug.
-
-mkdir -p fontsel
-rm -f fontsel/*
-
-if [[ "$OSTYPE" =~ ^darwin ]]; then
-
- system_profiler SPFontsDataType 2>/dev/null |\
- awk -F: '/^[ ]{4}[A-Za-z0-9\;\ ]*.[ot]tf*:$/ {font=substr($1,5)} \
- /^[ ]{10}Family:/ {if(font!="") \
- {print substr($2,2);font=""}}' |\
- grep -Ev '^[\.\ ]' |\
- sort |\
- uniq |\
- grep -Evi '(Bitmap|Emoji|Dingbats|Jazz|STIX|dings|Symbol|Numeric|DIN|Ornament|OCR|CJK|Awesome|Dummy|Math)' |\
- awk '{file="fontsel/" NR ".tex";\
- print "\\newfontface{\\SILmfont}{" $0 "}" >file;
- print "\\def\\SILmfontname{" $0 "}" >file;
- close(file)} \
- END {print "\\setcounter{SIL@maxfont}{" NR "}"}' >pickfont.tex
-
-elif [[ "$OSTYPE" =~ ^linux ]]; then
-
- fc-list |\
- grep -v '\.[ot]tf' |\
- grep -Ev '(fontsite|bitstrea)' |\
- awk -F: '{print substr($2,2)}' |\
- awk -F, '{print $1}' |\
- awk '{print $1 "," length($0) "," $0}' |\
- sort -t, -k 1,1 -k 2n |\
- awk -F, '{if($1!=last)print $3;last=$1}' |\
- grep -Evi '(Bitmap|Emoji|Dingbats|Jazz|STIX|dings|Symbol|Numeric|DIN|Ornament|OCR|CJK|Awesome|Dummy|Math)' |\
- awk '{file="fontsel/" NR ".tex";\
- print "\\newfontface{\\SILmfont}{" $0 "}" >file;
- print "\\def\\SILmfontname{" $0 "}" >file;
- close(file)} \
- END {print "\\setcounter{SIL@maxfont}{" NR "}"}' >pickfont.tex
-
-fi
-
-echo `ls -1 fontsel|wc -l` fonts
-
-###########################################################
-#
-# Make a list of the colour selection from the SVG palette
-# of the xcolor LaTeX package, with calculation of the
-# brightness/darkness value according to
-# https://www.nbdtech.com/Blog/archive/2008/04/27/Calculating-the-Perceived-Brightness-of-a-Color.aspx
-
-PALETTE=`kpsewhich svgnam.def`
-cat $PALETTE |\
- grep '^[A-Z][A-Za-z]*,[\.0-9][0-9]*,[\.0-9][0-9]*,[\.0-9][0-9]*' |\
- awk -F\; '{print $1}' |\
- awk -F, '{r=$2;g=$3;b=$4} \
- {brightness=sqrt((0.241*r*r)+(0.691*g*g)+(0.068*b*b))} \
- {print $1,r,g,b,brightness}' >svgnam.csv
- cat svgnam.csv |\
- awk 'BEGIN {print "\\newcommand{\\SIL@svgcolname}[1]{\\ifcase#1 "} \
- {print $1 "\\or"} END {print "Black\\fi}\n"}' >svgnam.tex
- cat svgnam.csv |\
- awk 'BEGIN {print "\\newcommand{\\SIL@svgcolval}[1]{\\ifcase#1 "} \
- {print $5 "\\or"} END {print ".666666666\\fi}\n"}' >>svgnam.tex
- cat svgnam.csv | wc -l |\
- awk '{print "\\setcounter{SIL@maxcolno}{" $1 "}"}' >>svgnam.tex
-
-echo `cat svgnam.csv|wc -l` colors
-
-exit 0
-
-%</script>
-% \fi
-% \iffalse
-%<*tester>
-%<<COMMENT
-% !TEX TS-program = xelatex
-% !TEX encoding = UTF-8 Unicode
-% !BIB TS-program = biber
-%COMMENT
-
-%</tester>
-% \fi
-% \iffalse
-%<*tester>
-\documentclass[a0paper,landscape]{bookshelf}
-\addbibresource{mythesis.bib}
-\begin{document}\raggedright
-%%\immediate\write18{./prepdata.sh}
-%%\input{entries.tex}
-\nocite{*}
-\par\vfill\clearpage
-\printbibliography
-\end{document}
-
-%</tester>
-% \fi
% \Finale