diff options
author | Norbert Preining <norbert@preining.info> | 2024-10-08 03:03:42 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2024-10-08 03:03:42 +0000 |
commit | e84c1272f5d94f43b893ba3b6b66e9dbf59218e1 (patch) | |
tree | f09c0341e482d86cac39fbd9bb021e3ad88deda4 /graphics/bookshelf/bookshelf.dtx | |
parent | b85e181731f8abcc7859d7de77c2ecf61f5f1a68 (diff) |
CTAN sync 202410080303
Diffstat (limited to 'graphics/bookshelf/bookshelf.dtx')
-rw-r--r-- | graphics/bookshelf/bookshelf.dtx | 1507 |
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 |